Python循环不断重复?为什么?

时间:2013-04-14 18:07:20

标签: python while-loop

Another_Mark = raw_input("would you like to enter another mark? (y/n)")

while Another_Mark.lower() != "n" or Another_Mark.lower() != "y":
    Another_Mark = raw_input("Do you want to input another mark? Please put either 'y' or 'n' this time")

if Another_Mark == "y":
    print "blah"

if Another_Mark == "n":
    print "Blue"

这不是我正在使用的实际代码,除了前三行。无论如何我的问题是为什么while循环仍然重复,即使我输入值'y'或'n',当它再次询问你是否想在第三行输入另一个标记时。我陷入了一个无限重复的循环中。 当Another_Mark的值更改为“y”或“n”

时,不应重复此操作

4 个答案:

答案 0 :(得分:5)

尝试:

while Another_Mark.lower() not in 'yn':
    Another_Mark = raw_input("Do you want to input another mark? Please put either 'y' or 'n' this time")
如果在给定的iterable中找不到给定的对象,则

not in运算符返回true,否则返回false。所以这是你正在寻找的解决方案:)


由于布尔代数错误,因此无法正常工作。正如Lattyware所写:

  

不是(a或b)(你所描述的)与不是a或b不同   (你的代码说的是什么)

>>> for a, b in itertools.product([True, False], repeat=2):
...     print(a, b, not (a or b), not a or not b, sep="\t")
... 
True    True    False   False
True    False   False   True
False   True    False   True
False   False   True    True

答案 1 :(得分:3)

你的循环逻辑只有每一个都是真的 - 如果输入是“n”,那么它不是“y”所以它是真的。相反,如果它是“y”,则不是“n”。

试试这个:

while not (Another_Mark.lower() == "n" or Another_Mark.lower() == "y"):
    Another_Mark = raw_input("Do you want to input another mark? Please put either 'y' or 'n' this time")

答案 2 :(得分:1)

循环背后的逻辑是错误的。这应该有效:

while Another_Mark.lower() != "n" and Another_Mark.lower() != "y":
    Another_Mark = raw_input("Do you want to input another mark? Please put either 'y' or 'n' this time")

答案 3 :(得分:1)

您需要使用AND代替OR。

这是布尔逻辑分配的方式。你可以说:

NOT ("yes" OR "no")

或者你可以通过将OR翻转到AND来将NOT分配到括号中(这是你想要做的):

(NOT "yes") AND (NOT "no")