Я пытаюсь изучить Python, и я наткнулся на эту невероятно странную аномалию, программируя «викторину» для своих собственных целей обучения. Логическая «или» функция действует немного странно. Вот фрагмент кода:«или» не функционирует так, как должно быть в 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».
Итак, я подозреваю, что если кто-то сделал «useranswer» что-то бесполезное, как «lol» через raw_input, он будет снова запрашивать пользователя до тех пор, пока «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."
Это кажется немного излишним для меня. Что происходит в первом скрипте?
'или' выражение, а не функция. –
Это не так, как 'или' работает -' или 'берет левую сторону и правую сторону и возвращает' True', если обе стороны оценивает значение «True». То, что вы написали, имеет смысл на английском языке, но не на Python. –
_or_ не является традиционным булевым оператором. Он оценивает первый элемент, где bool (item) == True. Так что _'fred 'или' jane'_ 'является' fred 'и _None или' jane'_ 'является' jane '. С переменными, _x = None; у = «джан»; print x или y_ prints 'jane'. – tdelaney