Условная конструкция. Оператор if
Условные конструкции позволяют программе выбирать, какой блок кода выполнять в зависимости от обстоятельств. С их помощью программа умеет ветвиться: пойти по одному пути или по другому, проверить значение и среагировать.
Что такое условная конструкция?
Условная конструкция — это инструмент, позволяющий выполнять различные блоки кода в зависимости от того, истинно ли (True) или ложно (False) определённое условие.
В Python основной условной конструкцией является оператор if. Он проверяет, истинно ли условие, и если да, выполняет соответствующий блок кода.
Основные конструкции условного оператора
Синтаксис оператора if
Базовый синтаксис условной конструкции if в Python выглядит так:
Python 3.13# Простой пример оператора if >>> age = 18 >>> if age >= 18: ... print("Вы совершеннолетний.")Вы совершеннолетний.>>> print("Эта строка выполнится всегда, независимо от условия.")Эта строка выполнится всегда, независимо от условия.
Обратите внимание на несколько важных деталей:
- После условия ставится двоеточие :
- Блок кода, который должен выполниться при истинном условии, обязательно имеет отступ (обычно 4 пробела или один табулятор)
- Как только отступ заканчивается, это означает конец блока 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.13if is_active == True: if my_list == []: if name == "":
Из урока про bool мы знаем, что любое значение в условии само по себе обрабатывается как True или False. Поэтому такие проверки можно упростить:
Python 3.13if is_active: # уже bool if not my_list: # пустой список falsy if not name: # пустая строка falsy
Это и короче, и привычнее для глаза любого Python-программиста.
Сравнение цепочкой
Когда нужно проверить, что значение попадает в диапазон, в большинстве языков пишут так:
Python 3.13if x >= 0 and x < 100:
В Python такие сравнения можно записать одной цепочкой, как в школьной математике:
Python 3.13if 0 <= x < 100:
Поведение то же самое, читается естественнее. Особенно удобно с elif для диапазонов:
Python 3.13if temperature < 0: ... elif 0 <= temperature < 10: ... elif 10 <= temperature < 20: ...
Теперь каждая ветка самодокументирующаяся: видно, какой диапазон она ловит, не приходится держать в голове, что предыдущая ветка отсекла.
Оператор in для проверки членства
Когда нужно проверить, что значение совпадает с одним из нескольких вариантов, можно написать через or:
Python 3.13if day == "суббота" or day == "воскресенье": ...
Но Pythonic-вариант с оператором in короче и читаемее:
Python 3.13if 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.13if x == 5: # правильно: проверяем, равен ли x пяти ... if x = 5: # SyntaxError: в условии присваивать нельзя ...
Пропущенное двоеточие
После условия в if, elif, else обязательно ставится ::
Python 3.13if x > 5 # SyntaxError: пропущено двоеточие print("больше пяти")
Сбившийся отступ
Тело условия должно иметь единообразный отступ. Менять количество пробелов внутри одного блока или смешивать табы и пробелы нельзя:
Python 3.13if x > 5: print("a") print("b") # IndentationError: лишний отступ
Проверка понимания
Давайте проверим, насколько хорошо вы усвоили тему условных конструкций:
Что выведет следующий код?
Python 3.13x = 5 if x > 10: print("A") elif x > 5: print("B") elif x == 5: print("C") else: print("D")
