Объясните разницу между операторами and, or и not на примерах из реальной жизни.
Напишите условие для проверки, что число находится в диапазоне от 10 до 20 включительно. Затем напишите условие, что число НЕ равно нулю. Как работают короткие замыкания (short-circuit evaluation) в Python?
1 ответ
По-бытовому: and — «оба условия выполнены», or — «хотя бы одно», not — переворот. Из жизни: беру зонт, если (идёт дождь and иду пешком) or прогноз обещает ливень.
Теперь ваши задачи:
if 10 <= x <= 20: # диапазон: в Python сравнения сцепляются в цепочку
...
if x != 0: # «не равно нулю»; короткий вариант: if x:
...
Цепочка 10 <= x <= 20 — приятная особенность Python. В большинстве языков пришлось бы писать x >= 10 and x <= 20.
Короткое замыкание: условия вычисляются слева направо, и вычисление останавливается, как только результат ясен. В a and b при ложном a до b дело не дойдёт; в a or b при истинном a — тоже. Это не только оптимизация, на этом строят защитные проверки:
if items and items[0] > 100: # пустой список — сразу False,
... # items[0] не выполнится, IndexError не будет
name = entered or 'Гость' # or возвращает первый «истинный» операнд
Обратите внимание на последнюю строку: and и or возвращают не True/False, а один из операндов — поэтому трюк с умолчанием и работает.