Rafael Knuth wrote: > Hej there, > > I want to use a while loop in a program (version used: Python 3.3.0), > and I expect it to loop unless the user enters an integer or a > floating-point number instead of a string. > > print("TIME TRACKING") > hours_worked = input("How many hours did you work today? ") > while hours_worked != str() or int(): > hours_worked = input("Can't understand you. Please enter a number! ") > > print("you worked " + str(hours_worked) + " hours today.") > > When I run the program, it keeps looping even if the condition is met. > How do I need to modify the program on the 3rd line so that it stops > looping when the user enters a floating-point number or an integer?
Let's have a look at what input() gives: >>> input("How many hours did you work today? ") How many hours did you work today? 1234 '1234' A human being would understand that I was either very busy or that I lied, but from Python's point of view this is just a str containing some digits, not an actual number. Now let's see str() actually is: >>> str() '' An empty string. Now int(): >>> int() 0 The integer 0. So your loop is while "1234" != "" or 0: ... and following Python's precedence rules it is evaluated as while ("1234" != "") or 0: ... With that information, can you work out with what input your script would terminate (or not enter) the while loop? Now how can we find out if the string can be converted to a valid (non- negative) float? You have to check the characters and verify that there are at most one ".", at least one digit and no other non-digits. While it would be a good exercise for you to try and implement the above check there is a simpler approach: just try the conversion and catch the potential error: valid = True # we are optimists try: hours_worked = float(hours_worked) except ValueError: valid = False # only executed when the string is not a valid float Try to integrate this into your script and come back here if you run into problems. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor