[Tutor] Paper Rock Scissors game - User's choice not returned properly

Joel Montes de Oca joelmontes01 at gmail.com
Mon Oct 31 19:47:56 CET 2011


On 10/31/2011 02:14 PM, Marc Tompkins wrote:
> On Mon, Oct 31, 2011 at 10:57 AM, Joel Montes de Oca
> <joelmontes01 at gmail.com>  wrote:
>>   I came up with this to solve the problem.
>>
>> def UserChoice ():    # The function that returns the choice from the user
>>      while 1:
>>
>>          print 'Please select (P) for paper, (R) for Rock, or (S) for Scissors.'
>>          choice = raw_input('What is your selection?: ')
>>          if choice.lower() in ('p', 'r','s'):    # Converts the user's choice to lowercase and confirms the choice is valid
>>              return choice
>>              break
>>          else:
>>              print 'Try again.'
>>
>> It puts the choice into a loop and only exits when the user enters a valid value. It works and it's so much easier to read too!
>>
> 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!
>
> One last thing:  HTML formatting is pretty, but it tends to screw
> things up.  Someone else is bound to say it if I don't, so:  please
> use plain text only when submitting code to the list.  Thanks!
Things for the tip Mark, I have set up Thunderbird to send text only 
when emailing the python.org domain.

-- 
-Joel M.



More information about the Tutor mailing list