jdgaub
jdgaub

Reputation: 191

Simple python program

Bear with me, i'm extremely new to the world of programming. I'm trying to design a simple data entry/answer program for ICD-9 codes related to medical billing.

Example:

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

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

I sketched this out in a few minutes, but I have no idea how to get the program to read a range of numbers instead of just the one number. I'm also getting ValueErrors: invalid literal for int() with base 10: 844.2, so I used 844 just to test.

Filename: 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')

I know it's basic.. I just need an arrow pointing me in the right direction.

Thanks!

Upvotes: 2

Views: 837

Answers (8)

mikebabcock
mikebabcock

Reputation: 791

Create a dictionary of results indexed by the values you're looking for like:

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

Then just compare and match:

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

Upvotes: 0

Greg Hewgill
Greg Hewgill

Reputation: 994629

In Python, the int data type can hold only whole integers, with no fractional part. For your application, since you won't be doing any actual arithmetic with the entered numbers, it's probably best to keep them as a string. So don't call int at all:

number = "844"

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

Notice how I changed number so that "844" appears in quotes. This means it could contain any character values, such as "844.2" or "fred".

There is another data type called float that holds floating point values (numbers with fractional parts). However, this type is not suitable for your application because you're not going to do calculations with these numbers.

Upvotes: 3

machine yearning
machine yearning

Reputation: 10129

I'm just going to put it out there that it's always better to ask for forgiveness than to ask permission. This is a python best practice, which may not be relevant to you as a beginning programmer, but it's good to get started on the right foot.

try just says "try to do the following stuff" and except says "if there was one of the following errors when you tried to do the above stuff, do this stuff instead". You can tell that KeyError is the right error to put here if you try to access your dictionary with an invalid key (try it yourself in the interactive interpreter, it will always list the exception) just like you were getting ValueError exceptions before:

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

Oh and just to mention also that break says to quit looping out of the inner-most loop and continue says to go back to the beginning of aforementioned loop.

Enter ICD-9 Code: asd
Invalid entry
Enter ICD-9 Code: 487.1
Influenza with respiratory manifestations
>>>

Now just to point you in the right direction, you might be wanting to read input from a file; in this case, you're going to want to investigate the open command. To parse the input you can probably use split or something:

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

Then you can feed your codes into your dicitonary one at a time like:

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

I think the main advantage here is that you know that you have some finite input, so you don't have to mess around with while loops and running counters or anything.

Oh yeah and remember to close your file when done!

med_codes.close()

Upvotes: 0

Adam Jurczyk
Adam Jurczyk

Reputation: 2131

First of all, 844.2 is float, not int :)

For range of numbers - you mean like this?:

487.1 456.4 654.7

Than use split(' ') on your input. Use raw_input to always get whole line as a string, than you can do with it whatever you can do with strings.

edit as noted in other answers - if this codes has nothing to do with numbers (beside digits in them;] ) - leave them as strings.

Upvotes: 0

Nate
Nate

Reputation: 12849

If you've got a predefined set of numbers that you'd like to use, you can test for inclusion in a dictionary:

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')

Upvotes: 3

aganders3
aganders3

Reputation: 5955

You can fix the ValueError by using float() instead of int(). An int is incapable of storing non-integers, i.e. numbers with values after the decimal point.

As for the rest of your question, you should think about using a dictionary (see the python documentation) with the ICD-9 codes as the keys and the answer/description as the values. This way you can put in a ton of codes and descriptions without having to use a giant block of if and elif. Consider filling this dictionary by reading in a file or something.

For example (once you have filled the 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')

Upvotes: 1

iurisilvio
iurisilvio

Reputation: 4987

You should cast it to float() instead of int(). After you convert to float, you can get the integer part with int().

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

To read a range of values, you can do something like this:

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

If you want N values, you can use a loop:

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

Your question is not clear, please improve it if you want a better answer.

Upvotes: 0

gurney alex
gurney alex

Reputation: 13655

don't use input() which tries to interpret the value given by the user (and can pose some security problems). Prefer raw_input() which always return a string. Then you can compare strings instead of numbers.

A Python dictionary is also a nice structure for what you are trying to build.

Upvotes: 0

Related Questions