[Tutor] Paper Rock Scissors game - User's choice not returned properly
Joel Montes de Oca
joelmontes01 at gmail.com
Mon Oct 31 16:41:05 CET 2011
Hello everyone,
I am having a little trouble with a block of code that isn't behaving
the way I would expect. Maybe you can give me a hand and point where it
is going wrong.
The function that is not working correctly belongs to a Paper Rock
Scissor game I am making.
This particular function is responsible to:
a) Get the user's choice (Paper, Rock, or Scissors)
b) Return the user's choice within the variable choice to the
function that called it.
The function works correctly as long as the user _does not try to enter
a string other than_ 'P', 'R', or 'S'.
Logic:
Take the user's string and put it in the variable choice.
If choice is not 'P', 'R', or 'S'then pass a message to the user
and call the function again.
If the choice is 'P', 'R', or 'S'then return choice to where it was
called from.
The problem is this.
When the user enters a string other than the valid ones, the if
statements catches it and calls the same function again so the user can
enter a valid string. But the variable choice does not get assigned the
new string entered by the user, instead it is empty.
I would expect if the function runs again, the variable choice would be
updated to the last value given by the user.
The function: ( http://dpaste.com/644857/)
def UserChoice (): # The function that returns the choice from the user
print 'Please select (P) for paper, (R) for Rock, or (S) for Scissors.'
choice = raw_input('What is your selection?:')
if choice.lower() not in ('p', 'r','s'): # Converts the user's choice to lowercase and confirms the choice is valid
print 'I am sorry, you entered\'' + choice.upper() + '\' which is an invalid response. Please try again.'
raw_input('Press Enter to try again.')
UserChoice () # If the choice is not valid, run the function over
else:
return choice
Output with no problems: ( http://dpaste.com/644866/)
<http://dpaste.com/644866/>
Welcome to the PRS game.
Please select (P) for paper, (R) for Rock, or (S) for Scissors.
What is your selection?: s
You threw down Scissors while the computer threw down Rock
LOOSE
Output with problems: ( http://dpaste.com/644868/)
Welcome to the PRS game.
Please select (P) for paper, (R) for Rock, or (S) for Scissors.
What is your selection?: L
I am sorry, you entered 'L' which is an invalid response. Please try again.
Press Enter to try again.
Please select (P) for paper, (R) for Rock, or (S) for Scissors.
What is your selection?: s
You threw down None while the computer threw down Paper
LOOSE
Here's the full source code in case the problem is outside of the
function: ( http://dpaste.com/644873/)
import random # Import the random library
def main (): # The main function that gets called from main()
print '\nWelcome to the PRS game.\n'
choice = UserChoice () # Gets the choice from the user
cchoice = ComputerChoice () # Gets the choice from the computer
PrintOutcome (choice, cchoice) # Passes both choices to the PrintChoice function for display
return 0
def UserChoice (): # The function that returns the choice from the user
print 'Please select (P) for paper, (R) for Rock, or (S) for Scissors.'
choice = raw_input('What is your selection?:')
if choice.lower() not in ('p', 'r','s'): # Converts the user's choice to lowercase and confirms the choice is valid
print 'I am sorry, you entered\'' + choice.upper() + '\' which is an invalid response. Please try again.'
raw_input('Press Enter to try again.')
UserChoice () # If the choice is not valid, run the function over
else:
return choice
def ComputerChoice (): # The function that returns the choice from the computer
PRS = ['Rock', 'Paper', 'Scissors'] # A list of choices
cchoice = random.choice(PRS) # Choose a random item from the list
return cchoice # Return the function
def PrintOutcome (UC, CC): # Function responsable to display the choices and results
PRS = ['Rock', 'Paper', 'Scissors']
# Convert the letters to words
if UC == 'r':
UC = PRS[0]
elif UC == 'p':
UC = PRS[1]
elif UC == 's':
UC = PRS[2]
print '\n\tYou threw down', UC, 'while the computer threw down', CC +'\n'
# find the outcome of the game
if UC == CC:
print 'We have a tie, both players gain a point!'
elif UC == 'Rock' and CC == 'Scissors':
print 'WIN'
elif UC == 'Paper' and CC == 'Rock':
print 'WIN'
elif UC == 'Scissors' and CC == 'Paper':
print 'WIN'
else:
print 'LOOSE'
return 0
main()
I am using Python 2.7
I am running on Ubuntu 11.10
Thanks for any help
--
-Joel M.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20111031/e16e2f16/attachment-0001.html>
More information about the Tutor
mailing list