我正在尝试学习 Python,并且在为自己的学习目的编写“测验”时偶然发现了这种令人难以置信的奇怪异常。布尔“或”函数有点奇怪。这是一段代码:
def answercheck(answer):
solved = 0
while solved == 0:
useranswer = raw_input("> ")
if useranswer == answer:
solved = 1
correct()
elif useranswer == "A" or "B" or "C" or "D":
solved = 1
incorrect()
else:
print "False input. Try again."
这就是发生的事情。在为测验参赛者打印出测验问题后,以真实答案作为参数调用 answercheck 函数。然后提示用户回答。因为我希望唯一有效的答案是“A”、“B”、“C”或“D”,所以我把它放在了一个“while”循环中。
所以,我怀疑,如果有人通过 raw_input 将 'useranswer' 变成了像 'lol' 这样无用的东西,它会再次提示用户,直到插入“A”、“B”、“C”或“D”作为答案。但是,它不会,并且将任何不是“答案”的答案都视为不正确。
所以我稍微改写了这个东西,当我这样做时它似乎起作用了:
def answercheck(answer):
solved = 0
while solved == 0:
useranswer = raw_input("> ")
if useranswer == answer:
solved = 1
correct()
elif useranswer == "A":
solved = 1
incorrect()
elif useranswer == "B":
solved = 1
incorrect()
elif useranswer == "C":
solved = 1
incorrect()
elif useranswer == "D":
solved = 1
incorrect()
else:
print "False input. Try again."
这对我来说似乎有点多余。第一个脚本出了什么问题?