【问题标题】:Rock Paper and Scissors in PythonPython中的石头剪刀布
【发布时间】:2020-04-27 19:31:48
【问题描述】:

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

# 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()

【问题讨论】:

  • 需要从递归调用返回,即else子句中的return choose_option()
  • 附带说明,您可以使用if user_choice.lower() in ['rock','r']: 节省一些打字时间
  • 甚至使用正则表达式 - if re.search(r'(scissors|s)', user_choice, flags=re.I)

标签: python python-3.x


【解决方案1】:

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

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 [],只是比输入所有选项容易一点。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    而不是

    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",则实际上不会返回结果。

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多