简单的python程序

时间:2011-11-22 17:55:29

标签: python

忍受我,我对编程世界非常陌生。我试图为与医疗账单相关的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')

我知道它很基本..我只需要一个箭头指向正确的方向。

谢谢!

8 个答案:

答案 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代码作为键,答案/描述作为值。通过这种方式,您可以放入大量代码和说明,而无需使用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')

答案 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.2float,而不是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: ')]