Логические операторы: and, or, not

Логические операторы: and, or, not Условия и циклы

Привет! Мы уже умеем сравнивать значения с помощью операторов сравнения. Но что, если нужно проверить несколько условий одновременно? Например: «Если пользователь взрослый И у него есть права». Или: «Если сегодня выходной ИЛИ праздник».

Для этого в Python есть логические операторы:

  • and — И (оба условия должны быть истинны)
  • or — ИЛИ (хотя бы одно условие истинно)
  • not — НЕ (отрицание)

В этой статье разберём их подробно.

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный Python
  • Понимание операторов сравнения

Совет: Логические операторы работают с логическим типом (bool), но могут применяться и к другим типам.

Основная часть

Оператор and (И)

and возвращает True, если оба условия истинны.

age = 25
has_license = True

if age >= 18 and has_license:
    print("Можно водить машину")
else:
    print("Нельзя водить машину")

Таблица истинности для and:

ABA and B
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

Совет: and часто используют для проверки нескольких условий одновременно.

Оператор or (ИЛИ)

or возвращает True, если хотя бы одно условие истинно.

is_weekend = True
is_holiday = False

if is_weekend or is_holiday:
    print("Можно отдыхать")
else:
    print("Рабочий день")

Таблица истинности для or:

ABA or B
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

Совет: or полезен, когда достаточно одного условия.

Оператор not (НЕ)

not инвертирует (переворачивает) значение: True → FalseFalse → True.

is_raining = False

if not is_raining:
    print("Можно гулять")
else:
    print("Лучше остаться дома")

Таблица истинности для not:

Anot A
TrueFalse
FalseTrue

Важно: not имеет самый высокий приоритет среди логических операторов.

Приоритет логических операторов

  1. not — выполняется первым
  2. and
  3. or — выполняется последним
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 есть также битовые операторы &|~, которые работают с числами побитово. Их часто путают с логическими andornot.

print(True & False)    # False (работает, но это битовое И)
print(True and False)  # False (логическое И)

Совет: Для логических операций используй andornot, а не &|~.

Неправильный порядок операторов

# Плохо (непонятно)
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
  • Сокращённое вычисление

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×