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”
时,不应重复此操作答案 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")