Несколько Предыдущие ответы указывают на то, что is True
не принадлежит, но не почему. На многих языках вы посмотрите на operator precedence за эту информацию, но в этом случае вы на самом деле (непреднамеренно) используете chained comparisons - функцию, которая позволяет провести тест диапазона формы bottom<=value<top
. Таким образом, ваши условия требовали как vacationcheck=='n'
, так и 'n' is True
, а последнее не может быть (потому что is
проверяет один и тот же объект, а не эквивалентность, и они все равно эквивалентны как булевы). Поэтому неважно, что вы ввели. Единственная причина, по которой вы получили поведение во втором случае, - это то, что вы дублировали ее перед тестированием.
Разница между raw_input и input - это поведение Python 2, но если входной сигнал когда-либо работал для вас, скорее всего, вы уже используете Python 3, где вам не нужно так беспокоиться.
Я рекомендую два простых средства: во-первых, когда вы не знаете, что влияет на вашу динамическую переменную, распечатайте ее, используя print repr(vacationCheck)
.Это получает вам форму, которую вы могли бы войти в интерпретатор, так что вы можете проверить, если это на самом деле значение вы тестируете, а затем проверить самих испытаний:
>>> vacationCheck=raw_input()
n
>>> print repr(vacationCheck)
'n'
>>> vacationCheck=='n' is True
False
>>> vacationCheck=='n'
True
>>> 'n' is True
False
>>>
Во-вторых, не проверяют значения против Правда или Ложно конкретно. Все значения имеют истинность, как указано в разделе Boolean operations, поэтому что-то вроде is True
без лишних ограничений ограничивает одно конкретное истинное значение среди бесконечного множества, помимо того, что вы рискуете такими проблемами, как тот, с которым вы столкнулись.
Прочтите pep8 [http://legacy.python.org/dev/peps/pep-0008/] и некоторые основы для инструкции 'if' [https://docs.python.org/2/tutorial/controlflow .html # if-statements] – sepulchered