Вложенные и каскадные условия

20.01.2022 0 Автор : Дмитрий Николаевич
Вложенные и каскадные условия

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

Вложенные и каскадные условия.

Внутри условного оператора можно использовать любые инструкции Python, в том числе и условный оператор. Получаем вложенное ветвление: после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют больший размер отступа (+4 пробела для каждого уровня).

if условие1:
    блок кода
else:
    if условие 2:
        блок кода
    else:
        if условие3:
            блок кода
        ...
В предыдущей теме было дано задание по определению координатной четверти точки. Программу можно переписать с использованием вложенного оператора:
x = int(input())
y = int(input())
if x > 0:
    if y > 0:
        print('Первая четверть')
    else:
        print('Четвертая четверть')
else:
    if y > 0:
        print('Вторая четверть')
    else:
        print('Третья четверть')

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

Давайте рассмотрим программу, которая переводит сто балльную оценку в пятибалльную. Для ее реализации нужно воспользоваться вложенным условным оператором:

grade = int(input('Введите вашу отметку по 100-балльной системе: '))

if grade >= 90:
    print(5)
else:
    if grade >= 80:
        print(4)
    else:
        if grade >= 70: 
            print(3)
        else:
            if grade >= 60:
                print(2)
            else:
                print(1)

В этом примере уровень вложенности настолько глубок, что код становится трудно понять.

Выбор из нескольких альтернатив – это обычное дело, здесь имеет смысл избегать глубокого вложения. Для этого в Python есть каскадный условный оператор.

Каскадный условный оператор

Если требуется проверить несколько условий, в Python используется каскадный условный оператор.

Синтаксис каскадного условного оператора имеет следующий вид:

if условие1:
    блок кода
elif условие2:
    блок кода
...
else:
    блок кода

При исполнении такого условного оператора сначала проверяется условие 1. Если оно является истинным, то исполняется блок кода, который следует сразу после него, вплоть до выражения elif. Остальная часть конструкции игнорируется. Однако если условие 1 является ложным, то программа перескакивает непосредственно к следующему выражению elif и проверяет условие 2. Если оно истинное, то исполняется блок кода, который следует сразу после него, вплоть до следующего выражения elif. И остальная часть условного оператора тогда игнорируется. Этот процесс продолжается до тех пор, пока не будет найдено условие, которое является истинным, либо пока больше не останется выражений elif. Если ни одно условие не является истинным, то исполняется блок кода после выражения else.

Приведенный ниже фрагмент кода является примером каскадного условного оператора if-elif-else. Этот фрагмент кода работает так же, как предыдущий код, использующий вложенный условный оператор. 

grade = int(input('Введите вашу отметку: '))

if grade >= 90:
    print(5)
elif grade >= 80:
    print(4)
elif grade >= 70:
    print(3)
elif grade >= 60:
    print(2)
else:
    print(1)

Обратите внимание на выравнивание и выделение отступом, которые применены в инструкции if-elif-else: выражения if, elif и else выравнены и исполняемые по условию блоки выделены отступом.

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

  • программный код может стать сложным и трудным для восприятия; 
  • из-за необходимого выделения отступом продолжительная серия вложенных инструкций if-else может стать слишком длинной, чтобы целиком уместиться на экране монитора без горизонтальной прокрутки.

Логика инструкции if-elif-else обычно прослеживается легче, чем длинная серия вложенных инструкций if-else. И поскольку в инструкции if-elif-else все выражения выровнены, длина строк в данной инструкции, как правило, короче. 

На этом у меня все. Задавайте свои вопросы в комментариях или в форму обратной связи.