我正在为井字游戏编写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”,但是如果我连续两次选择无效的输入,循环就会中断。这不是我想要的,我希望它第三次再问我一次时间直到我做对。
答案 0 :(得分:1)
您的问题是由您正在循环中测试的条件中的逻辑错误引起的。您目前正在测试Player1_Tag != "X" or Player1_Tag != "0"
,无论True
是什么,它始终为Player1_Tag
。如果变量等于一个字符串,则将不等于另一个。由于您要使用or
加入这两个比较,因此永远不会退出循环。
您需要使用and
而不是or
(Player1_Tag != "X" and Player1_Tag != "0"
)加入测试片段,或否定比较(将!=
更改为{{1 }}),然后对整个表达式取反:==
。到De Morgan's laws,它们是等效的。
答案 1 :(得分:1)
Player1_Tag != "X" or Player1_Tag != "0"
总是为真。
考虑3种可能性:
Player1_Tag == "X"
,则Player1_Tag != "0"
Player1_Tag == "0"
,则Player1_Tag != "X"
Player1_Tag
是其他任何东西,则它既不是"X"
也不是"0"
。更清晰的写法是while Player1_Tag not in ("X","0"):
答案 2 :(得分:0)
问题是您本应该使用or
的时候使用过and
如果Player1_Tag
等于0
,则同时不等于X
然后or
检查其中一个是否为“真”