首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python摇滚剪刀虫我不明白

Python摇滚剪刀虫我不明白
EN

Stack Overflow用户
提问于 2021-08-04 15:18:03
回答 5查看 121关注 0票数 0

我正在用Python编写一个摇滚剪刀游戏,我对下面的结果非常满意,直到我注意到我得到了下面的“无效答案”的情况:

player1 =p和player2 =s

player1 =s和player2 =r

我不明白为什么对于下面的代码逻辑,这些情况不起作用。同样字母的其他组合对两位玩家都很好。

我做错什么了?

(我在用朱庇特做蟒蛇)

代码语言:javascript
复制
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:")
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-08-04 15:22:08

问题是,对于应该返回"Player 2 wins“(例如player1=="s”和player2=="r")的结果,无效的if块匹配:

代码语言:javascript
复制
player1 != "r" or
player1 != "s" or
player1 != "p" or
player2 != "r" or
player2 != "s" or
player2 != "p"

你可能是说

代码语言:javascript
复制
( player1 != "r" and player1 != "s" and player1 != "p" ) 
or ( player2 != "r" and player2 != "s" and player2 != "p" )

或者,更多的丙酮:

代码语言:javascript
复制
 player1 not in ["s", "p", "r"] or player2 not in ["s", "p", "r"] 
票数 2
EN

Stack Overflow用户

发布于 2021-08-04 15:27:48

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2021-08-04 15:30:45

在最后一个elif中,您正在测试player1或player2是否与您接受的答案不同。

代码语言:javascript
复制
if (player1 != "r" or player1 != "s"...)

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

如果不属于任何一个thiese,那么在测试时应该使用它而不是OR。用和和替换那些或,你应该会没事的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68653853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档