Условие Python направляет данные по одной из понятных ветвей решения
Программирование

Условия if, elif и else в Python

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

Содержание

Условие позволяет программе выбрать действие на основании данных. Интернет-магазин применяет скидку только при достаточной сумме, проверка сайта сообщает о сбое только при неуспешном ответе, а файловый инструмент пропускает каталог, если он пуст. Здесь используются переменные и типы данных из предыдущего урока.

В Python выбор записывается конструкцией if. Слово переводится как «если»: выполнить вложенный блок, когда выражение истинно. elif добавляет следующую проверку, а else задаёт действие для всех оставшихся случаев.

Начните с одного проверяемого правила

Создайте файл delivery.py. В первом варианте стоимость доставки обнуляется, если сумма заказа достигла порога. Код работает только с числами в памяти.

order_total = 3200
free_delivery_from = 3000

if order_total >= free_delivery_from:
    delivery_price = 0

print(delivery_price)

При этих данных программа выведет 0. Сравнение >= возвращает True, поэтому вложенная строка выполняется. Двоеточие открывает блок, а четыре пробела показывают, какая инструкция относится к if.

Если изменить сумму на 2500, программа завершится NameError: ветвь не выполнилась, и имя delivery_price не было создано. Ошибка показывает, что правило описано не полностью — нужен результат и для ложного случая.

else закрывает оставшийся случай

Добавьте ветвь else, которая задаёт обычную стоимость. Теперь переменная получает значение при любом результате сравнения.

order_total = 2500
free_delivery_from = 3000

if order_total >= free_delivery_from:
    delivery_price = 0
else:
    delivery_price = 350

print(f"Доставка: {delivery_price} руб.")

Программа выведет Доставка: 350 руб.. В одной конструкции выполняется ровно одна из этих ветвей. После неё отступ возвращается к началу строки, поэтому print запускается независимо от выбора.

Не используйте табуляцию вперемешку с пробелами. Редактор кода умеет показывать невидимые символы и преобразовывать Tab в четыре пробела. IndentationError означает, что структура отступов нарушена, а не что сравнение ложно.

elif описывает несколько взаимоисключающих вариантов

Предположим, у доставки три тарифа: бесплатно от 3000, 200 рублей от 1500 и 350 рублей для меньшей суммы. Проверки располагаются от более строгой к более общей.

order_total = 2200

if order_total >= 3000:
    delivery_price = 0
elif order_total >= 1500:
    delivery_price = 200
else:
    delivery_price = 350

print(f"Доставка: {delivery_price} руб.")

Результат — Доставка: 200 руб.. Первая проверка ложна, вторая истинна, после чего Python пропускает оставшуюся ветвь else. Если сначала поставить условие >= 1500, заказ на 3200 попадёт в него и до бесплатной доставки программа уже не дойдёт.

Именно поэтому порядок — часть бизнес-правила. Выпишите интервалы на бумаге и убедитесь, что они не оставляют дыр и непреднамеренных пересечений.

Границы требуют отдельных примеров

Для порога 3000 проверьте как минимум 2999, 3000 и 3001. Первый должен выбрать платную доставку, два остальных — бесплатную. Такая тройка обнаруживает ошибку между > и >=.

Нулевые и отрицательные суммы нельзя молча отправлять в обычный тариф. Сначала проверьте допустимость данных, затем тариф:

order_total = -100

if order_total < 0:
    message = "Сумма заказа не может быть отрицательной"
elif order_total >= 3000:
    message = "Доставка бесплатная"
else:
    message = "Доставка платная"

print(message)

Программа выведет сообщение об ошибочном значении. Пока это только понятный ответ; позже обработка ввода сможет остановить расчёт с кодом ошибки или попросить повторить значение.

Составные условия объединяют проверки

Операторы and, or и not работают с логическими значениями. and требует истинности обеих частей, or — хотя бы одной, а not меняет истину на ложь и наоборот.

Пусть бесплатная доставка действует от 3000 рублей, но только внутри обслуживаемого города. Следующий пример явно проверяет оба требования:

order_total = 3400
city_supported = True

if order_total >= 3000 and city_supported:
    delivery_price = 0
else:
    delivery_price = 350

print(delivery_price)

При заданных значениях вывод равен 0. Если city_supported заменить на False, сработает обычный тариф. Переменная с логическим смыслом читается прямо: «сумма достигла порога и город обслуживается».

В длинном выражении используйте скобки, даже когда помните приоритет операторов. Они показывают намерение следующему читателю. Если условие трудно произнести одной фразой, присвойте частям говорящие имена или вынесите правило в функцию.

Истинность значения не всегда равна явному сравнению

Пустая строка, число 0, пустая коллекция и None считаются ложными в логическом контексте. Непустая строка и большинство других объектов — истинными. Поэтому if name: часто означает «если строка имени не пустая».

Но не смешивайте разные смыслы. Проверка if count: не отличает допустимый ноль от отсутствия значения, если последнее представлено None. В таком случае пишите if count is None: или явное сравнение с нулём.

Не сравнивайте логическую переменную с True без необходимости: if city_supported: короче и яснее, чем if city_supported == True:. Исключение — ситуация, где данные могут иметь несколько типов и это различие осознанно проверяется.

Вложенные условия полезны только при разных этапах решения

if можно разместить внутри другой ветви, но несколько уровней быстро затрудняют чтение. Сначала проверяйте ошибочные или исключительные случаи, затем основной сценарий. Позже функции позволят завершать обработку ранним return и не сдвигать весь код вправо.

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

Следующий урок — структуры данных, где один объект сможет хранить несколько товаров. До него полезно повторить переменные и типы и сверить синтаксис с разделом if statements официального учебника.

Рекламное местоВаша компания здесьРазместить рекламу

Самопроверка

Проверьте, что материал усвоен

Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.

01Какая ветвь выполняется в одной цепочке if/elif/else?
02Что обозначает двоеточие после условия?
03Как проверить диапазон от 1 до 10 включительно?

Разбираем коротко

Частые вопросы

Обязателен ли блок else?

Нет. Если при ложном условии ничего делать не нужно, ветвь else можно не писать. В цепочке также может быть несколько elif или ни одного.

Почему код после if не выполняется?

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

Чем and отличается от or?

and требует истинности обоих условий, а or — хотя бы одного. Скобки помогают явно показать порядок в составном выражении.