Need help ending a while loop

Viewed 37

So I'm having a problem where I can't figure out how to end a specific while loop.

one = [1, 3, 5, 7, 8, 10, 12]
thirty = [4, 6, 9, 11]

while True:
    try:
        month = int(input("Enter the number of the month: "))
    except month == "":
        print("Program ending")
        break
    except ValueError:
        print("Please enter a number")
        continue
    else:
        def days(month): 
            if month in one:
                return 31
            elif month in thirty:
                return 30
            elif month == 2:
                return 28
        
    if days(month) == None:
            print("The number has to be between 1-12")
    else:
        print("This month has", days(month) ,"days.")

So the program is supposed to tell you how many days are in the specified month and pretty much what I want to achieve is that the loop goes on and asks the question again until the user leaves a blank input (presses enter). I have searched google for quite some time but just can't seem to find the solution for my exact problem. I found out that you can't take the value of something in except: if the value was given in try:, which is the case in the code at the moment. Thanks in advance :)

2 Answers

A few little mistakes

As Chris said defining a function inside a while loop is of no use so define the function above you while loop

Secondly you shouldnt try to convert your input to an int before chehing if its '' so you wont get a ValueError

Here is the code fixed

one = [1, 3, 5, 7, 8, 10, 12]
thirty = [4, 6, 9, 11]

def days(month):
    if month in one:
        return 31
    elif month in thirty:
        return 30
    elif month == 2:
        return 28


while True:
    month = input("Enter the number of the month: ")
    if month == '':
        break
    else:
        try:
            month = int(month)
        except ValueError:
            print("Please enter a number")
            continue

    if days(month) == None:
        print("The number has to be between 1-12")
    else:
        print("This month has", days(month), "days.")

Some comments regarding your code in general. You defined the input as an integer why would you even try to compare an integer with a string. You could do your string to int conversion a much later. Defining your function in a loop is not a good practice.

Also consider using switch statements or in python dictionaries when you need multiple if statements.

Edit

Catching a ValueError

Here is the adjusted code.

months = {
    1: 31, 2: 28, 3: 31,
    4: 30, 5: 31, 6: 30,
    7: 31, 8: 31, 9: 30,
    10: 31, 11: 30, 12: 31
}

while True:
    month = input("Enter the number of the month: ")
    if month == "":
        print("Program ending")
        break
    try:
        month = int(month)
    except ValueError:
        print("please enter a number")

    if month in months.keys():
        print(months[month])
    else:
        print("not a month")
Related