Оператор if
Простейшее ветвление. После ключевого слова if идёт условие, двоеточие и отступной блок кода. Если условие истинно, блок выполняется; если ложно — пропускается.
x = 10
if x > 5:
print("x больше 5") # выполнится
y = 1
if y == 0:
print("y равен 0") # не выполнится
Неявное преобразование в bool
Когда в условии оказывается не булево значение, Python автоматически превращает его в True или False. Значения, которые становятся True, называют истинными (truthy), а становящиеся False — ложными (falsy).
a = 5
if a:
print("Число 5 — True") # выполнится
s = ""
if s:
print("Пустая строка — True") # не выполнится: пустая строка — False
К ложным значениям относятся: None, числовой ноль (0, 0.0), пустые коллекции ("", [], {}, (), set()), а также сам False. Всё остальное считается истинным.
Операторы elif и else
elif (сокращение от else if) проверяет дополнительное условие, только если предыдущие if/elif оказались ложными. else срабатывает, когда все предыдущие условия ложны. Важно: elif не может стоять без предшествующего if.
age = 25
if age < 18:
print("Несовершеннолетний")
elif age < 30:
print("Молодой взрослый") # выполнится
elif age < 50:
print("Взрослый")
else:
print("Пожилой")
if-elif-else выполняется не более одного блока. Как только Python находит истинное условие, остальные проверки пропускаются.
Несколько независимых операторов if
Если условия не связаны между собой и могут быть истинными одновременно, используют несколько самостоятельных if. Каждый проверяется независимо.
x = 7
if x > 5:
print("x больше 5") # выполнится
if x < 10:
print("x меньше 10") # выполнится
if x == 7:
print("x равно 7") # выполнится
Вложенные условия
Когда решение зависит от нескольких уровней проверок, один if помещают внутрь другого. Каждый новый уровень требует дополнительного отступа. Вложенность полезна, но чрезмерная глубина ухудшает читаемость.
role = "admin"
section_access = True
if role == "admin":
print("Вы администратор.")
if section_access:
print("У вас есть доступ к разделу.")
else:
print("У вас нет доступа к разделу.")
else:
print("Вы не администратор.")
Этот же сценарий можно записать без вложенности, объединив условия оператором and. Так код становится плоским и проще для восприятия:
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 можно записать в одну строку:
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.
number = 7
match number:
case 1:
print("Это один.")
case 2 | 3:
print("Это два или три.")
case _ if number > 5:
print("Число больше 5.")
case _:
print("Это число меньше или равно 5.")
Символ | в блоке case работает как «или», а _ — заглушка для всех остальных случаев (аналог else). match-case умеет проверять не только значения, но и типы данных, структуры списков, словари и объекты.