摇滚,纸张,剪刀问题

时间:2018-01-15 10:55:17

标签: python

我正在创建一个非常简单的Rock,Paper,Scissors游戏,使用Python,但无法解决这个问题。 每次我输入命令提示符的答案时,它会输出消息'Invalid input, try again!',这是我告诉它在输入无效时要做的事情。但是,我没有输入无效的输入,这会保持打印而不是'Rock wins!'等。'Do you want to play again? (True or False)'在答案之前打印出来,当我输入True时,它会出现使用Invalid input我试过在复赛线上移动,但没有任何工作。

这是游戏,显示错误:

What's your name? Bob
And your name? Bill
 Bob, Do you want to choose rock, paper, or scissors? rock
 Bill, Do you want to choose rock, paper, or scissors? paper
Do you want to play again? (True or False) True
Invalid input, try again!

这是我的代码:

import sys 

user1 = input('What\'s your name?')
user2 = input('And your name?')
user1_answer = input('%s, Do you want to choose rock, paper, or scissors?' % user1)
user2_answer = input('%s, Do you want to choose rock, paper, or scissors?' % user2)

def compare(u1, u2):
    if u1 == u2:
        return('It\'s a tie!')
    elif u1 == 'rock':
        if u2 == 'scissors':
            return('Rock wins!')
        else:
            ('Paper wins!')
    elif u1 == 'scissors':
        if u2 == 'rock':
            return('Rock wins!')
        else:
            ('Paper wins!')
    elif u1 == 'scissors':
        if u2 == 'paper':
            return('Scissors wins!')
        else:
            ("Rock wins!")
    elif u1 == 'paper':
        if u2 == 'scissors':
            return('Scissors wins!')
        else:
            ('Rock wins!')
    elif u1 == 'paper':
        if u2 == 'rock':
            return('Paper wins!')
        else:
            ('Scissors wins!')
    elif u1 == 'rock':
        if u2 == 'paper':
            return('Paper wins!')
        else:
            ('Scissors wins!')
    else:
        return('Invalid input, try again!')

rematch = bool(input('Do you want to play again? (True or False)'))

print(compare(user1_answer, user2_answer))

1 个答案:

答案 0 :(得分:1)

您收到"输入无效,请重试!"因为您的输入字符串不是"rock""paper",所以它们实际上是" rock"" paper"。您可以使用str.strip从输入字符串中删除空格。另请考虑在input提示的末尾添加空白。

您的代码还有其他问题。例如,您永远不会使用rematch。您需要将主逻辑置于while循环中,该循环在rematch为假时中断。 (考虑在游戏结束时要求复赛,而不是之前。)

此外,if逻辑的某些分支不会返回任何内容,例如

else:
    ('Paper wins!')

具有相同的效果
else:
    pass