📖 Теория: Операторы ветвления

⚡ Кратко

Условные операторы if, elif, else выполняют блок кода только при истинном условии. Python превращает любое значение в bool внутри условия: пустые строки, ноль и None — ложь, остальное — правда. Цепочка if-elif-else выбирает один вариант; несколько самостоятельных if могут сработать все. Вложенные условия удобно заменять логическими операторами. Тернарный оператор сокращает простое присваивание по условию. match-case — современная замена длинным цепочкам elif для проверки одного значения.

  • if условие: — базовая проверка.
  • if ... elif ... else — взаимоисключающие варианты.
  • Truthy/falsy — неявное преобразование в bool.
  • Тернарный оператор: значение if условие else другое_значение.
  • match-case — сопоставление с шаблонами (Python 3.10+).

Оператор if

Простейшее ветвление. После ключевого слова if идёт условие, двоеточие и отступной блок кода. Если условие истинно, блок выполняется; если ложно — пропускается.

📄 examples/if_basics.py
x = 10

if x > 5:
    print("x больше 5")  # выполнится

y = 1
if y == 0:
    print("y равен 0")  # не выполнится
💡 На заметку: В Python нет фигурных скобок для блоков. Роль разделителя выполняет отступ. В исходном материале упоминаются 4 пробела или один таб; современный стиль (PEP 8) рекомендует именно 4 пробела.

Неявное преобразование в bool

Когда в условии оказывается не булево значение, Python автоматически превращает его в True или False. Значения, которые становятся True, называют истинными (truthy), а становящиеся Falseложными (falsy).

📄 examples/truthy_falsy.py
a = 5
if a:
    print("Число 5 — True")  # выполнится

s = ""
if s:
    print("Пустая строка — True")  # не выполнится: пустая строка — False

К ложным значениям относятся: None, числовой ноль (0, 0.0), пустые коллекции ("", [], {}, (), set()), а также сам False. Всё остальное считается истинным.

Проверить по документации: полный список ложных значений описан в разделе Truth Value Testing официальной документации Python.

Операторы elif и else

elif (сокращение от else if) проверяет дополнительное условие, только если предыдущие if/elif оказались ложными. else срабатывает, когда все предыдущие условия ложны. Важно: elif не может стоять без предшествующего if.

📄 examples/age_categories.py
age = 25

if age < 18:
    print("Несовершеннолетний")
elif age < 30:
    print("Молодой взрослый")  # выполнится
elif age < 50:
    print("Взрослый")
else:
    print("Пожилой")
⚠️ Важно: В цепочке if-elif-else выполняется не более одного блока. Как только Python находит истинное условие, остальные проверки пропускаются.

Несколько независимых операторов if

Если условия не связаны между собой и могут быть истинными одновременно, используют несколько самостоятельных if. Каждый проверяется независимо.

📄 examples/multiple_if.py
x = 7

if x > 5:
    print("x больше 5")      # выполнится
if x < 10:
    print("x меньше 10")     # выполнится
if x == 7:
    print("x равно 7")       # выполнится

Вложенные условия

Когда решение зависит от нескольких уровней проверок, один if помещают внутрь другого. Каждый новый уровень требует дополнительного отступа. Вложенность полезна, но чрезмерная глубина ухудшает читаемость.

📄 examples/nested_conditions.py
role = "admin"
section_access = True

if role == "admin":
    print("Вы администратор.")
    if section_access:
        print("У вас есть доступ к разделу.")
    else:
        print("У вас нет доступа к разделу.")
else:
    print("Вы не администратор.")

Этот же сценарий можно записать без вложенности, объединив условия оператором and. Так код становится плоским и проще для восприятия:

📄 examples/flat_conditions.py
role = "admin"
section_access = True

if role == "admin" and section_access:
    print("Вы администратор.")
    print("У вас есть доступ к разделу.")
elif role == "admin" and not section_access:
    print("Вы администратор.")
    print("У вас нет доступа к разделу.")
else:
    print("Вы не администратор.")

Тернарный оператор

Если нужно вернуть одно из двух значений в зависимости от условия, if-else можно записать в одну строку:

📄 examples/ternary.py
age = 18
status = "Взрослый" if age >= 18 else "Несовершеннолетний"
print(status)

x = 10
print("Чётное" if x % 2 == 0 else "Нечётное")

Тернарный оператор хорош для простых выборов значений. Если условие или действия становятся сложными, лучше вернуться к обычному if-else — это сохранит читаемость.

match-case

Конструкция match-case появилась в Python 3.10 и предназначена для проверки одного значения на соответствие нескольким шаблонам. Она делает код короче и нагляднее, чем длинная цепочка elif.

📄 examples/match_case.py
number = 7

match number:
    case 1:
        print("Это один.")
    case 2 | 3:
        print("Это два или три.")
    case _ if number > 5:
        print("Число больше 5.")
    case _:
        print("Это число меньше или равно 5.")

Символ | в блоке case работает как «или», а _ — заглушка для всех остальных случаев (аналог else). match-case умеет проверять не только значения, но и типы данных, структуры списков, словари и объекты.

Проверить по документации: подробные возможности структурного сопоставления с шаблонами (structural pattern matching) описаны в PEP 634 и разделе Compound statements → The match statement документации Python 3.10+.