Python中的石纸和剪刀



我刚开始编程,我创建的Rock Paper and Scissors游戏没有按预期运行。如果有人输入了"石头、纸或剪刀"一词,那么程序就会按预期运行。然而,当有人输入石头、纸或剪刀以外的单词时,程序应该说"我不明白,请再试一次",并提示用户输入另一个输入,它确实输入了,但程序没有按预期继续工作,而是结束了。这是代码:

# The game of Rock Paper Scissors
import random
choices = ['rock', 'paper', 'scissors']
computer_choice = random.choice(choices)
selections = 'The computer chose ' + computer_choice + ' so'
computer_score = 0
user_score = 0
def choose_option():
user_choice = input('Please choose Rock, Paper or Scissors. (q to quit)n>>> ')
while user_choice != 'q':    
if user_choice in ['ROCK', 'Rock', 'rock', 'R', 'r']:
user_choice = 'rock'
elif user_choice in ['PAPER', 'Paper', 'paper', 'P', 'p']:
user_choice = 'paper'
elif user_choice in ['SCISSORS','Scissors', 'scissors', 'S', 's']:
user_choice = 'scissors'
else:
print("I don't understand, please try again.")
choose_option()           
return user_choice
user_choice = choose_option()
while user_choice != 'q':
if user_choice == computer_choice:
print(selections + ' it's a tie')
elif (user_choice == 'rock' and computer_choice == 'scissors'):
user_score += 1
print(selections + ' you won! :)')
elif (user_choice == 'paper' and computer_choice == 'rock'):
user_score += 1
print(selections + ' you won! :)')
elif (user_choice == 'scissors' and computer_choice == 'paper'):
user_score += 1
print(selections + ' you won! :)')   
elif (user_choice == 'rock' and computer_choice == 'paper'):
computer_score += 1
print(selections + ' you lost :(')
elif (user_choice == 'paper' and computer_choice == 'scissors'):
computer_score += 1
print(selections + ' you lost :(')
elif (user_choice == 'scissors' and computer_choice == 'rock'):
computer_score += 1
print(selections + ' you lost :(')
else: 
break
print('You: ' + str(user_score) + "    VS    " + "Computer: " + str(computer_score))
computer_choice = random.choice(choices)
selections = 'The computer chose ' + computer_choice + ' so'
user_choice = choose_option()

您的问题似乎是由调用函数内部的函数引起的。这为我解决了问题:

def choose_option():
user_choice = input('Please choose Rock, Paper or Scissors. (q to quit)n>>> ')
while user_choice != 'q':    
if user_choice in ['ROCK', 'Rock', 'rock', 'R', 'r']:
user_choice = 'rock'
return user_choice
elif user_choice in ['PAPER', 'Paper', 'paper', 'P', 'p']:
return user_choice
elif user_choice in ['SCISSORS','Scissors', 'scissors', 'S', 's']:
return user_choice
else:
while user_choice.lower() not in ["rock", "paper", "scissors", "s","r","p","q"]:
print("I don't understand, please try again.")
user_choice = input('Please choose Rock, Paper or Scissors. (q to quit)n>>> ')

这样,如果计算机不喜欢输入,它可以请求另一个。此外,我建议使用if user_choice.lower() in [],只是比键入所有选项简单一点。

希望这能有所帮助!

而不是

else:
print("I don't understand, please try again.")
choose_option()

你可以使用

while user_choice != 'q':    
user_choice = input('Please choose Rock, Paper or Scissors. (q to quit)n>>> ')
if user_choice in ['ROCK', 'Rock', 'rock', 'R', 'r']:
user_choice = 'rock'
elif user_choice in ['PAPER', 'Paper', 'paper', 'P', 'p']:
user_choice = 'paper'
elif user_choice in ['SCISSORS','Scissors', 'scissors', 'S', 's']:
user_choice = 'scissors'
else:
print("I don't understand, please try again.")
continue          
return user_choice

continue将使程序跳过循环的其余部分(此处跳过return(,并继续进行while循环的下一次迭代(返回到user_choice = ...(。还要注意,我认为还有另一个错误,如果user_choice"q",那么实际上不会返回结果。

最新更新