Условная конструкция. Оператор if

Условные конструкции позволяют программе выбирать, какой блок кода выполнять в зависимости от обстоятельств. С их помощью программа умеет ветвиться: пойти по одному пути или по другому, проверить значение и среагировать.

Что такое условная конструкция?

Условная конструкция — это инструмент, позволяющий выполнять различные блоки кода в зависимости от того, истинно ли (True) или ложно (False) определённое условие.

В Python основной условной конструкцией является оператор if. Он проверяет, истинно ли условие, и если да, выполняет соответствующий блок кода.

Основные конструкции условного оператора

Синтаксис оператора if

Базовый синтаксис условной конструкции if в Python выглядит так:

Python 3.13
# Простой пример оператора if
>>> age = 18

>>> if age >= 18:
...     print("Вы совершеннолетний.")
Вы совершеннолетний.
>>> print("Эта строка выполнится всегда, независимо от условия.")
Эта строка выполнится всегда, независимо от условия.

Обратите внимание на несколько важных деталей:

  1. После условия ставится двоеточие :
  2. Блок кода, который должен выполниться при истинном условии, обязательно имеет отступ (обычно 4 пробела или один табулятор)
  3. Как только отступ заканчивается, это означает конец блока if

Давайте изменим значение возраста и посмотрим на результат:

Python 3.13
>>> age = 16

>>> if age >= 18:
...     print("Вы совершеннолетний.")

>>> print("Эта строка выполнится всегда, независимо от условия.")
Эта строка выполнится всегда, независимо от условия.

В этом случае условие age >= 18 не истинно (ложно), поэтому блок кода внутри if не выполняется, и мы видим только вторую строку.

Использование else (иначе)

Часто нам нужно выполнить один блок кода, если условие истинно, и другой — если оно ложно. Для этого используется конструкция if-else:

Python 3.13
>>> temperature = 15

>>> if temperature > 20:
...     print("Сегодня тепло, можно идти в футболке.")
... else:
...     print("Сегодня прохладно, возьмите куртку.")
Сегодня прохладно, возьмите куртку.

Здесь если температура выше 20, выполнится первый блок. В противном случае выполняется блок после else. В нашем примере температура 15, что меньше 20, поэтому выполняется код в блоке else.

Конструкция elif (иначе если)

Что если у нас больше двух вариантов выбора? Например, мы хотим разные сообщения для разных диапазонов температур. Для этого используется конструкция elif (сокращение от «else if»):

Python 3.13
>>> temperature = 25

>>> if temperature < 0:
...     print("Очень холодно. Наденьте тёплую куртку и шапку.")
... elif temperature < 10:
...     print("Холодно. Оденьтесь теплее.")
... elif temperature < 20:
...     print("Прохладно. Лёгкая куртка не помешает.")
... elif temperature < 30:
...     print("Тепло. Футболка и шорты подойдут.")
... else:
...     print("Жарко. Возьмите с собой воду.")
Тепло. Футболка и шорты подойдут.

В этом примере Python проверяет каждое условие по порядку. Как только находится первое истинное условие, выполняется соответствующий блок кода, а все последующие условия пропускаются. Если ни одно из условий не истинно, выполняется блок else (при его наличии).

Важно: Python проверяет условия сверху вниз и останавливается, как только находит первое истинное условие. Порядок условий имеет значение.

Расширенные возможности условных конструкций

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

Условные конструкции можно вкладывать друг в друга, создавая более сложную логику:

Python 3.13
>>> age = 25
>>> has_license = True

>>> if age >= 18:
...     print("Вы совершеннолетний.")

>>>     if has_license:
...         print("Вы можете водить автомобиль.")
...     else:
...         print("Для вождения автомобиля вам необходимо получить права.")
... else:
...     print("Вы несовершеннолетний и не можете водить автомобиль.")
Вы совершеннолетний.
Вы можете водить автомобиль.

Однако не увлекайтесь вложенными условиями: код с большим количеством уровней вложенности становится трудночитаемым. Часто такую логику можно переписать с использованием логических операторов.

Логические операторы в условиях

Для создания сложных условий используются логические операторы:

  • and (логическое И): условие истинно, если истинны оба выражения
  • or (логическое ИЛИ): условие истинно, если истинно хотя бы одно выражение
  • not (логическое НЕ): инвертирует значение выражения

Перепишем наш пример с вложенным условием:

Python 3.13
>>> age = 25
>>> has_license = True

>>> if age >= 18 and has_license:
...     print("Вы совершеннолетний и можете водить автомобиль.")
... elif age >= 18 and not has_license:
...     print("Вы совершеннолетний, но для вождения автомобиля вам необходимо получить права.")
... else:
...     print("Вы несовершеннолетний и не можете водить автомобиль.")
Вы совершеннолетний и можете водить автомобиль.

Рассмотрим ещё пример с оператором or:

Python 3.13
>>> day = "суббота"

>>> if day == "суббота" or day == "воскресенье":
...     print("Выходной день, можно отдохнуть.")
... else:
...     print("Рабочий день, нужно идти на работу.")
Выходной день, можно отдохнуть.

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

Для простых условий можно использовать тернарный оператор — компактную форму записи:

Python 3.13
>>> age = 20

# Обычная запись через if-else
>>> if age >= 18:
...     status = "совершеннолетний"
... else:
...     status = "несовершеннолетний"

>>> print(f"Обычная запись: Вы {status}")
Обычная запись: Вы совершеннолетний
# Та же логика, но с использованием тернарного оператора >>> status = "совершеннолетний" if age >= 18 else "несовершеннолетний" >>> print(f"Тернарный оператор: Вы {status}")
Тернарный оператор: Вы совершеннолетний

Синтаксис тернарного оператора:

Python 3.13
значение_если_истина if условие else значение_если_ложь

Не злоупотребляйте им: сложные условия лучше записывать обычным if-else, так читаемее.

Pythonic-стиль для условий

В Python есть несколько идиоматических приёмов, которые делают условия короче и читаемее. Стоит привыкать к ним сразу.

Truthy-проверки

Новички часто пишут условия явным сравнением с True, False, 0, пустой строкой:

Python 3.13
if is_active == True:
if my_list == []:
if name == "":

Из урока про bool мы знаем, что любое значение в условии само по себе обрабатывается как True или False. Поэтому такие проверки можно упростить:

Python 3.13
if is_active:        # уже bool
if not my_list:      # пустой список falsy
if not name:         # пустая строка falsy

Это и короче, и привычнее для глаза любого Python-программиста.

Сравнение цепочкой

Когда нужно проверить, что значение попадает в диапазон, в большинстве языков пишут так:

Python 3.13
if x >= 0 and x < 100:

В Python такие сравнения можно записать одной цепочкой, как в школьной математике:

Python 3.13
if 0 <= x < 100:

Поведение то же самое, читается естественнее. Особенно удобно с elif для диапазонов:

Python 3.13
if temperature < 0:
    ...
elif 0 <= temperature < 10:
    ...
elif 10 <= temperature < 20:
    ...

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

Оператор in для проверки членства

Когда нужно проверить, что значение совпадает с одним из нескольких вариантов, можно написать через or:

Python 3.13
if day == "суббота" or day == "воскресенье":
    ...

Но Pythonic-вариант с оператором in короче и читаемее:

Python 3.13
if day in ("суббота", "воскресенье"):
    ...

Чем больше вариантов, тем заметнее выигрыш: добавить третий день — одна правка, а не ещё один or.

Практические примеры использования условий

Проверка чётности числа

Одно из частых применений условий — определение чётности числа:

Python 3.13
>>> number = 42

>>> if number % 2 == 0:
...     print(f"{number} чётное")
... else:
...     print(f"{number} нечётное")
42 чётное

Проверка пароля

Условия помогают проверять данные на соответствие правилам. Здесь .isalpha() возвращает True, если строка состоит только из букв, а .isdigit() — если только из цифр:

Python 3.13
>>> password = "password123"

>>> if len(password) < 8:
...     print("Пароль слишком короткий.")
... elif password.isalpha():
...     print("Пароль должен содержать не только буквы.")
... elif password.isdigit():
...     print("Пароль должен содержать не только цифры.")
... else:
...     print("Пароль подходит.")
Пароль подходит.

Типичные ошибки новичков

Путаница = и ==

В условии нужен == (сравнение), а не = (присваивание). Это две разные вещи:

Python 3.13
if x == 5:  # правильно: проверяем, равен ли x пяти
    ...

if x = 5:   # SyntaxError: в условии присваивать нельзя
    ...

Пропущенное двоеточие

После условия в if, elif, else обязательно ставится ::

Python 3.13
if x > 5    # SyntaxError: пропущено двоеточие
    print("больше пяти")

Сбившийся отступ

Тело условия должно иметь единообразный отступ. Менять количество пробелов внутри одного блока или смешивать табы и пробелы нельзя:

Python 3.13
if x > 5:
    print("a")
      print("b")  # IndentationError: лишний отступ

Проверка понимания

Давайте проверим, насколько хорошо вы усвоили тему условных конструкций:

Что выведет следующий код?

Python 3.13
x = 5
if x > 10:
    print("A")
elif x > 5:
    print("B")
elif x == 5:
    print("C")
else:
    print("D")