Python摇滚剪纸虫我不懂

2024-04-29 04:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python开发一个石头剪纸游戏,我对下面的结果非常满意,直到我注意到我得到了以下“无效答案”案例:

player1=p和player2=s

player1=s和player2=r

关于下面的代码逻辑,我不明白为什么这些案例不起作用。其他字母相同的组合对两个玩家都适用

我做错了什么

(我正在使用Python上的jupyter)

scoreP1 = 0
scoreP2 = 0
game = True
while game != 'QUIT':
    player1 = input("\nJanken! Player 1, type 'r' for Rock, 'p' for Paper or 's' for Scissor: ")
    player2 = input("Janken! Player 2, type 'r' for Rock, 'p' for Paper or 's' for Scissor: ")
    if(
        (player1=="r" and player2=="s") or
        (player1=="p" and player2=="r") or
        (player1=="s" and player2=="p")
    ):
        print("\nPlayer 1 wins! Congrats! Updating scores...")
        scoreP1+=1
        print("Score player 1:",scoreP1)
        print("Score player 2:",scoreP2)
    elif(
        player1==player2
    ):
        print("\nTie! Updating scores...")
        print("Score player 1:",scoreP1)
        print("Score player 2:",scoreP2)
        
    elif(
        player1 != "r" or
        player1 != "s" or
        player1 != "p" or
        player2 != "r" or
        player2 != "s" or
        player2 != "p"
    ):
        print("\nNot a valid answer. Please type 'r' for Rock, 'p' for Paper or 's' for Scissor.")
    else:
        print("Player 2 wins! Congrats! Updating scores...")
        scoreP2+=1
        print("Score player 1:",scoreP1)
        print("Score player 2:",scoreP2)
    game = input("\nAnother game? Type 'QUIT' to end this, or anything else to continue:")

Tags: orgameforinputtypepaperscoreplayer
3条回答

在上一次elif中,您正在测试player1或player2是否与您接受的答案不同

if (player1 != "r" or player1 != "s"...)

这是真的,因为如果它是“r”,它就不是“s”,如果它是“s”,那么它就是“r”等

如果不属于上述任何一种情况,则应在测试时使用,而不是或。 用AND替换这些或,您应该会没事的

elif(
    player1 != "r" or
    player1 != "s" or
    player1 != "p" or
    player2 != "r" or
    player2 != "s" or
    player2 != "p"
):

此代码块要求其中一行为True,以使整个elif为True

如果player1 == 's',代码会说“s不等于r”,因此这个'or'-语句列表必须为True

问题在于,对于应返回“玩家2赢”(例如player1==“s”和player2==“r”)的结果,无效的if块匹配:

player1 != "r" or
player1 != "s" or
player1 != "p" or
player2 != "r" or
player2 != "s" or
player2 != "p"

你可能是说

( player1 != "r" and player1 != "s" and player1 != "p" ) 
or ( player2 != "r" and player2 != "s" and player2 != "p" )

或者,更像Python:

 player1 not in ["s", "p", "r"] or player2 not in ["s", "p", "r"] 

相关问题 更多 >