if, elif и else
Чему вы научитесь:
- выбирать одну из нескольких веток с помощью
if,elifиelse; - расставлять условия цепочки в правильном порядке;
- отличать истинные значения от ложных, когда они стоят в условии;
- выбирать значение в одну строку условным выражением,
abs,minиmax.

Представьте развилку на три дороги. У развилки стоит указатель, а на его столбе висит градусник. Стрелки на указателе расположены одна над другой:
- верхняя,
if, ведёт к снежной горке: туда идут, когда холоднее нуля; - средняя,
elif, ведёт к скамейке в парке: туда идут, когда холоднее 20 градусов; - нижняя,
else, ведёт на пляж: туда идут во всех остальных случаях.
Путник смотрит на градусник и читает стрелки сверху вниз. Он сворачивает на первую подходящую дорогу, а остальные стрелки уже не читает.
До сих пор наши программы выполняли все строки подряд. Но программе часто нужно выбирать: в мороз показать одно сообщение, а в жару другое. Указатель с градусником на Python выглядит так:
temperature = 25
if temperature < 0:
print("frost")
elif temperature < 20:
print("cool")
else:
print("warm") # warmДавайте разберём пример по строкам:
temperature = 25: градусник показывает 25 градусов.if temperature < 0:проверяет верхнюю стрелку. Условие ложно, и строка под ним пропускается.elif temperature < 20:проверяет среднюю стрелку. 25 не меньше 20, поэтому пропускается и эта строка.- Ни одно условие не подошло, поэтому срабатывает
else, и программа печатаетwarm.
Инструкция if
Инструкция — команда, которая выполняет действие, а не даёт значение: присваивание x = 1, return или if. Инструкция if выполняет блок под собой, только если условие после if истинно. Условием обычно служит сравнение из прошлой темы.
Запись устроена так же, как определение функции:
- после условия и после
elseстоит двоеточие; - строки блока сдвинуты на 4 пробела;
- блок заканчивается на первой строке, которая вернулась к прежнему отступу.
Каждый такой блок называют веткой. В примере три ветки, и выполнилась ровно одна из них.
Три части цепочки
if
С if цепочка начинается. Эта часть обязательна, и в цепочке она одна. Если её условие истинно, выполняется её ветка, а всё, что ниже, пропускается.
elif
elif — сокращение от «else if», то есть «иначе, если». Веток elif может быть сколько угодно, а может не быть ни одной. Python проверяет условие elif, только когда все условия выше оказались ложными.
else
У else нет условия: эта ветка срабатывает, когда ложны все условия выше. В цепочке она одна и стоит последней. Её можно не писать, и тогда при ложных условиях не выполняется ничего.
Первая истинная ветка
Главное правило цепочки: Python проверяет условия сверху вниз и выполняет только первую ветку с истинным условием. Остальные ветки он пропускает, даже если их условия тоже истинны.
Нажмите «Следующий шаг» и следите, какие строки функция проходит при -5, а какие при 25.
1def place(t):2 if t < 0:3 where = "hill"4 elif t < 20:5 where = "bench"6 else:7 where = "beach"8 return where9 10 11print(place(-5))12print(place(25))
Первый вызов: выполнение уходит в place с t = -5, а print ждёт результат.
При t = -5 истинны оба условия, t < 0 и t < 20. Но выполнилась только первая ветка, и функция вернула 'hill'. Этот вопрос любят задавать на собеседовании: что напечатает цепочка, в которой истинны два условия? Ответ — только первую истинную ветку.
Здесь аналогия с указателем перестаёт работать. Путник видит все стрелки сразу, и их порядок на столбе ему неважен. Для Python порядок решает всё.
Если поменять местами первые две ветки, горка не выпадет никогда: любое отрицательное число раньше попадёт к скамейке. Поэтому узкое условие ставят перед широким.
return в ветке
В функции ветка часто заканчивается return. Он сразу завершает функцию, и следующие ветки уже не проверяются:
def size(n):
if n >= 100:
return "large"
elif n >= 10:
return "medium"
else:
return "small"
print(size(250)) # large
print(size(50)) # medium
print(size(5)) # smallРазберём вызов size(50):
- Условие
n >= 100ложно, и первая ветка пропускается. - Условие
n >= 10истинно, и функция возвращает"medium". - До
elseдело не доходит:returnуже завершил функцию.
Вторая ветка проверяется только при n < 100, когда первое условие уже ложно. Поэтому дописывать n < 100 and в её условие не нужно.
Пустая ветка и pass
Ветка не может быть пустой: после двоеточия интерпретатор ждёт хотя бы одну строку с отступом. Когда в ветке пока нечего делать, в неё ставят pass — инструкцию, которая ничего не делает:
balance = 0
if balance > 0:
pass
else:
print("empty") # emptyБез pass файл не запустится и сообщит IndentationError: expected an indented block after 'if' statement on line 2.
Частая ошибка
После условия забыли двоеточие:
temperature = 25
if temperature < 20 # ✗
print("cool")SyntaxError: expected ':'Синтаксическая ошибка останавливает файл до первой строки, поэтому не выполняется даже temperature = 25. Двоеточие нужно в конце каждой строки с if, elif и else.
Главное
ifвыполняет ветку, когда условие истинно,elifпроверяется, когда ложны все условия выше, аelseсрабатывает, когда ложны все.- Цепочка выполняет только первую истинную ветку, поэтому узкое условие ставят перед широким.
- После каждого условия и после
elseнужно двоеточие. - Пустая ветка — ошибка, а
passзаполняет ветку, в которой нечего делать.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.