Nick Nick - 4 months ago 7
Python Question

How to give an error msg based on user input in my program?

So I've written an Electric Bill Calculator in Python. The great news is that it works! However, I need to make it work better. When asked how many hours per day, the user can type in 25, or any other number they want. Obviously there isn't 25 hours in a day. I've tried a few things but I cannot get it to work correctly.

I've tried something like:

hours = input("How many hours per day? ")
if hours > 24:
print("Don't be silly, theres not more than 24 hours in a day ")
else:
main()


What I'm trying to do, is make the program display an error msg, if they enter more than 24 hours, and if they do, then skip to the bottom code that asks if they want to try another calculation. And if they enter 24 hours or less, then continue the program with no error msg. I've spent about 2 days trying to fix this, searched google for hours, I may have seen the right answer but can't seem to make it work. I assume I need some kind of while True statement, or if;then, but as many times as i have tried, I'm pulling my hair out at this point. The code to the entire program is below:

def main():
star = '*' * 70
print star
print ("Nick's Electric Bill Calculator")
print star
watts = input("Enter the watts of appliance, or total watts of appliances ")
hours = input("Enter the number of hours that appliance(s) run per day ")
cost = input("Enter the cost in cents per KwH you pay for electricty " )

# print ("Don't be silly, there isn't more than 24 hours in a day!")

x = (watts * hours / 1000.0 * 30) * cost
total = x
print star
print ("""If you use %s watts of electricity for %s hours per day, at a cost of
%s cents per Kilo-watt hour, you will add $%s to your monthly
electric bill""") % (watts, hours, cost, total)
print star

playagain = 'yes'
while playagain == 'yes':
main()
print('Would you like to do another Calculation? (yes or no)')
playagain = raw_input()


I'm new to programming, I've only been learning Python for a few weeks, many thanks in advance for any advice.

Answer

An optimized version of @JamesRusso code :

def main():
    star = '*' * 70
    print star
    print ("Nick's Electric Bill Calculator")
    print star
    watts = int(input("Enter the watts of appliance, or total watts of appliances"))
    hours = int(input("Enter the number of hours that appliance(s) run per day"))
    # Check that the hours number is good before getting to the cost
    while (hours > 24) or (hours < 0):
        print("Don't be silly, theres not more than 24 or less than 0 hours in a day ")
        hours = int(input("Enter the number of hours that appliance(s) run per day "))
    cost = int(input("Enter the cost in cents per KwH you pay for electricty "))

    # We don't need an auxiliary variable x here
    total = (watts * hours / 1000.0 * 30) * cost

    print star

    print ("""If you use %s watts of electricity for %s hours per day, at a cost of %s cents per Kilo-watt hour, you will add $%s to your monthly electric bill""") % (watts, hours, cost, total)
       print star

if __name__ == '__main__':
    playagain = 'yes'
    while playagain == 'yes': 
        main()
        print 'Would you like to do another Calculation? (yes or no)'
        playagain = raw_input()
        # Checking that the user's input is whether yes or no
        while playagain not in ['yes', 'no']:
            print 'It's a yes/no question god damn it'
            print 'Would you like to do another Calculation? (yes or no)'
            playagain = raw_input()
Comments