while循环的文本表达式在python中不起作用

时间:2019-06-05 17:06:29

标签: python while-loop

我接受输入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时,循环终止

我不明白我在做什么错

4 个答案:

答案 0 :(得分:3)

让我们说p1 == "X"p2 == "O"。第一个条件为假,但第二个条件为真,因此循环继续。

一个更简单的表达式来表达您想要的条件

while p1 not in "XO" or p2 not in "XO" or p1 == p2:

第一个确保p1XO;第二个确保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

其他一些示例提供了更好的方法,但这是您当前代码的问题所在。