Как работают булевы операторы в условиях "если"?

В настоящее время я новичок в Python и пытаюсь запустить несколько простых строк кода. Я не могу понять, как Python оценивает этот синтаксис после оператора if. Любые объяснения будут оценены.

number = int(raw_input("Enter number : "))

if number == (1 or 2 or 3):
 print "Match"
else:
 print "No match"

Только целое число 1 дает положительный результат, а любые другие числа, включая 2 и 3, проходят через ветку else. Могут ли быть сформулированы следующие условия:

if number == 1 or number == 2 or number == 3:

Спасибо.

3 ответа

Python имеет логические значения, такие как True и False, а также имеет значения фальши, такие как любой пустой список, кортеж или словарь, пустая строка, 0 и None. Истинные значения противоположны этому, а именно все, что определено.

Python or оценивает и short-circuts на первом элементе, который возвращает правдивое значение.

Таким образом, выражение (1 or 2 or 3) должно возвращать 1.

Если вы хотите сравнить со всеми элементами, то вы ищете in ключевом слове:

if number in (1, 2, 3):
 # Do logic


Вы, вероятно, хотите:

if number in (1, 2, 3):


Оператор or принимает два аргумента с левой и с правой стороны и выполняет следующую логику:

  1. Оцените материал с левой стороны.
  2. Если это правдоподобное значение (например, bool(x) is True, то это не ноль, пустая строка или None), верните его и остановите.
  3. В противном случае, оцените материал с правой стороны и верните это.

Таким образом, 1 or 2 or 3 просто 1, поэтому ваше выражение превращается в:

if number == (1):

Если вы на самом деле имеете в виду number == 1 or number == 2 or number == 3, или number in (1, 2, 3), вам нужно сказать это.

(Кстати: and оператор работает таким же образом, за исключением стадии 2 возвращается, если левая сторона является falsey.)

licensed under cc by-sa 3.0 with attribution.