On Mon, Oct 31, 2011 at 1:14 PM, Marc Tompkins <marc.tompk...@gmail.com>wrote:
> > You could simplify it even further by actually using the "while": > > > def UserChoice (): # The function that returns the choice from the > user > > choice = '' > > attempt = 0 > > while choice.lower() not in ('p', 'r','s'): > > if attempt > 0: print 'Please try again.' > > print 'Please select (P) for paper, (R) for Rock, or (S) for > Scissors.' > > choice = raw_input('What is your selection?: ') > > attempt +=1 > > return choice.lower() > > It's a matter of personal preference, but I try to avoid "while 1" or > "while True" loops if at all possible. For one thing, it seems > counter-productive to set up a loop that doesn't exit, and then to > have to use 'break' to get out of it! > As a slight aside, I came up with a (fairly) simple recipe for this sort of occasion: def prompt(choices): try: for choice, desc in choices: print("%2s. %s" % (choice, desc)) prompt.choice = input("Choice: ") #use raw_input in Python 2.x print() return prompt.choice except TypeError: raise ValueError("prompt expects collection of pairs") Then you can do something like this: while prompt([("P", "Paper"), ("R", "Rock"), ("S", "Scissors)]).lower() not in ('p', 'r', 's'): print("Error: ", prompt.choice, " is not a valid choice!") #do something with prompt.choice here It handles keeping track of whatever the last choice was for you, and all you have to do is pass it a collection of pairs. If you wanted to make it specifically for your application, you could just change it to this: def prompt(): print("(P)aper") print("(R)ock") print("or (S)cissors?") prompt.choice = raw_input("Choice: ") return prompt.choice while prompt().lower() not in ('p', 'r', 's'): #print error message HTH, Wayne
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor