ГЛАВА 4. ОПЕРАТОРЫ ОТНОШЕНИЙ

Числа можно сравнивать. В Python для этого есть следующие операции сравнения:

В интерактивном режиме сравним два числа:

Python возвращает True 19 (Истина == 120), когда сравнение верное и False (Ложь == 0) – в ином случае. True и False относятся к логическому (булевому) типу данных bool.

Отдельного разговора заслуживает сравнение вещественных чисел, т.к. оно может привести к неожиданным, на первый взгляд, результатам (см. стандарт IEEE 754):

С целыми числами все более-менее просто и понятно. Рассмотрим теперь более сложные логические выражения.

Логическим высказыванием (предикатом) 21 будем называть любое повествовательное предложение, в отношении которого можно однозначно сказать, истинно оно или ложно.

Например, высказывание: «6 — четное число». Истинно или ложно? Очевидно, что истинно. А высказывание: «6 больше 19»? Хм. Высказывание ложно. Никакого подвоха в этом нет.
Является ли высказыванием фраза: «у него голубые глаза»? Хочется спросить, у кого?
Однозначности в этой фразе нет, поэтому она не является высказыванием.
Далее высказывания можно комбинировать. Высказывания «Петров – врач», «Петров – шахматист» можно объединять с помощью связок И, ИЛИ. «Петров – врач И шахматист». Это высказывание истинно, если ОБА высказывания «Петров – врач» И «Петров – шахматист» являются истинными. «Петров – врач ИЛИ шахматист». Это высказывание истинно, если истинным является ОДНО ИЗ высказываний «Петров – врач» ИЛИ «Петров – шахматист».

Как это используется в Python? Рассмотрим пример комбинаций из высказываний:

Все, что мы сказали про комбинацию логических высказываний, можно объединить и представить в виде таблицы22, где 0 – False, а 1 – True.

Для Python истинным или ложным может быть не только логическое высказывание, но и объект. Так, что же такое истина в Python?

В Python любое число, не равное нулю, или непустой объект интерпретируется как истина. Числа, равные нулю, пустые объекты и специальный объект None23 интерпретируются как ложь.

Рассмотрим пример:

Мы выполнили логическую операцию and (И) для двух объектов: пустого строкового объекта (он будет ложным) и ненулевого числового объекта (он будет истинным). В итоге Python вернул нам пустой строковый объект. В чем тут дело? Затем мы выполнили аналогично операцию or (ИЛИ). В результате получили числовой объект. Будем разбираться.

У Python есть три логических оператора and, or, not. not из них самый простой:

Результатом применения логического оператора not (НЕ) произойдет отрицание операнда, т.е. если операнд истинный, то not вернет – ложь, если ложный, то – истину.

Логический оператор and (И) вернет True (истину) или False (ложь)24, если его операндами являются логические высказывания.

Если операндами оператора and являются объекты, то в результате Python вернет объект:

Для вычисления оператора and Python вычисляет операнды слева направо и возвращает первый объект, имеющий ложное значение. Посмотрим на столбец and таблицы истинности. Какая закономерность? Если среди операндов (X, Y) есть ложный, то получим ложное значение, но вместо ложного значения для операндов-объектов Python возвращает первый ложный операнд, встретившийся в выражении, и дальше вычисления НЕ производит. Это называется вычислением по короткой схеме.

Если Python не удается найти ложный объект-операнд, то он возвращает крайний правый операнд.

Логический оператор or действует похожим образом, но для объектов-операндов Python возвращает первый объект, имеющий истинное значение. Python прекратит дальнейшие вычисления, как только будет найден первый объект, имеющий истинное значение.

Таким образом, конечный результат становится известен еще до вычисления остальной части выражения.

Логические выражения можно комбинировать:

В Python можно проверять принадлежность интервалу:

Теперь вы без труда сможете разобраться в работе следующего кода: