Каскадные и вложенные операторы
Вложенный оператор
В предыдущих уроках мы говорили, что при истинности выражения, записанного в условном операторе if
, программа выполняет блок кода, отделённый отступом. На самом деле внутри этого блока кода можно писать любые инструкции Python. В том числе ещё одно условие if
. Такое условие будет называться вложенным.
Рассмотрим следующую программу:
height = int(input('Введите ваш рост'))
if height > 160:
if height > 180:
print('Вы высокий')
else:
print('Вы среднего роста')
else:
print('Вы невысокий, но очень милый')
В данной программе сначала сравнивается рост со , и если условие не выполняется, то срабатывает блок с else
, который печатает на экран «Вы невысокий, но очень милый». Если же условие выполняется, то рост теперь сравнивается со . И в зависимости от истинности этого условия выводится соответствующий текст на экран.
Обратите внимание на то, что каждый вложенный блок команд имеет отступ больший, чем предыдущий.
Также стоит отметить особенность работы else
: этот оператор относится к ближайшему if
, написанному на таком же уровне, что и сам else
.
Рассмотрим программу, показывающую к какой возрастной категории взрослого населения относится проходящий данный курс пользователь:
age = int(input('Укажите свой возраст'))
if age >= 90:
print('Поздняя старость')
else:
if age >= 75:
print('Старость')
else:
if age >= 60:
print('Пожилой возраст')
else:
if age >= 45:
print('Зрелость')
else:
print('Молодость')
В данной задаче мы используем именно вложенный оператор, а не последовательные if
, идущие друг за другом. Связано это с тем, что при последовательном написании возраст, например, года прошёл бы сразу по трём условиям (age >= 75
; age >= 60
; age >= 45
) и вывелось бы три строчки с текстом, что является идейно неверным в данной задаче.
Можно заметить основной минус в таком подходе написания условий: если вложенность будет ещё больше, то код будет уходить всё правее и правее, что в конечном итоге уменьшит его читабельность.
Для избегания высокой вложенности существует каскадный оператор.
Каскадный оператор
Перепишем предыдущую задачу с использованием каскадного оператора:
age = int(input('Укажите свой возраст'))
if age >= 90:
print('Поздняя старость')
elif age >= 75:
print('Старость')
elif age >= 60:
print('Пожилой возраст')
elif age >= 45:
print('Зрелость')
else:
print('Молодость')
По этой программе можно заметить, что оператор elif
задаёт такую же логику работы, как и else if
в примере выше.
Общий принцип работы каскадного оператора if-elif-else
таков:
- сначала проверяется условие из инструкции с оператором
if
- если условие оказалось ложным, то переходим к условию, написанному в первом
elif
- если и это условие оказалось ложным, то переходим к следующему
elif
и т.д.
- если условие в последнем
elif
оказалось ложным, то выполняется код из блока else
— Количество инструкций elif
не ограничено. Последний оператор else
, как и в конструкции if-else
, является необязательным.
— Использование каскадного оператора необязательно, но рекомендуется при большой вложенности условий.