为什么我的朋友要来!=…'循环永不停止

2024-05-14 11:11:32 发布

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

def outcome(p1, p2):
    x = ''
    if p1 == p2:
        x = 0
        return x
    elif p1 == "rock" and p2 == "scissors" or p1 == "scissors" and p2 == "paper" or p1 == "paper" and p2 == "rock":
        x = 1
        return x
    elif p2 == "rock" and p1 == "scissors" or p2 == "scissors" and p1 == "paper" or p2 == "paper" and p1 == "rock":
        x = 2
        return x

a = 0
while a == 1:
    p1 = str(input("P1 choose: "))
    while p1 != "rock" or  p1 != "paper" or p1 != "scissors":
        p1 = str(input("Please select rock/paper/scissors: "))
    p2 = str(input("P2 choose: "))
    while p2 != "rock" or  p2 != "paper" or p2 != "scissors":
        p2 = str(input("Please select rock/paper/scissors: "))
    b = outcome(p1, p2)
    if b == 1:
        print("P1 wins\n")
    elif b == 2:
        print("P2 wins\n")
    elif b == 0:
        print("Tied\n")
    pit = str(input("Another one? yes/no - "))
    if pit == "no":
        a = 0
        raise SystemExit(0)

这部分永远不会停止:

while p1 != "rock" or  p1 != "paper" or p1 != "scissors":
        p1 = str(input("Please select rock/paper/scissors: "))

这是一个石头剪刀布游戏,当我输入正确或错误,它不工作,并不断重复。我希望它重复,直到你写石头,布,或剪刀,当你写其中一个,退出while循环。你知道吗


Tags: orandinputreturnifselectpaperp2
3条回答

其他答案都是正确的,但一种更为恶作剧的方法是列出可接受的输入(或元组),然后检查响应是否在其中:

valids = ["rock", "paper", "scissors"]
while p1 not in valids:
    p1 = str(input("Please select rock / paper / scissors: "))

当您编写更复杂的程序时,这种方法可以很好地扩展:不是简单的列表,而是对参数使用函数调用,在输入验证函数中,对值执行任意数量的测试等。你知道吗

while p1 != "rock" or  p1 != "paper" or p1 != "scissors":
    p1 = str(input("Please select rock/paper/scissors: "))

它说:p可能不是rockpaperscissors。如果p等于这些单词中的任何一个,则整个谓词变成True,循环继续。在应用De Morgan transform时,您将or误认为and。无法退出循环,因为没有p可以同时等于rockpaperscissors。你知道吗

你想要的是

while True:
  word = input("Please select rock/paper/scissors: ")  # it's already a string.
  if word in ("rock", "paper", "scissors"):
    break

你应该重写你的条件:

while not (p1 == "rock" or p1 == "paper" or p1 == "scissors"):
    p1 = str(input("Please select rock/paper/scissors: "))

如果一个条件是正确的,则退出白色循环。你知道吗

相关问题 更多 >

    热门问题