Python 为什么我的';而p1!=';循环永不停止
这一部分永远不会停止:Python 为什么我的';而p1!=';循环永不停止,python,python-3.x,while-loop,user-input,Python,Python 3.x,While Loop,User Input,这一部分永远不会停止: 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
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循环
while p1 != "rock" or p1 != "paper" or p1 != "scissors":
p1 = str(input("Please select rock/paper/scissors: "))
它说:p
可以是任何东西,而不是石头
,纸
,剪刀
。如果p
等于这些单词中的任何一个,则整个谓词变为True
,循环继续。应用时,您将或
误认为和
。无法退出循环,因为没有p
可以同时等于rock
、paper
和剪刀
你似乎想要的是
while p1 != "rock" or p1 != "paper" or p1 != "scissors":
p1 = str(input("Please select rock/paper/scissors: "))
它说:p
可以是任何东西,而不是石头
,纸
,剪刀
。如果p
等于这些单词中的任何一个,则整个谓词变为True
,循环继续。应用时,您将或
误认为和
。无法退出循环,因为没有p
可以同时等于rock
、paper
和剪刀
你似乎想要的是
while p1 != "rock" or p1 != "paper" or p1 != "scissors":
p1 = str(input("Please select rock/paper/scissors: "))
您应该重写您的条件:
while True:
word = input("Please select rock/paper/scissors: ") # it's already a string.
if word in ("rock", "paper", "scissors"):
break
如果一个条件正确,则退出白色循环。您应该重写条件:
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: "))
当您编写更复杂的程序时,这会很好地扩展:您可能会对参数使用函数调用,而不是简单的列表,并且在输入验证函数中,您会对值执行任意数量的测试等 其他答案都是正确的,但一种更为通俗的方法是列出可接受的输入(或元组),然后检查响应是否在其中:
while not (p1 == "rock" or p1 == "paper" or p1 == "scissors"):
p1 = str(input("Please select rock/paper/scissors: "))
当您编写更复杂的程序时,这会很好地扩展:您可能会对参数使用函数调用,而不是简单的列表,并且在输入验证函数中,您会对值执行任意数量的测试等 首先进入循环不应该是a=1
?您必须连接p!=使用和
,而不是或
。话虽如此,如果你的输入在这个列表中,请列出一个列表并进行测试。再仔细考虑一下这个条件。。。如果p1
等于“rock”
,则p1!=“rock”
将为假
。但是然后p1!=“paper”
自动变为True
,这意味着整个条件是True
。您可以在一张纸上手动通过此循环,并查看其逻辑是否有缺陷。首先进入循环不应该是a=1
?您必须连接p!=使用和
,而不是或
。话虽如此,如果你的输入在这个列表中,请列出一个列表并进行测试。再仔细考虑一下这个条件。。。如果p1
等于“rock”
,则p1!=“rock”
将为假
。但是然后p1!=“paper”
自动成为True
,这意味着整个条件是True
。您可以在一张纸上手动通过此循环,查看其逻辑是否有缺陷。答案的第二部分不正确:如果a和b或c,d或e和f实际上与如果(a和b)或(c和d)或(e和f)
。对。这不是我第一次在这个问题上出错。你回答的第二部分不是真的:如果a和b或c和d或e和f
实际上与如果(a和b)或(c和d)或(e和f)是一样的
。对。这不是我第一次出错。这似乎是非常冗余的编码。这似乎是非常冗余的编码。