2011-11-22 4 views
2

나에게 곰이있어서, 나는 프로그래밍의 세계에 매우 새로운 것이다. 의료 청구와 관련된 ICD-9 코드에 대한 간단한 데이터 입력/응답 프로그램을 설계하려고합니다.간단한 파이썬 프로그램

예 : 나는 몇 분 안에이 밖으로 스케치,하지만 난 방법 대신에 단지 하나 개의 번호의 숫자의 범위를 읽을 수있는 프로그램을 얻을하는 아무 생각이

Enter ICD-9: "487.1" 
Answer: "Influenza with respiratory manifestations" 

Enter ICD-9 Code: "844.2" 
Answer: "Cruciate Ligament Tear of Knee" 

. 또한 ValueErrors가 발생합니다. int()에 대해 기본 10 : 844.2의 리터럴이 유효하지 않으므로 테스트 할 때 844를 사용했습니다.

파일 이름 : icd9wizard.py 나는 그것이 기본 알고

number = 844 
running = True 

while running: 
    guess = int(input('Enter ICD-9 Code: ')) 

    if guess == number: 
     print('Cruciate Ligament Tear of Knee') 
    elif guess < number: 
     print('Invalid entry') 
    else: 
     print('Invalid entry') 

.. 난 그냥 올바른 방향으로 날을 가리키는 화살표가 필요합니다.

감사합니다.

+0

당신이 "범위 무엇을 의미합니까 숫자의 "? 그것은 사용자가 입력하는 것입니까? 그렇다면 사용자가 볼 수있는 입력과 원하는 결과의 예를 들어 줄 수 있습니까? –

+0

응답에 만족하는 경우 업 다운 투표 버튼 옆에있는 "체크 표시"를 클릭하는 것이 일반적입니다. 따라서 미래의 수색자는 어떤 대답이 가장 적합한 지 알 수 있습니다. –

+0

내 첫 번째 생각은 숫자를 숫자로 취급하지 않고 문자열 일치를 수행하는 것입니다. 결국 숫자에 정확한 문자열 일치가 필요합니다. 숫자 순서는 중요하지 않습니다. – mikebabcock

답변

0

int() 대신 float()로 형변환해야합니다. float로 변환 한 후 정수 부분을 int()로 가져올 수 있습니다.

for i in range(N): 
    s = input("Enter a value: ") 
    # do something with this value 

귀하의 질문은 : 당신이 N 값을 원하는 경우에

s = input("Enter some values separated by space: ") 
a = [float(value) for value in s.split(" ")] # array of floats 

, 당신은 루프를 사용할 수 있습니다

s = "100.3" 
f = float(s) # 100.3 
i = int(f) # 100 

은이 같은 작업을 수행 할 수 있습니다, 값의 범위를 읽으려면 확실하지 않은 경우 더 나은 답변을 원할 경우 개선하십시오.

3

파이썬에서 int 데이터 유형은 분수 부분이없는 전체 정수만 포함 할 수 있습니다. 귀하의 응용 프로그램의 경우 실제 숫자 을 입력 한 숫자와 함께 사용하지 않으므로 문자로 유지하는 것이 가장 좋습니다. 그래서 모든 int를 호출하지 않는 : 나는 number을 변경하는 방법

number = "844" 

guess = input('Enter ICD-9 Code') 

공지 그래서 "844" 따옴표에 나타납니다. 즉, "844.2" 또는 "fred"과 같은 문자 값을 포함 할 수 있습니다.

float이라는 부동 소수점 값 (소수 부분이있는 숫자)을 보유하는 다른 데이터 유형이 있습니다. 그러나이 숫자로 계산을 수행하지 않으므로이 유형은 응용 프로그램에 적합하지 않습니다.

+0

숫자 계산을하지 않으려면 안전 문제를 고려하여 문자열로 보관하십시오. –

1

int() 대신 float()을 사용하여 ValueError을 수정할 수 있습니다. int은 비 정수, 즉 소수점 이하의 값이있는 숫자를 저장할 수 없습니다.

질문의 나머지 부분에 대해서는 dictionary (python 설명서 참조)을 ICD-9 코드를 키로 사용하고 answer/description을 값으로 사용하는 방법을 고려해야합니다. 이 방법을 사용하면 ifelif의 거대한 블록을 사용하지 않고도 수많은 코드와 설명을 넣을 수 있습니다. 파일을 읽음으로써이 dictionary을 채우는 것이 좋습니다.예를 들어

(당신이 dictonary을 채운 후) :

number = 844.2 
running = True 

while running: 
    guess = float(input('Enter ICD-9 Code: ')) 

    if guess in icd_9_dict.keys(): 
     print(icd_9_dict[guess]) 
    else: 
     print('Invalid entry') 
+0

감사합니다. 사전을 살펴 봅니다. – jdgaub

3

당신이 사용하고자하는 숫자의 미리 정의 된 세트를 가지고 있다면, 당신은 사전에 포함 테스트 할 수 있습니다

good_numbers = {"487.1": "Influenza with respiratory manifestations", 
       "844.2": "Cruciate Ligament Tear of Knee", 
       "133.7": "Being awesome at code"} 
running = True 

while running: 
    guess = raw_input('Enter ICD-9 Code: ') 

    if guess in good_numbers: 
     print good_numbers[guess] 
    else: 
     print('Invalid entry') 
+0

+1 좋은 관련 사례. 이 예제는 문자열을 사용하여 사전을 인덱싱하므로 위의 형식 캐스팅의 혼동을 방지합니다. –

+0

간단히 말하면 - 파이썬 2.7에서 작업 할 내 대답을 편집했습니다. 이것은 파이썬 3에서 여전히'input'을 사용해야하지만, 2.7에서'input'은'추측 '을'float'으로 만드는'eval'을 강제합니다. – Nate

+1

루프가 끝나면'running = False'를 설정하면 안됩니까? 더 나은 방법은, 쓸모없는 변수를 없애고, 끝내면 '중단'합니다. 더 나은 아직, 내가했던 것처럼 예외 처리를 사용하십시오. –

0

input()은 사용자가 제공 한 값을 해석하려고 시도하며 (일부 보안 문제가 발생할 수 있음) 사용하지 마십시오. 항상 문자열을 반환하는 raw_input()을 선호합니다. 그런 다음 숫자 대신 문자열을 비교할 수 있습니다.

파이썬 사전은 빌드하려는 대상을위한 멋진 구조이기도합니다. 모든

+1

파이썬 3처럼 보입니다 (print는 함수입니다). 그래서 input()이 올바른 방법입니다. – iurisilvio

0

첫째, 844.2하지 int :

번호의 범위를 들어, float입니다 - 귀하의 의견에 split(' ')를 사용하는 것보다이

487.1 456.4 654.7 

을? :처럼 당신은 의미한다. raw_input을 사용하면 문자열로 전체 행을 가져올 수 있습니다. 문자열로 할 수있는 모든 작업을 수행 할 수 있습니다.

다른 답변에 언급 된대로 -이 코드는 숫자와 아무런 관련이없는 경우 (숫자 옆에 있음)) - 문자열로 두십시오.

+0

@gurney alex에게'input'과'raw_input'에 대한주의를 주셔서 감사합니다 :) –

+0

그는 ICD9에 직접 비교할 수 있기를 원합니다. 그는 십진수를 사용하거나 문자열로 남겨 두는 것이 더 문자적일 수 있기 때문에 더 나아질 수 있습니다. – TimothyAWiseman

0

나는 용서를 구하는 것보다 용서를 구하는 것이 항상 낫다는 것을 분명히 밝힙니다. 이것은 파이썬의 베스트 프랙티스로, 시작 프로그래머와 관련이 없을 수도 있지만 오른발에서 시작하는 것이 좋습니다.

try 그냥 "다음과 같은 작업을 수행하려고합니다."라고 말하면 "위의 작업을 수행하려고 할 때 다음 오류 중 하나가 발생하면 대신이 작업을 수행하십시오."라는 메시지가 except에 표시됩니다. 이전에 ValueError 예외를 얻은 것처럼 잘못된 키를 사용하여 사전에 액세스하려는 경우 여기에 입력하는 올바른 오류는 KeyError입니다 (대화식 인터프리터에서 직접 시도하십시오. 예외가 항상 표시됨).

good_numbers = {"487.1": "Influenza with respiratory manifestations", 
      "844.2": "Cruciate Ligament Tear of Knee", 
      "133.7": "Being awesome at code"} 

while True: 
    try: 
     guess = input('Enter ICD-9 Code: ') 
     print(good_numbers[guess]) 
     break 
    except KeyError: 
     print('Invalid entry') 
     continue 

아, 단지 break이 가장 안쪽의 루프에서 루프를 종료한다고 말하면 continue은 앞에서 설명한 루프의 시작으로 돌아갑니다. 이제

단지 올바른 방향을 가리 키도록

Enter ICD-9 Code: asd 
Invalid entry 
Enter ICD-9 Code: 487.1 
Influenza with respiratory manifestations 
>>> 
, 당신은 파일에서 입력을 읽고 싶은 될 수있다; 이 경우 open 명령을 조사하려고합니다. 여기에 주요 장점은 것입니다
for code in code_list: 
    try: 
     print (good_numbers[guess]) 
    except KeyError: 
     print (code, 'is an invalid IDC-9 code') 

내가 생각 :

med_codes = open('IDC-9-2011.txt', 'r') 
code_list = med_codes.read().split() 

이 그럼 당신은 같은 시간에 dicitonary 하나에 당신의 코드를 공급할 수 : 입력을 구문 분석하기 위해 당신은 아마 split 또는 뭔가를 사용할 수 있습니다 어떤 유한 입력이 있다는 것을 알고 있으므로 while 루프와 running 카운터 또는 기타를 사용하지 않아도됩니다.

오 그래, 완료되면 파일을 닫아야합니다.

med_codes.close() 
+0

감사합니다. - 좋습니다. 나는 휴식을 취하고 프로그램을 계속 실행하기 위해 계속 삽입했다. – jdgaub

+0

그래, 그냥 브레이크 상태가없는 무한 루프가 있다면 'Ctrl + c'키를 눌러 프로그램을 종료 할 수있다. –

0

당신 같은 찾고있는 값에 의해 색인 결과의 사전을 만들기 :

ICDCODES = { "487.1": "Influenza with respiratory manifestations", 
      "844.2": "Cruciate Ligament Tear of Knee" } 

그럼 그냥 비교하고 일치 :

print ICDCODES[input('Enter ICD-9 Code: ')]