Привет! Мы уже умеем сравнивать значения с помощью операторов сравнения. Но что, если нужно проверить несколько условий одновременно? Например: «Если пользователь взрослый И у него есть права». Или: «Если сегодня выходной ИЛИ праздник».
Для этого в Python есть логические операторы:
and— И (оба условия должны быть истинны)or— ИЛИ (хотя бы одно условие истинно)not— НЕ (отрицание)
В этой статье разберём их подробно.
- Что нужно знать перед началом
- Основная часть
- Оператор and (И)
- Оператор or (ИЛИ)
- Оператор not (НЕ)
- Приоритет логических операторов
- Сокращённые вычисления (short-circuit evaluation)
- Комбинирование условий
- Примеры из реальной жизни
- Задачи для закрепления
- Нюансы и подводные камни
- and и or не всегда возвращают bool
- Путаница с &, |, ~
- Неправильный порядок операторов
- Частые ошибки и как их избежать
- Ошибка 1: & вместо and
- Ошибка 2: | вместо or
- Ошибка 3: not x == 5 вместо x != 5
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Понимание операторов сравнения
Совет: Логические операторы работают с логическим типом (
bool), но могут применяться и к другим типам.
Основная часть
Оператор and (И)
and возвращает True, если оба условия истинны.
age = 25
has_license = True
if age >= 18 and has_license:
print("Можно водить машину")
else:
print("Нельзя водить машину")Таблица истинности для and:
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
Совет:
andчасто используют для проверки нескольких условий одновременно.
Оператор or (ИЛИ)
or возвращает True, если хотя бы одно условие истинно.
is_weekend = True
is_holiday = False
if is_weekend or is_holiday:
print("Можно отдыхать")
else:
print("Рабочий день")Таблица истинности для or:
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
Совет:
orполезен, когда достаточно одного условия.
Оператор not (НЕ)
not инвертирует (переворачивает) значение: True → False, False → True.
is_raining = False
if not is_raining:
print("Можно гулять")
else:
print("Лучше остаться дома")Таблица истинности для not:
| A | not A |
|---|---|
| True | False |
| False | True |
Важно:
notимеет самый высокий приоритет среди логических операторов.
Приоритет логических операторов
not— выполняется первымandor— выполняется последним
x = True
y = False
z = True
result = not x or y and z
# 1. not x → False
# 2. y and z → False
# 3. False or False → False
# Для ясности используй скобки
result = (not x) or (y and z)Совет: Всегда используй скобки, если есть сомнения. Код станет понятнее.
Сокращённые вычисления (short-circuit evaluation)
Python не вычисляет вторую часть, если результат уже очевиден.
Для and: если первое условие False, второе не вычисляется.
x = 5
if x < 0 and (10 / x > 1): # (10 / x) не выполнится, т.к. x < 0 = False
print("OK")Для or: если первое условие True, второе не вычисляется.
x = 5
if x > 0 or (10 / x > 1): # (10 / x) не выполнится, т.к. x > 0 = True
print("OK")Комбинирование условий
age = 25
is_student = True
has_discount = False
if (age < 18 or is_student) and not has_discount:
print("Скидка не применена")
else:
print("Скидка применена")Совет: Разбивай сложные условия на несколько строк для читаемости.
is_young = age < 18
is_eligible = is_young or is_student
has_no_discount = not has_discount
if is_eligible and has_no_discount:
print("Скидка не применена")Примеры из реальной жизни
Пример 1. Проверка логина и пароля:
username = input("Логин: ")
password = input("Пароль: ")
if username == "admin" and password == "12345":
print("Добро пожаловать!")
else:
print("Неверный логин или пароль")Пример 2. Проверка возраста для доступа:
age = int(input("Сколько тебе лет? "))
is_with_parent = True
if age >= 18 or (age >= 14 and is_with_parent):
print("Доступ разрешён")
else:
print("Доступ запрещён")Задачи для закрепления
Задача 1. Напиши условие, которое проверяет, что число x положительное и чётное.
Задача 2. Проверь, что пользователь ввёл имя «admin» ИЛИ «root».
Задача 3. Напиши условие, которое проверяет, что x не равно 0.
Задача 4. Что выведет код?
print(True and False or True)Задача 5. Проверь, что возраст больше 18 ИЛИ рост больше 180 И пол не женский.
Ответы:
Задача 1.
if x > 0 and x % 2 == 0:
print("Положительное и чётное")Задача 2.
if username == "admin" or username == "root":
print("Добро пожаловать, администратор!")Задача 3.
if x != 0:
print("x не равен 0")Задача 4.
# True and False → False
# False or True → True
print(True and False or True) # TrueЗадача 5.
if age > 18 or height > 180 and gender != "female":
print("Подходит")Нюансы и подводные камни
and и or не всегда возвращают bool
В Python and и or возвращают последний вычисленный объект, а не всегда True/False.
print(0 and 5) # 0 (0 — ложь, дальше не вычисляется)
print(5 and 0) # 0 (5 — истина, возвращается 0)
print(0 or 5) # 5 (0 — ложь, возвращается 5)
print(5 or 0) # 5 (5 — истина, дальше не вычисляется)Совет: В большинстве случаев мы используем
andиorв условияхif. Там они ведут себя как булевы.
Путаница с &, |, ~
В Python есть также битовые операторы &, |, ~, которые работают с числами побитово. Их часто путают с логическими and, or, not.
print(True & False) # False (работает, но это битовое И)
print(True and False) # False (логическое И)Совет: Для логических операций используй
and,or,not, а не&,|,~.
Неправильный порядок операторов
# Плохо (непонятно)
if age > 18 and name == "admin" or score > 90:
print("Доступ разрешён")
# Хорошо (скобки)
if (age > 18 and name == "admin") or score > 90:
print("Доступ разрешён")Частые ошибки и как их избежать
Ошибка 1: & вместо and
❌ if x > 5 & y < 10: — это битовое И!
✅ if x > 5 and y < 10:
Ошибка 2: | вместо or
❌ if x == 5 | y == 10: — это битовое ИЛИ!
✅ if x == 5 or y == 10:
Ошибка 3: not x == 5 вместо x != 5
❌ if not x == 5: — работает, но нечитаемо.
✅ if x != 5:
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| И | and |
| ИЛИ | or |
| НЕ | not |
| Приоритет | not > and > or |
| Сокращённое вычисление | Если первый операнд определяет результат, второй не вычисляется |
Заключение / Выводы
Сегодня мы узнали:
and— оба условия истинныor— хотя бы одно условие истинноnot— отрицание- Приоритет:
not>and>or - Сокращённое вычисление








