Перейти к содержимому
Теория · Условия · урок 1 из 8

if, elif и else

Чему вы научитесь

Чему вы научитесь:

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

Представьте развилку на три дороги. У развилки стоит указатель, а на его столбе висит градусник. Стрелки на указателе расположены одна над другой:

  • верхняя, if, ведёт к снежной горке: туда идут, когда холоднее нуля;
  • средняя, elif, ведёт к скамейке в парке: туда идут, когда холоднее 20 градусов;
  • нижняя, else, ведёт на пляж: туда идут во всех остальных случаях.

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

До сих пор наши программы выполняли все строки подряд. Но программе часто нужно выбирать: в мороз показать одно сообщение, а в жару другое. Указатель с градусником на Python выглядит так:

Python
temperature = 25
if temperature < 0:
    print("frost")
elif temperature < 20:
    print("cool")
else:
    print("warm")  # warm

Давайте разберём пример по строкам:

  1. temperature = 25: градусник показывает 25 градусов.
  2. if temperature < 0: проверяет верхнюю стрелку. Условие ложно, и строка под ним пропускается.
  3. elif temperature < 20: проверяет среднюю стрелку. 25 не меньше 20, поэтому пропускается и эта строка.
  4. Ни одно условие не подошло, поэтому срабатывает 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.

ВживуюКакая ветка выполнитсяшаг 1 из 11 · рамок: 1

Первый вызов: выполнение уходит в place с t = -5, а print ждёт результат.

Следите, на каких строках останавливается подсветка

При t = -5 истинны оба условия, t < 0 и t < 20. Но выполнилась только первая ветка, и функция вернула 'hill'. Этот вопрос любят задавать на собеседовании: что напечатает цепочка, в которой истинны два условия? Ответ — только первую истинную ветку.

Здесь аналогия с указателем перестаёт работать. Путник видит все стрелки сразу, и их порядок на столбе ему неважен. Для Python порядок решает всё.

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

return в ветке

В функции ветка часто заканчивается return. Он сразу завершает функцию, и следующие ветки уже не проверяются:

Python
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):

  1. Условие n >= 100 ложно, и первая ветка пропускается.
  2. Условие n >= 10 истинно, и функция возвращает "medium".
  3. До else дело не доходит: return уже завершил функцию.

Вторая ветка проверяется только при n < 100, когда первое условие уже ложно. Поэтому дописывать n < 100 and в её условие не нужно.

Пустая ветка и pass

Ветка не может быть пустой: после двоеточия интерпретатор ждёт хотя бы одну строку с отступом. Когда в ветке пока нечего делать, в неё ставят pass — инструкцию, которая ничего не делает:

Python
balance = 0
if balance > 0:
    pass
else:
    print("empty")  # empty

Без pass файл не запустится и сообщит IndentationError: expected an indented block after 'if' statement on line 2.

Частая ошибка

После условия забыли двоеточие:

Python
temperature = 25
if temperature < 20  # ✗
    print("cool")
TEXT
SyntaxError: expected ':'

Синтаксическая ошибка останавливает файл до первой строки, поэтому не выполняется даже temperature = 25. Двоеточие нужно в конце каждой строки с if, elif и else.

Главное

  • if выполняет ветку, когда условие истинно, elif проверяется, когда ложны все условия выше, а else срабатывает, когда ложны все.
  • Цепочка выполняет только первую истинную ветку, поэтому узкое условие ставят перед широким.
  • После каждого условия и после else нужно двоеточие.
  • Пустая ветка — ошибка, а pass заполняет ветку, в которой нечего делать.

Подпишись, чтобы пройти курс

Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.

Войти другим способом