Перейти к содержимому

Как расшифровывается ключевое слово elif

  • автор:

if elif else

Обязательная часть инструкции, должна предшествовать другим частям.
Эта часть проверяет выражение справа от себя на истинность.

 if a: 
print('a - истина')

Обратите внимание, что в Питоне принято использовать укороченную форму проверки ( if a: ), вместо часто избыточной полной ( if a == True: ).

elif

Необязательная часть инструкции. Должна следовать за if , либо другой elif .
Позволяет указать альтернативное условие, которое требуется проверить.
Данное ключевое слово в других языках используется в избыточно длинной форме else if .

else

Необязательная заключительная часть инструкции. Должна следовать за if , либо elif .
Позволяет указать ветвь исполнения, которая должна быть активирована, если не подошли условия, указанные в предшествующих if и elif .

 if x < 0:
print('Отрицательное число')
elif x == 0:
print('Нуль')
elif x == 1:
print('Единица')
else:
print('Другое положительное число')
Однострочная форма

Для простых случаев может быть полезна однострочная форма инструкции:

 my_var = 'one' if x == 1 else 'other' 
# my_var укажет на `one` если x равно 1, иначе на `other`

Реклама

Скриптовый язык программирования Gentee — Бесплатный, кроссплатформенный язык программирования для автоматизации.

Gentee нужна ваша помощь!
Как разместить рекламу

Конструкция условия if-elif-else

Условная конструкция состоит из следующих частей:

if

if часть содержит ключевое слово if, выражение-условие и блок выражений, который будет выполняться в случае истинности условия. Если условие не выполняется, то управление передаётся следующей части elif.

elif

elif часть содержит ключевое слово elif, выражение-условие и блок выражений, который будет выполняться в случае истинности условия. Конструкция может содержать несколько elif частей следующих друг за другом.

else

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

elif и else операторы являются необязательными.

Выражение-условие должно возвращать числовое значение. ИСТИНОЙ считается число отличное от 0.

//if if a == 1 < b = 10 > //if and else if a == 10 && b > 20 : b = 10 else < b = 0 > //if elif else if a == b+10 < . b = 10 > elif a > 2 < b = 100 > elif a != 1 || b == 32 : b=1000 else : b = 0

Как расшифровывается ключевое слово elif

Условные конструкции используют условные выражения и в зависимости от их значения направляют выполнение программы по одному из путей. Одна из таких конструкций — это конструкция if . Она имеет следующее формальное определение:

if логическое_выражение: инструкции [elif логическое выражение: инструкции] [else: инструкции]

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

language = "english" if language == "english": print("Hello") print("End")

Поскольку в данном случае значение переменной language равно «english», то будет выполняться блок if, который содержит только одну инструкцию — print(«Hello») . В итоге консоль выведет следующие строки:

Hello End

Обратите внимание в коде на последнюю строку, которая выводит сообщение «End». Она не имеет отступов от начала строки, поэтому она не принадлежит к блоку if и будет выполняться в любом случае, даже если выражение в конструкции if возвратит False.

Но если бы мы поставили бы отступы, то она также принадлежала бы к конструкции if:

language = "english" if language == "english": print("Hello") print("End")

Блок else

Если вдруг нам надо определить альтернативное решение на тот случай, если выражение в if возвратит False, то мы можем использовать блок else :

language = "russian" if language == "english": print("Hello") else: print("Привет") print("End")

Если выражение language == «english» возвращает True, то выполняется блок if, иначе выполняется блок else. И поскольку в данном случае условие language == «english» возвращает False, то будут выполняться инструкция из блока else .

Причем инструкции блока else также должны имет отступы от начала строки. Например, в примере выше print(«End») не имеет отступа, поэтому она не входит в блок else и будет выполнятьься вне зависимости, чему равно условие language == «english» . То есть консоль нам выведет следующие строки:

Привет End

Блок else также может иметь несколько инструкций, которые должны иметь отступ от начала строки:

language = "russian" if language == "english": print("Hello") print("World") else: print("Привет") print("мир")

elif

Если необходимо ввести несколько альтернативных условий, то можно использовать дополнительные блоки elif , после которого идет блок инструкций.

language = "german" if language == "english": print("Hello") print("World") elif language == "german": print("Hallo") print("Welt") else: print("Привет") print("мир")

Сначала Python проверяет выражение if . Если оно равно True, то выполняются инструкции из блока if. Если это условие возвращает False, то Python проверяет выражение из elif .

Если выражение после elif равно True , то выполняются инструкции из блока elif . Но если оно равно False то выполняются инструкции из блока else

При необходимости можно определить несколько блоков elif для разных условий. Например:

language = "german" if language == "english": print("Hello") elif language == "german": print("Hallo") elif language == "french": print("Salut") else: print("Привет")

Вложенные конструкции if

Конструкция if в свою очередь сама может иметь вложенные конструкции if:

language = "english" daytime = "morning" if language == "english": print("English") if daytime == "morning": print("Good morning") else: print("Good evening")

Здесь конструкция if содержит вложенную конструкцию if/else. То есть если переменная language равна «english», тогда вложенная конструкция if/else дополнительно проверяет значение переменной daytime — равна ли она строке «morning» ли нет. И в данном случае мы получим следующий консольный вывод:

English Good morning

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

language = "english" daytime = "morning" if language == "english": print("English") if daytime == "morning": print("Good morning") else: print("Good evening")

Подобным образом можно размещать вложенные конструкции if/elif/else в блоках elif и else:

language = "russian" daytime = "morning" if language == "english": if daytime == "morning": print("Good morning") else: print("Good evening") else: if daytime == "morning": print("Доброе утро") else: print("Добрый вечер")

Множественное ветвление: if-elif-else. Оператор match в Python

Ранее мы рассмотрели работу условного оператора if . С помощью его расширенной версии if-else можно реализовать две отдельные ветви выполнения. Однако алгоритм программы может предполагать выбор больше, чем из двух путей, например, из трех, четырех или даже пяти. В данном случае следует говорить о необходимости множественного ветвления.

Рассмотрим конкретный пример. Допустим, в зависимости от возраста пользователя, ему рекомендуется определенный видеоконтент. При этом выделяют группы от 3 до 6 лет, от 6 до 12, от 12 до 16, 16+. Итого 4 диапазона. Как бы мы стали реализовывать задачу, имея в наборе инструментов только конструкцию if-else?

Самый простой ответ – последовательно проверять вхождение введенного числа-возраста в определенный диапазон с помощью следующих друг за другом условных операторов:

old = int(input('Ваш возраст: ')) print('Рекомендовано:', end=' ') if 3  old  6: print('"Заяц в лабиринте"') if 6  old  12: print('"Марсианин"') if 12  old  16: print('"Загадочный остров"') if 16  old: print('"Поток сознания"')

Примечание. Названия фильмов выводятся на экран в двойных кавычках. Поэтому в программе для определения строк используются одинарные.

Предложенный код прекрасно работает, но есть одно существенное «но». Он не эффективен, так как каждый if в нем – это отдельно взятый оператор, никак не связанный с другими if . Процессор тратит время и «нервы» на обработку каждого из них, даже если в этом уже нет необходимости. Например, введено число 10. В первом if логическое выражение возвращает ложь, и поток выполнения переходит ко второму if . Логическое выражение в его заголовке возвращает истину, и его тело выполняется. Всё, на этом программа должна была остановиться.

Однако следующий if никак не связан с предыдущим, поэтому далее будет проверяться вхождение значения переменной old в диапазон от 12 до 16, в чем необходимости нет. И далее будет обрабатываться логическое выражение в последнем if , хотя уже понятно, что и там будет False .

Решить проблему избыточности проверок можно, вкладывая условные операторы друг в друга:

old = int(input('Ваш возраст: ')) print('Рекомендовано:', end=' ') if 3  old  6: print('"Заяц в лабиринте"') else: if 6  old  12: print('"Марсианин"') else: if 12  old  16: print('"Загадочный остров"') else: if 16  old: print('"Поток сознания"')

Рассмотрим поток выполнения этого варианта кода. Сначала проверяется условие в первом if (он же самый внешний). Если здесь было получено True , то тело этого if выполняется, а в ветку else мы даже не заходим, так как она срабатывает только тогда, когда в условии if возникает ложь.

Если внешний if вернул False , поток выполнения программы заходит в соответствующий ему внешний else . В его теле находится другой if со своим else . Если введенное число попадает в диапазон от 6 до 12, то выполнится тело вложенного if , после чего программа завершается. Если же число не попадает в диапазон от 6 до 12, то произойдет переход к ветке else . В ее теле находится свой условный оператор, имеющий уже третий уровень вложенности.

Теперь зададимся следующим вопросом. Можно ли как-то оптимизировать код множественного ветвления и не строить лестницу из вложенных друг в друга условных операторов? Во многих языках программирования, где отступы используются только для удобства чтения программистом, но не имеют никакого синтаксического значения, часто используется подобный стиль:

if логическое_выражение < … ; >else if логическое_выражение < … ; >else if логическое_выражение < … ; >else

Может показаться, что имеется только один уровень вложенности, и появляется новое расширение для if , выглядящее как else if . Но это только кажется. На самом деле if , стоящее сразу после else , является вложенным в это else . Выше приведенная схема – то же самое, что

if логическое_выражение < … ; >else if логическое_выражение < … ; >else if логическое_выражение < … ; >else

Именно так ее «понимает» интерпретатор или компилятор. Однако считается, что человеку проще воспринимать первый вариант.

В Питоне такое поднятие вложенного if к внешнему else невозможно, потому что здесь отступы и переходы на новую строку имеют синтаксическое значение. Поэтому в язык Python встроена возможность настоящего множественного ветвления на одном уровне вложенности, которое реализуется с помощью веток elif.

Слово «elif» образовано от двух первых букв слова «else», к которым присоединено слово «if». Это можно перевести как «иначе если».

В отличие от else , в заголовке elif обязательно должно быть логическое выражение также, как в заголовке if . Перепишем нашу программу, используя конструкцию множественного ветвления:

old = int(input('Ваш возраст: ')) print('Рекомендовано:', end=' ') if 3  old  6: print('"Заяц в лабиринте"') elif 6  old  12: print('"Марсианин"') elif 12  old  16: print('"Загадочный остров"') elif 16  old: print('"Поток сознания"')

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

Оператор множественного ветвления в Python

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

Оператор match-case в Python

Начиная с версии 3.10 в Питоне появился оператор match , который можно использовать как аналог оператора switch , который есть в других языках. На самом деле возможности match немного шире.

В match множественное ветвление организуется с помощью веток case :

match имя_переменной: case значение_1: действия case значение_2: действия …

Слова match-case можно перевести как «соответствовать случаю». То есть, если значение переменной или выражения при match соответствует значению при каком-либо case , то выполнятся действия, вложенные в этот case .

В отличие от if-elif здесь нельзя использовать логические выражения. После case должен находится литерал, конкретное значение, выражение, возвращающее однозначный результат.

Рассмотрим программу, в которой реализовать множественное ветвление с помощью match-case удобнее, чем через if-elif-else:

sign = input('Знак операции: ') a = int(input('Число 1: ')) b = int(input('Число 2: ')) match sign: case '+': print(a + b) case '-': print(a - b) case '/': if b != 0: print(round(a / b, 2)) case '*': print(a * b) case _: print('Неверный знак операции')

Здесь значение переменной sign проверяется не на вхождение в какой-либо диапазон, а на точное соответствие заданным строковым литералам. При этом в ветках case уже не надо писать sign == ‘+’ или sign == ‘-‘ , как это пришлось бы делать в программе с if-elif:

if sign == '+': print(a + b) elif sign == '-': print(a - b) elif sign == '/': if b != 0: print(round(a / b, 2)) elif sign == '*': print(a * b) else: print('Неверный знак операции')

Код с match выглядит более ясным.

Оператор match языка Python не имеет ветки else . Вместо нее используется ветка case _ .

При одном case через оператор | можно перечислять несколько значений. Если значение переменной соответствует хотя бы одному из них, тело этого case выполнится.

sign = input('Знак операции: ') match sign: case '+' | '-' | '*': a = int(input('Число 1: ')) b = int(input('Число 2: ')) print(eval(f'  ')) case _: print('Неверный знак операции')

В коде выше с помощью функции eval() переданная ей строка выполняется как выражение. Например, если были введены числа 3, 5 и знак *, то получится строка «3 * 5» . Вызов eval(«3 * 5») возвращает число 15.

Практическая работа

  1. Спишите вариант кода программы «про возраст» c if и тремя ветками elif из урока. Дополните его веткой else , обрабатывающие случаи, когда пользователь вводит числа не входящие в заданные четыре диапазона. Подумайте, почему в первой версии программы (когда использовались не связанные друг с другом условные операторы) нельзя было использовать else , а для обработки не входящих в диапазоны случаев пришлось бы писать еще один if ?
  2. Усовершенствуйте предыдущую программу, обработав исключение ValueError , возникающее, когда вводится не целое число.
  3. Напишите программу, которая запрашивает на ввод число. Если оно положительное, то на экран выводится цифра 1. Если число отрицательное, выводится -1. Если введенное число – это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/