Статья Автор: Александр Ф. Алейников

4.3.1 Каскадные и вложенные операторы

Каскадные и вложенные операторы

Вложенный оператор

В предыдущих уроках мы говорили, что при истинности выражения, записанного в условном операторе if, программа выполняет блок кода, отделённый отступом. На самом деле внутри этого блока кода можно писать любые инструкции Python. В том числе ещё одно условие if. Такое условие будет называться вложенным.

Рассмотрим следующую программу:

height = int(input('Введите ваш рост'))
if height > 160:
    if height > 180:
        print('Вы высокий')
    else:
        print('Вы среднего роста')
else:
    print('Вы невысокий, но очень милый')

В данной программе сначала сравнивается рост со 160, и если условие не выполняется, то срабатывает блок с else, который печатает на экран «Вы невысокий, но очень милый». Если же условие выполняется, то рост теперь сравнивается со 180. И в зависимости от истинности этого условия выводится соответствующий текст на экран.

Обратите внимание на то, что каждый вложенный блок команд имеет отступ больший, чем предыдущий.
Также стоит отметить особенность работы 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, идущие друг за другом. Связано это с тем, что при последовательном написании возраст, например, 83 года прошёл бы сразу по трём условиям (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, является необязательным.

— Использование каскадного оператора необязательно, но рекомендуется при большой вложенности условий.

Печать