2011-11-22 45 views
2

忍耐與我,我對編程的世界非常新。我正試圖爲與醫療帳單相關的ICD-9代碼設計一個簡單的數據錄入/回答程序。簡單的python程序

例子:

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

您應該將其轉換爲float()而不是int()。在轉換爲浮點數後,您可以使用int()獲取整數部分。

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

要讀取值的範圍,你可以做這樣的事情:

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

如果你想要的N值,你可以使用一個循環:

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

你的問題不清楚,如果你想要更好的答案,請改善它。

3

在Python中,int數據類型只能保存整數,沒有小數部分。對於您的應用程序,由於您不會使用輸入的數字執行任何實際的算術,因此最好將它們保留爲字符串。所以不要打電話int都:

number = "844" 

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

注意我是如何改變number使"844"出現在引號。這意味着它可以包含任何字符值,例如"844.2""fred"

還有另一種數據類型叫做float,它保存浮點值(帶小數部分的數字)。但是,這種類型不適合您的應用程序,因爲您不打算對這些數字進行計算。

+0

我同意,如果您不打算進行任何數字計算,請將其保留爲字符串,以備安全考慮。 –

1

您可以通過使用float()而不是int()來修復ValueErrorint不能存儲非整數,即具有小數點後的值的數字。

至於你的問題的其餘部分,你應該考慮使用一個dictionary(見python文檔),ICD-9代碼作爲鍵和答案/描述作爲值。通過這種方式,您可以輸入大量代碼和說明,而無需使用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

只是一個簡短的說明 - 我編輯了我的答案,在Python 2.7上工作。這只是爲了消除歧義 - 你仍然應該在Python 3中使用'input',但是2.7中的'input'強制使用'eval',這使得'guess'成爲'float'。 – Nate

+1

當你完成循環時,你不應該設置'running = False'嗎?更好的是,只要在完成時擺脫那個無用的變量並且「斷開」。更好的是,像以下那樣使用異常處理。 –

0

不使用input()它試圖解釋用戶給出的值(並可能導致一些安全問題)。首選raw_input(),它總是返回一個字符串。然後你可以比較字符串而不是數字。

Python字典對於您正在嘗試構建的內容來說也是一個很好的結構。

+1

看起來它是Python 3(print是一個函數),所以input()是正確的方法。 – iurisilvio

0

首先,844.2float,不int :)

對於數字的範圍 - 你的意思是這樣?:

487.1 456.4 654.7 

比對您輸入使用split(' ')。使用raw_input總是將整行作爲一個字符串,而不是使用字符串可以完成的任何操作。

編輯正如在其他答案中指出的 - 如果這些代碼與數字無關(在他們的數字旁邊;)) - 將它們保留爲字符串。

+0

感謝@gurney alex關於'input' vs'raw_input'的說明:) –

+0

他希望能夠直接比較ICD9s。他可能會更好使用小數,或者甚至把它們作爲字符串,因爲那些將更加直接。 – TimothyAWiseman

0

我只是想把它放在那裏,要求寬恕總比徵求允許要好。這是一個蟒蛇的最佳實踐,作爲一個初學程序員可能與你無關,但是從右手開始是個好習慣。

try只是說「試着做下面的事情」,而except說「如果在嘗試做上述事情時出現以下錯誤之一,請改爲做這些事情」。你可以說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命令。解析輸入您也許可以使用split什麼:

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

然後你可以在喜歡的時間餵養你的代碼到你的dicitonary之一:

for code in code_list: 
    try: 
     print (good_numbers[guess]) 
    except KeyError: 
     print (code, 'is an invalid IDC-9 code') 

我認爲這裏的主要優點是,你知道你有一些有限的輸入,所以你不必亂用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: ')]