忍受我,我对编程世界非常陌生。我试图为与医疗账单相关的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:对于基数为10的int()的无效文字: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 :(得分:3)
在Python中,int
数据类型只能包含整数,而不包含小数部分。对于您的应用程序,由于您不会使用输入的数字进行任何实际的算术,因此最好将它们保留为字符串。因此,根本不要致电int
:
number = "844"
guess = input('Enter ICD-9 Code')
请注意我如何更改number
,以便"844"
出现在引号中。这意味着它可以包含任何字符值,例如"844.2"
或"fred"
。
还有另一种名为float
的数据类型,它包含浮点值(带小数部分的数字)。但是,这种类型不适合您的应用程序,因为您不打算使用这些数字进行计算。
答案 1 :(得分: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')
答案 2 :(得分:1)
您可以使用ValueError
代替float()
来修复int()
。 int
无法存储非整数,即小数点后的值。
至于你的其余问题,你应该考虑使用dictionary
(参见python文档),ICD-9代码作为键,答案/描述作为值。通过这种方式,您可以放入大量代码和说明,而无需使用if
和elif
的巨大块。考虑通过阅读文件或其他内容来填写此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')
答案 3 :(得分:0)
您应该将其强制转换为float()而不是int()。转换为float后,可以使用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
您的问题不明确,如果您想要更好的答案,请改进它。
答案 4 :(得分:0)
不要使用试图解释用户给出的值的input()
(并且可能会造成一些安全问题)。首选raw_input()
,它总是返回一个字符串。然后你可以比较字符串而不是数字。
Python字典对于您要构建的内容也是一个很好的结构。
答案 5 :(得分:0)
首先,844.2
为float
,而不是int
:)
对于数字范围 - 你的意思是这样吗?:
487.1 456.4 654.7
在您的输入上使用split(' ')
。使用raw_input
总是将整行作为字符串,而不管用字符串做什么,都可以使用它。
编辑,如其他答案中所述 - 如果此代码与数字无关(旁边的数字;]) - 请将它们保留为字符串。
答案 6 :(得分:0)
我只是想把它放在那里,要求宽恕总比提出要求更好。这是一个python最佳实践,作为一个初级程序员可能与你无关,但是从右脚开始是很好的。
try
只是说“尝试做以下事情”,而except
说“如果您尝试执行上述操作时出现以下错误之一,请执行此操作”。如果您尝试使用无效密钥访问您的字典(在交互式解释器中自己尝试,它将始终列出异常),您可以告诉KeyError
是正确的错误,就像您获得{{ 1}}之前的例外:
ValueError
哦,还要提一下,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()
我认为这里的主要优点是你知道你有一些有限的输入,所以你不必乱用for code in code_list:
try:
print (good_numbers[guess])
except KeyError:
print ( code, 'is an invalid IDC-9 code')
循环和while
计数器或任何东西。
哦,是的,记得在完成后关闭你的文件!
running
答案 7 :(得分:0)
创建一个由您正在寻找的值索引的结果字典,如:
ICDCODES = { "487.1": "Influenza with respiratory manifestations",
"844.2": "Cruciate Ligament Tear of Knee" }
然后只需比较和匹配:
print ICDCODES[input('Enter ICD-9 Code: ')]