2016-09-15 112 views
0

我正在學習python,並且我被卡在下面的代碼中的無限while循環中。雖然python中的語句循環

A = input("Hello what is your name? ") 
D = input("What is today's date? ") 
B = input("Did you have a good day [y/N]") 
while B != "y" or B != "Y" or B != "N" or B != "n": 
    B = input("Did you have a good day [y/N]") 
else: 
    if B == "Y" or B == "y": 
     print(A + ", ") 
     C = input("Tell me about your day ") 
     with open("Start.txt", "a") as infile: 
      infile.write("\n") 
      infile.write(A) 
      infile.write(" ran Start.py and said he had a good day on ") 
      infile.write(D) 
      infile.write(".") 
      infile.write("\n He reports today:\n  ") 
      infile.write(C) 
    elif B == "N" or "n": 
     print(A + ", ") 
     C = input("Tell me about your day ") 
     with open("Start.txt", "a") as infile: 
      infile.write("\n") 
      infile.write(A) 
      infile.write(" ran Start.py and said he had a bad day on ") 
      infile.write(D) 
      infile.write(".") 
      infile.write("\n He reports today:\n  ") 
      infile.write(C) 

當B進行比較,看它是否等於Y,Y,N,或N 但仍然不管我給它對於B輸入什麼堅持我到while語句,並保持該問題發生我在那裏。

回答

0

的問題是,你正在做while B != "y" or B != "Y" or B != "N" or B != "n":

隨着or如果任其選擇是正確返回true。因此,如果B =「N」 b!="N" or b!=n"是真正的原因是b仍然不是「N」

您可以通過and小號更換所有的or s到得到這個 while B != "y" and B != "Y" and B != "N" and B != "n":

2

的問題是在這裏解決這個:

while B != "y" or B != "Y" or B != "N" or B != "n": 

B總是不等於其中的一個。如果它是「y」,則不等於其他三個,依此類推。而且,由於您正在使用or來合併這些條件,因此,如果任何一個條件成立,循環就會繼續,正如我們所見,始終如此。

重寫使用and

while B != "y" and B != "Y" and B != "N" and B != "n": 

或應用德摩根定律(因子的not了表達和交換and/or的):

while not (B == "y" or B == "Y" or B == "N" or B == "n"): 

或最重要的,它寫了Python方式:

while B.lower() not in "yn": 

(這也接受一個空的答案,根據您的提示相當於「N」。爲了解決這個問題,只需將您elif爲純else,沒有條件。)

0

此行

elif B == "N" or "n": 

應該

elif B == "N" or B == "n": 

你應該使用條件下,只需"n"(非空字符串)表示true

1

讓我們使用while循環的簡化版本。

while B != "Y" or B != "y": 
    # ... 

有沒有辦法,這將永遠評估False

若B被設置爲Y然後B != "Y"False,但B != "y"True

我認爲,在這種情況下,它可能是更清潔做類似

while B not in ["y", "Y", "n", "N"]: 
    # ... 

然後將重複,直到輸入清單中的人物之一。

編輯:有些其他答案建議使用while B not in "yYnN"或等效。這在這裏工作,因爲你所有的預期迴應是一個字符。如果您稍後決定接受"yes"作爲回覆,那麼您將不得不使用上面顯示的列表。

0

這是最簡單的解決方案!

while B not in "YNyn":