РАЗБИРАЕМ ПО ШАГАМ
От идеи к работающему коду
Одного сравнения часто недостаточно: доступ разрешён, если есть пропуск и не истёк срок, либо есть разрешение администратора. Логические операторы соединяют простые проверки в правило, которое можно прочитать и проверить.
Сразу к запуску примера ↓
- 1Простые условия
- 2and / or / not
- 3Общее решение
1. and: должны выполняться оба условия
Для булевых значений and даёт True только тогда, когда обе части истинны. Например, температура должна быть не ниже 15 и не выше 35. Значения на обеих границах подходят.
Python допускает краткую запись 15 <= temperature <= 35. На старте полезно сначала написать два сравнения с and, чтобы видеть обе проверки.
temperature = 15comfortable = temperature >= 15 and temperature <= 35print(comfortable)2. or: достаточно одного условия
Для булевых значений or возвращает True, если хотя бы одно условие истинно. «Хотя бы одно» включает случай, когда истинны оба. Это не правило «строго одно из двух».
Доступ по билету или приглашению разрешён и тому, у кого есть оба документа. Проверяй четыре комбинации: нет/нет, нет/да, да/нет, да/да.
has_ticket = Falsehas_invitation = Trueallowed = has_ticket or has_invitationprint(allowed)3. not: меняем булево значение
not превращает True в False и наоборот. Правило будильника можно записать так: учебный день и не каникулы. Имена переменных помогают читать выражение почти как предложение.
Здесь мы используем булевы значения. В общем случае and и or могут возвращать сами операнды, а не только True/False; сейчас не смешиваем их с числами и строками.
school_day = Trueholiday = Falseif school_day and not holiday: print("Будильник включён")else: print("Будильник выключен")4. Скобки и границы
not выполняется раньше and, а and раньше or. Если смысл не очевиден с первого взгляда, поставь скобки: это делает намерение автора явным.
Для диапазона 15–35 проверь 14, 15, 35, 36. Для доступа проверь каждую комбинацию документов. Один удачный пример не доказывает правильность правила. Ошибки часто живут ровно на границах.
has_pass = Truepass_valid = Falseis_admin = Falseallowed = (has_pass and pass_valid) or is_adminprint(allowed)Где легко ошибиться
- Запись x == 1 or 2 не означает «x равно 1 или 2». Нужны два сравнения.
- and и or не взаимозаменяемы.
- Строка "False" — непустой текст, а не булево False.
Проверь понимание: Какие результаты даст and и or для True и False?
True and False даёт False: оба условия не выполнены. True or False даёт True: одного достаточно.
