我接受输入p1和p2,以任何顺序应为X且应为O。 我用while循环。我想我在文本表达式中没有犯任何错误,我不知道为什么它不起作用。
我真的需要有人检查
def players():
p1=p2=""
while((p1!="X" and p2!="O")or(p1!="O" and p2!="X")):
p1=input("enter p1:").upper()
p2=input("enter p2:").upper()
print(p1,p2)
players()
当我尝试p1 = X和p2 = O或反之时,循环没有根据条件终止,
当我尝试p1 = X,p2 = X和p1 = O,p2 = O时,循环终止
我不明白我在做什么错
答案 0 :(得分:3)
让我们说p1 == "X"
和p2 == "O"
。第一个条件为假,但第二个条件为真,因此循环继续。
一个更简单的表达式来表达您想要的条件
while p1 not in "XO" or p2 not in "XO" or p1 == p2:
第一个确保p1
是X
或O
;第二个确保p2
具有相同的属性,第三个确保两个玩家没有选择相同的标记。
由于只有两个有效选择,因此第一个选择将强制第二个选择,因此没有理由要求第二个提示:
while True:
p1 = input("enter p1: ").upper()
if p1 in "XO":
break
p2 = "O" if p1 == "X" else "X"
答案 1 :(得分:0)
给定您的p1 = X和p2 = O的示例,第二个条件的评估结果为true。这使您的while评估为while( (false) or (true))
。由于其中之一是正确的,因此循环继续。
有关以下while循环的信息,请参见以下链接:https://www.tutorialspoint.com/python/python_while_loop.htm
答案 2 :(得分:0)
有更有效的方法来执行此操作,但我尝试尽可能保留您的代码:
def players():
p1, p2 = "",""
options = ["X","O"]
while True:
p1_choice = input("enter p1:").upper()
p2_choice = input("enter p2:").upper()
if p1_choice or p2_choice not in options:
break
else:
# Do whatever here
答案 3 :(得分:0)
您的条件几乎有效:
您正在测试它们是否不匹配,而不是...将k
交换为!=
可以解决此问题。这样可以解决无效输入(例如==
或L
通过传递)的问题。
条件相反,您需要R
的结果。这样可以解决条件与您期望的相反的情况。两项更改的结果是:
not
请注意,这基本上是英文可读的:而X和O或O和X则不是。
我们可以测试一下,记住while not ((p1 == "X" and p2 == "O") or (p1 == "O" and p2 == "X")):
表示再试一次:
True
其他一些示例提供了更好的方法,但这是您当前代码的问题所在。