icarus a écrit : > Hi all, i'm new to python. Learning on my own how to ask a user to > finish a loop or not. > For some reason, it behaves as infinite loop although I changed its > condition. Please tell me what I'm doing wrong. Thanks in advance.
Problem mostly solved, so I'll just comment a bit on the code: > > condition = True > > while ( condition ): You don't need the parens here while condition: > try: > integer_one = int ( raw_input( "Please enter an > integer: " ) ) > integer_two = int ( raw_input( "Please enter the > second integer: " ) ) > division = integer_one / integer_two > > except( ZeroDivisionError ): You don't need (nor want) the parens here: except ZeroDivisionError: > print "\nDivision by zero detected" > except( ValueError ): idem. Also, the user will have to start over (ie: re enter 2 integers) if it fails the second time. > print "\nYou didn't enter an integer" > else: > print "The result is", division > answer = raw_input("Do you want to try again (yes or > no)? ") > if answer == 'yes': > condition This line is basically a noop. You don't need this part of the branch. > elif answer == 'no': > condition = False This could be rewritten as: if answer == 'no': condition = False which is a very verbose way to say: condition = (answer != 'no') > print "Good bye, you don't want to continue" here's a possible rewrite: class DecodeError(RuntimeError): pass def nodecode(val): return val def decodeint(val): try: return int(val) except ValueError: raise DecodeError("%s is not an integer" % val) YESNO={'yes':True,'y':True,'no':False,'n':False} def decodeyesno(val): try: return YESNO[val.strip().lower()] except KeyError: raise DecodeError("please answer 'yes' or 'no'") def read_input(prompt, decode=nodecode): while True: val = raw_input(prompt) try: return decode(val) except DecodeError, e: print e def main(): run = True while run: integer_one = read_input("Please enter an integer: ", decodeint) integer_two = read_input( "Please enter the second integer: ", decodeint ) try: division = integer_one / integer_two except ZeroDivisionError: print "Division by zero detected" else: print "The result is", division run = read_input( "Do you want to try again (yes or no)? ", decodeyesno ) print "Good bye, you don't want to continue" if __name__ == '__main__': main() -- http://mail.python.org/mailman/listinfo/python-list