虽然python中的语句循环

虽然python中的语句循环

问题描述:

我正在学习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语句,并保持该问题发生我在那里。

的问题是,你正在做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":

的问题是在这里解决这个:

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,没有条件。)

此行

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

应该

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

你应该使用条件下,只需"n"(非空字符串)表示true

让我们使用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"作为回复,那么您将不得不使用上面显示的列表。

这是最简单的解决方案!

while B not in "YNyn":