2011-11-22 99 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: ')]