即使它为False,我似乎也无法摆脱While循环?

时间:2019-10-01 19:32:57

标签: python while-loop do-while

我正在为井字游戏编写Python代码,但是我已经偶然遇到了一个障碍,似乎无法打破While循环:

print("Welcome to Tic Toe!")

Player1_Tag=input("Player 1: Choose between X and 0: ")

while Player1_Tag != "X" or Player1_Tag != "0":
    print("Invalid input")
    Player1_Tag=input("Player 1: Choose between X and 0: ")
else:
    if Player1_Tag=="X":
        Player2_Tag="0"
    else:
        Player2_Tag="X"

当我运行该程序时,它会询问我是“ X”还是“ 0”-例如,如果我选择“#”,则会收到“无效输入”,然后再次询问我,在这种情况下,我选择了“ X”,但它再次给我“无效输入”,并再次问我。。这当然不是我想要的。我很困惑,因为即使我选择了有效的输入,我也不明白为什么循环继续进行?

我尝试在while循环中放置一个“ break”,但是如果我连续两次选择无效的输入,循环就会中断。这不是我想要的,我希望它第三次再问我一次时间直到我做对。

3 个答案:

答案 0 :(得分:1)

您的问题是由您正在循环中测试的条件中的逻辑错误引起的。您目前正在测试Player1_Tag != "X" or Player1_Tag != "0",无论True是什么,它始终为Player1_Tag。如果变量等于一个字符串,则将不等于另一个。由于您要使用or加入这两个比较,因此永远不会退出循环。

您需要使用and而不是orPlayer1_Tag != "X" and Player1_Tag != "0")加入测试片段,或否定比较(将!=更改为{{1 }}),然后对整个表达式取反:==。到De Morgan's laws,它们是等效的。

答案 1 :(得分:1)

Player1_Tag != "X" or Player1_Tag != "0" 总是为真。

考虑3种可能性:

  1. 如果Player1_Tag == "X",则Player1_Tag != "0"
  2. 如果Player1_Tag == "0",则Player1_Tag != "X"
  3. 如果Player1_Tag是其他任何东西,则它既不是"X"也不是"0"

更清晰的写法是while Player1_Tag not in ("X","0"):

答案 2 :(得分:0)

问题是您本应该使用or的时候使用过and

如果Player1_Tag等于0,则同时不等于X 然后or检查其中一个是否为“真”