簡體   English   中英

即使它是 False,我似乎也無法擺脫我的 While 循環?

[英]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 種可能性:

  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"):

問題是您已經使用過or何時應該使用過and

如果Player1_Tag等於0同時不等於X並且or檢查是否為“真”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM