[英]I can't seem to break out of my While loop even when it is False?
我正在為 Tic Tac Toe 游戲編寫 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 循環中放置一個“中斷”,但是如果我連續兩次選擇無效輸入,循環就會中斷。這不是我想要的,我希望它第三次、第四次再次詢問我,直到我修正它。
您的問題是由您在循環中測試的條件中的邏輯錯誤引起的。 您當前正在測試Player1_Tag != "X" or Player1_Tag != "0"
,無論Player1_Tag
是什么,它始終為True
。 如果變量等於其中一個字符串,它將不等於另一個。 由於您使用or
加入兩個比較,因此您永遠不會退出循環。
您需要使用and
而不是or
( Player1_Tag != "X" and Player1_Tag != "0"
) 加入測試的各個部分,或者否定比較(通過將!=
更改為==
)並對整個表達式: not (Player1_Tag == "X" or Player1_Tag == "0")
。 根據德摩根定律,這些是等價的。
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"):
問題是您已經使用過or
何時應該使用過and
如果Player1_Tag
等於0
同時不等於X
並且or
檢查是否為“真”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.