Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的语句循环_Python_While Loop - Fatal编程技术网

python中的语句循环

python中的语句循环,python,while-loop,Python,While Loop,我正在学习python,在下面的代码中,我陷入了无限while循环 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]")

我正在学习python,在下面的代码中,我陷入了无限while循环

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”或B!=“Y”或B!=“N”或B!=“n”:

使用
时,如果其中一个选项为true,则返回true。如果B=“N”
b=“N”或b=n“
为真,因为b仍然不是“n”

您可以通过将所有的
s替换为
s来解决此问题
当B!=“y”和B!=“y”和B!=“N”和B!=“N”:

问题是,当B!=“y”或B!=“y”或B!=“N”或B!=“N”时,您正在执行

使用
时,如果其中一个选项为true,则返回true。如果B=“N”
b!=“N”或b!=N”
为真,因为b仍然不是“N”

您可以通过将所有的
s替换为
s来解决此问题
whileb!=“y”和B!=“Y”和B!=“N”和B!=“n”:

问题在这里:

while B != "y" or B != "Y" or B != "N" or B != "n":
B
始终不等于其中一个。如果它是“y”,它就不等于其他三个,依此类推。由于您使用
组合这些条件,因此,如果任何一个条件为真,循环将继续,正如我们所看到的,情况总是如此

使用
重写:

while B != "y" and B != "Y" and B != "N" and B != "n":
或应用DeMorgan定律(将
从表达式中排除,并交换
/
):

或者最重要的是,用Python的方式编写:

while B.lower() not in "yn":
(这也接受一个空的答案,根据您的提示,这个答案相当于“N”。要处理这个问题,只需将您的
elif
转换为普通
else
,无条件即可。)

问题在于:

while B != "y" or B != "Y" or B != "N" or B != "n":
B
始终不等于其中一个。如果它是“y”,它就不等于其他三个,依此类推。由于您使用
组合这些条件,因此,如果任何一个条件为真,循环将继续,正如我们所看到的,情况总是如此

使用
重写:

while B != "y" and B != "Y" and B != "N" and B != "n":
或应用DeMorgan定律(将
从表达式中排除,并交换
/
):

或者最重要的是,用Python的方式编写:

while B.lower() not in "yn":
(这也接受一个空的答案,根据您的提示,这个答案相当于“N”。要处理这个问题,只需将您的
elif
转换为一个普通的
else
,无条件。)

这一行

elif B == "N" or "n":
应该是

elif B == "N" or B == "n":
您应该使用condition,简单地说,“n”
(非空字符串)表示
true

这一行

elif B == "N" or "n":
应该是

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

您应该使用condition,简单地说,“n”
(非空字符串)表示
true

让我们使用while循环的简化版本

while B != "Y" or B != "y":
    # ...
这不可能计算为
False

如果B设置为
Y
,则
B!=“Y”
将是
False
,但
B!=“y”
将为

我认为,在这种情况下,这样做可能更干净

while B not in ["y", "Y", "n", "N"]:
    # ...
然后将重复该操作,直到输入成为列表中的一个字符


编辑:其他一些答案建议使用
,而B不在“yYnN”中或等效项中。这在这里起作用,因为所有预期的响应都是一个字符。如果您稍后决定接受“是”
作为响应,则必须使用如上所示的列表。

让我们使用简化版的while循环

while B != "Y" or B != "y":
    # ...
这不可能计算为
False

如果B设置为
Y
,则
B!=“Y”
将是
False
,但
B!=“y”
将为

我认为,在这种情况下,这样做可能更干净

while B not in ["y", "Y", "n", "N"]:
    # ...
然后将重复该操作,直到输入成为列表中的一个字符


编辑:其他一些答案建议使用
,而B不在“yYnN”中或等效项中。这在这里起作用,因为所有预期的响应都是一个字符。如果您稍后决定接受“是”
作为响应,那么您将不得不使用上面所示的列表。

这是最简单的解决方案

while B not in "YNyn":

这是最简单的解决方案

while B not in "YNyn":