ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

elif в Python: несколько условий без путаницы

Автор: · Обновлено

Цепочка if–elif–else выбирает первый подходящий вариант. Условия проверяются сверху вниз; после истинного условия его блок выполняется, а остальные ветки пропускаются. Поэтому порядок проверок является частью алгоритма, а не вопросом оформления.

Диапазоны без пересечения

score = 76

if score >= 85:
    grade = 'отлично'
elif score >= 60:
    grade = 'хорошо'
elif score >= 40:
    grade = 'нужно повторить'
else:
    grade = 'тема не освоена'

print(grade)

Для 76 вывод будет:

хорошо

Вторая ветка не обязана писать верхнюю границу 84: до неё программа дошла только после ложного score >= 85. Условия образуют последовательное сито.

Почему широкая проверка должна быть ниже

Если первой поставить score >= 40, то значения 60 и 90 сразу попадут в эту ветку, а более точные варианты станут недостижимыми. Для возраста и размеров часто удобно идти от большего порога к меньшему. Для отдельных строковых команд порядок может быть произвольным, если варианты не пересекаются.

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

Таблица перед кодом

Напишите классификатор температуры: ниже 0 — «мороз», от 0 до 14 — «холодно», от 15 до 24 — «тепло», от 25 — «жарко». До написания составьте тесты -1, 0, 14, 15, 24 и 25. После запуска отметьте, какая ветка обрабатывает каждую границу. Дополнительно уберите else и посмотрите, что произойдёт с переменной результата для непокрытого случая: это покажет пользу полного набора веток.

Покрытие диапазона

Для классификации возраста нарисуйте интервалы на числовой прямой и только потом расположите elif. Выберите категории до 6, от 7 до 11, от 12 до 17 и от 18 лет. Проверьте значения по обе стороны каждой границы. Добавьте счётчик срабатываний веток в тестовом цикле и убедитесь, что каждое значение получает ровно одну категорию. Затем поменяйте местами две проверки и найдите недостижимую ветку. В итоговом коде удалите диагностику, но сохраните таблицу тестов: она документирует порядок условий лучше, чем длинный комментарий.

Практикум: оценка по непересекающимся диапазонам

Переведите балл от 0 до 100 в категории A, B, C, D и F. Запишите диапазоны так, чтобы они покрывали все допустимые значения без пересечений. Проверьте 0, 59, 60, 69, 70, 79, 80, 89, 90 и 100. Сначала отклоните число вне диапазона, затем применяйте цепочку elif от верхней границы вниз или от нижней вверх. Поменяйте порядок двух веток и найдите тест, где более широкое условие преждевременно перехватывает значение.

Контрольная точка

Почему после истинной ветки остальные elif не проверяются? Используйте это свойство, чтобы объяснить порядок диапазонов и невозможность вывести две оценки одному баллу.

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

Можно ли заменить elif несколькими if?

Можно, если условия действительно независимы и допускают несколько действий. Для одной категории из взаимоисключающих диапазонов цепочка if/elif/else яснее и гарантирует выбор только первой подходящей ветки.

Источники