Операторы if-elif-else в Python
В этой статье вы научитесь принимать решения в программе Python, используя различные формы оператора if..else.
Что такое оператор if … else в Python?
Оператор if… elif… else используется в Python для принятия решений, когда мы хотим выполнить кодирование только при соблюдении определенного условия.
Синтаксис
if test expression: statement(s)
Здесь программа оценивает test expression и выполняет оператор(ы), только если тестовое выражение истинно.
Если тестовое выражение имеет значение False, оператор(ы) не выполняется.
В Python тело оператора if обозначается отступом. Тело начинается с отступа, а первая строка без отступа отмечает конец.
Python интерпретирует ненулевые значения как True. None и 0 интерпретируются как False.
Блок-схема оператора if Python

Пример: Оператор Python if
# If the number is positive, we print an appropriate message num = 3 if num > 0: print(num, "is a positive number.") print("This is always printed.") num = -1 if num > 0: print(num, "is a positive number.") print("This is also always printed.")
Когда вы запустите программу, вывод будет:
3 is a positive number This is always printed This is also always printed.
В приведенном выше примере num> 0 ‒ это тестовое выражение. Тело if выполняется, только если оно имеет значение True.
Когда переменная num равна 3, тестовое выражение истинно и выполняются операторы внутри тела if.
Если переменная num равна -1, тестовое выражение ложно, а операторы внутри тела if пропускаются.
Оператор print() находится за пределами блока if (без отступов). Следовательно, он выполняется независимо от тестового выражения.
Синтаксис if … else
if test expression: Body of if else: Body of else
Оператор if..else оценивает test expression и выполняет тело if, только если условие теста True.
Если условие равно False, выполняется тело else. Для разделения блоков используется отступ.
Блок-схема if..else

Пример
# Program checks if the number is positive or negative # And displays an appropriate message num = 3 # Try these two variations as well. # num = -5 # num = 0 if num >= 0: print("Positive or Zero") else: print("Negative number")
Positive or Zero
В приведенном выше примере, когда num равно 3, тестовое выражение истинно, и тело if выполняется, а тело else пропускается.
Если num равно -5, тестовое выражение ложно, и выполняется тело else, а тело if пропускается.
Если num равно 0, тестовое выражение истинно, и тело if выполняется, а тело else пропускается.
Синтаксис if … elif … else
if test expression: Body of if elif test expression: Body of elif else: Body of else
Элиф ‒ это сокращение от else if. Это позволяет нам проверять наличие нескольких выражений.
Если условие if равно False, проверяется условие следующего блока elif и так далее. Если все условия ложны, выполняется тело else. Только один блок из нескольких блоков if … elif … else выполняется согласно условию. Блок if может иметь только один блок else. Но у него может быть несколько блоков elif.
Блок-схема if … elif … else

Пример работы
'''In this program, we check if the number is positive or negative or zero and display an appropriate message''' num = 3.4 # Try these two variations as well: # num = 0 # num = -4.5 if num > 0: print("Positive number") elif num == 0: print("Zero") else: print("Negative number")
Если num переменной положительный, печатается Positive number. Если num равно 0, печатается Zero. Если число отрицательное, печатается Negative number.
Вложенные операторы if
У нас может быть оператор if … elif … else внутри другого оператора. В компьютерном программировании это называется вложением.
Любое количество этих операторов может быть вложено друг в друга. Отступы ‒ единственный способ определить уровень вложенности. Они могут сбивать с толку, поэтому их следует избегать при необходимости.
Пример вложенного оператора
'''In this program, we input a number check if the number is positive or negative or zero and display an appropriate message This time we use nested if statement''' num = float(input("Enter a number: ")) if num >= 0: if num == 0: print("Zero") else: print("Positive number") else: print("Negative number")
Enter a number: 5 Positive number
Enter a number: -1 Negative number
Enter a number: 0 Zero
Блок-схема с веткой if, идущей на выход

Есть блок-схема, нужен совет, можно ли так делать и если нельзя, то как это исправить.
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 3 июн 2014 в 9:42
101 1 1 бронзовый знак
я вижу только одну проблему — схема очень большая. Если это в коде одна функция/процедура, то по ней плачет рефакторинг.
3 июн 2014 в 9:47
скажем так, это схема процесса, и количество блоков это требования кафедры. Главная проблема в выходе в круге под номером 2. Обычно if закрывается, но тут не так. Противоречит ли это каким-то стандартам и нормам или нет?
3 июн 2014 в 10:00
думаю, это лучше у Вашей кафедры спросить. Как по мне — не противоречит. Но средний блок можно переформатировать немного и тогда можно будет соединить вход и выход 2. Но здесь возможно будет нарушено требование, что бы ветка «да» была справа.
3 июн 2014 в 10:07
В каком смысле «закрывается»? Насколько я понял схему, (2) в средней колонке переходит к (2) в правой.
3 июн 2014 в 10:07
@VladD вот и получается, что if снизу не закрывается, а идет одной веткой на выход (может ли такое быть, в этом и вопрос). Может ли он так запросто из if переходить
3 июн 2014 в 10:13
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В ГОСТе 19.701.90 я не нашел, что бы накладывались какие-то условия по этому поводу, так что с точки зрения стандартов такая запись разрешена.
Отслеживать
ответ дан 3 июн 2014 в 10:21
Alex Krass Alex Krass
17.7k 2 2 золотых знака 25 25 серебряных знаков 52 52 бронзовых знака
@Alex Krass а что насчет базовых структур (if — один вход, один выход). А получается 2 по сути.
3 июн 2014 в 19:50
Так можно делать и ГОСТу не противоречит.
Символ «Соединитель» — символ отображает вход в часть схемы и выход из другой части этой схемы. Используется для обрыва линии и продолжения её в другом месте (для избежания излишних пересечений или слишком длинных линий, а также, если схема состоит из нескольких страниц). Соответствующие соединительные символы должны иметь одинаковое (при том уникальное) обозначение.
P.S. «А что насчет базовых структур (if — один вход, один выход). А получается 2 по сути». Это укороченный вариант if (без else). Стандартный if — это 1 вход, 1 вариант ответа и 2 выхода.
Блок «Логический» — отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется.
Т.е. если выходов больше 2, то рисуем «ключ» (switch,case).
Ветвление. Условный оператор
Ход выполнения программы может быть линейным, то есть таким, когда выражения выполняются друг за другом, начиная с первого и заканчивая последним. Ни одна строка кода программы не пропускается.
Однако чаще в программах бывает не так. При выполнении кода, в зависимости от тех или иных условий, некоторые его участки могут быть опущены, в то время как другие – выполнены. Иными словами, в программе может присутствовать ветвление, которое реализуется условным оператором – особой конструкцией языка программирования.
Проведем аналогию с реальностью. Человек живет по расписанию. Можно сказать, расписание – это алгоритм для человека, его программный код, подлежащий выполнению. В расписании на 18.00 стоит поход в бассейн. Однако экземпляр биоробота класса Homo sapiens через свои рецепторы-сенсоры получает информацию, что воду из бассейна слили. Разумно было бы отменить занятие по плаванию, то есть изменить ход выполнения программы-расписания. Одним из условий посещения бассейна должно быть его функционирование, иначе должны выполняться другие действия.
Подобная нелинейность действий может быть реализована в компьютерной программе. Например, часть кода будет выполняться лишь при определенном значении конкретной переменной. В языках программирования используется приблизительно такая конструкция условного оператора:
if логическое_выражение
Перевести на человеческий язык можно так: если логическое выражение возвращает истину, то выполняются выражения внутри фигурных скобок; если логическое выражение возвращает ложь, то код внутри фигурных скобок не выполняется. С английского «if» переводится как «если».
Конструкция if логическое_выражение называется заголовком условного оператора. Выражения внутри фигурных скобок – телом условного оператора. Тело может содержать как множество выражений, так и всего одно.
Пример использования условного оператора в языке программирования Python:
if n 100: a = a + b
В Питоне вместо фигурных скобок используется двоеточие. Обособление вложенного кода, то есть тела оператора, достигается за счет отступов. В программировании принято делать отступ равным четырем пробелам. Можно использовать клавишу табуляции ( Tab ) на клавиатуре.
Большинство сред программирования автоматически создают отступ, как только вы поставите двоеточие и перейдете на новую строку. Однако при работе в интерактивном режиме отступы надо добавлять вручную.

Нахождение в теле условного оператора здесь обозначается тремя точками. При создании файла со скриптом таких точек быть не должно, как и приглашения >>> .
Python считается языком с ясным синтаксисом и легко читаемым кодом. Это достигается сведением к минимуму таких вспомогательных элементов как различные скобки и точка с запятой. Для разделения выражений используется переход на новую строку, а для обозначения вложенных выражений – отступы от начала строки. В других языках данный стиль программирования также используется, но лишь для удобочитаемости кода человеком. В Питоне же такой стиль возведен в ранг синтаксического правила.
Данный пример вырван из контекста и сам по-себе не является рабочим. Полная версия программы могла бы выглядеть так:
a = 50 b = 10 n = 98 if n 100: a = a + b print(a)
Последняя строчка кода print(a) уже не относится к условному оператору, что обозначено отсутствием перед ней отступа. Она не является вложенной в условный оператор, значит, не принадлежит ему.
Поскольку переменная n равна 98, а это меньше 100, то a станет равной 60. Это значение будет выведено на экран. Если переменная n изначально была бы связана, например, со значением 101, то на экран было бы выведено 50. Потому что при n , равной 101, логическое выражение в заголовке условного оператора вернуло бы ложь. Значит, тело не было бы выполнено, и переменная a не изменилась бы.
Структуру программы можно изобразить следующим образом:
Основная ветка программы выполняется всегда, а вложенный код лишь тогда, когда в темно-зеленой строчке, обозначающей заголовок условного оператора, случается истина.
Для небольших программ иногда чертят так называемые блок-схемы, отражающие алгоритм выполнения. В языке блок-схем различные части кода обозначаются своими фигурами. Так блоку последовательно выполняемых действий соответствует прямоугольник, ветвлению – ромб. Для кода выше блок-схема может выглядеть так:

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

В случае возврата логическим выражением False поток выполнения программы не возвращается сразу в основную ветку. На случай False существует другой вложенный код, отличный от случая True . Другими словами, встретившись с расширенной версией условного оператора, поток выполнения программы не вернется в основную ветку, не выполнив хоть какой-нибудь вложенный код.
В языках программирования разделение на две ветви достигается с помощью добавления блока else, получается так называемое if–else (если-иначе). Синтаксис выглядит примерно так:
if логическое_выражение < выражение 1; выражение 2; … >else
Если условие при инструкции if оказывается ложным, то выполняется блок кода при инструкции else . Ситуация, при которой бы выполнились обе ветви, невозможна. Либо код, принадлежащий if , либо код, принадлежащий еlse . Никак иначе. В заголовке else никогда не бывает логического выражения.
Пример программы с веткой else на языке Python:
tovar1 = 50 tovar2 = 32 if tovar1 + tovar2 > 99: print("99 рублей недостаточно") else: print("Чек оплачен")
Следует иметь в виду, что логическое выражение при if может выглядеть нестандартно, то есть не так просто, как a > b и тому подобное. Там может стоять просто одна переменная, число, слово True или False , а также сложное логическое выражение, когда два простых соединяются через логически and или or .
a = ? if a: a = 1
Если вместо знака вопроса будет стоять 0, то с логической точки зрения это False , значит выражение в if не будет выполнено. Если a будет связано с любым другим числом, то оно будет расцениваться как True , и тело условного оператора выполнится. Другой пример:
a = 5 > 0 if a: print(a)
Здесь a уже связана с булевым значением. В данном случае это True . Отметим, что в выражении a = 5 > 0 присваивание выполняется после оператора сравнения, так что подвыражение 5 > 0 выполнится первым, после чего его результат будет присвоен переменной a . На будущее, если вы сомневаетесь в последовательности выполнения операторов, используйте скобки, например так: a = (5 > 0) .
if a > 0 and a b: print(b - a)
Тут, чтобы вложенный код выполнился, a должно быть больше нуля и одновременно меньше b . Также в Питоне, в отличие от других языков программирования, позволительна такая сокращенная запись сложного логического выражения:
if 0 a b: print(b - a)
Практическая работа
- Напишите программу, которая просит пользователя что-нибудь ввести с клавиатуры. Если он вводит какие-нибудь данные, то на экране должно выводиться сообщение «ОК». Если он не вводит данные, а просто нажимает Enter , то программа ничего не выводит на экран.
- Напишите программу, которая запрашивает у пользователя число. Если оно больше нуля, то в ответ на экран выводится число 1. Если введенное число не является положительным, то на экран должно выводиться -1.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Условный оператор if — else
Теперь, когда с условными выражениями разобрались, можно переходить к основной теме урока – условному оператору .
Шаблон оператора if — else
Тут возможны два основных варианта:
// первый вариант if (условное_выражение) оператор_1; // второй вариант if (условное_выражение) оператор_1; else оператор_2;
Ну и картинки, конечно. Куда же без картинок?

Рис.1 Блок-схемы оператора if-else.
Работает этот оператор так. Вычисляется значение условного выражения. Если получается истина, то выполняется оператор_1 из основной ветки, а если ложь, то либо ничего не происходит (в первом варианте), либо выполняется оператор_2 из побочной ветки (во втором варианте).
Предлагаю сразу на примерах разбираться. Например, как вы думаете, что выведет на экран следующий код? Проверьте свою догадку.
#include int main(void)
Ну да, правильно, он выведет TRUE! . Условие же истинно. Вы же ещё не забыли, что единица – это истина? Я сейчас страшное скажу. Любое ненулевое число воспринимается как истина. Проверьте это самостоятельно.
Ну ладно, а теперь вот такой пример. Что по-вашему выведет данная программа?
#include int main(void)
Надеюсь, вы дали правильный ответ и вас не смутила строчка с выводом FALSE! , которое я специально добавил, чтобы запутать вас. Да, эта программа ничего не выведет. Условие в скобах ложно, а значит, оператор не будет выполнен. Всё по правилам.
Давайте ещё один примерчик, для закрепления. Будьте предельно внимательны, я там подготовил для вас всякого. Итак, что выведет данный код?
#include int main(void)
Верю, что у вас всё получилось! Если не получилось, не расстраивайтесь – ещё будет время потренироваться.
Ну а сейчас давайте о нюансах – они, как обычно, имеются.
В каждой ветке условного оператора может быть записан лишь ОДИН оператор.
Вот, посмотрите на пример.
#include int main(void)
Кажется, что программа должна работать следующим образом. Пользователь вводит целое число. Если число меньше нуля, то меняем его знак на противоположный. В противном случае ничего не делаем. После этого выводим число на экран консоли.
А теперь внимание на экран.

Рис.2 Результат работы программы Листинг 11
Но решение есть! И это решение – составной оператор <> . Если мы заключим несколько операторов в фигурные скобки, то они будут восприниматься как один единый оператор. Поэтому, чтобы программа заработала правильно, добавим в неё составной оператор:
#include int main(void) < int x = 0; scanf("%d", &x); if ( x < 0 )< printf("x = %d\n", x); x = (-1)*x; >printf("%d\n", x); return 0; >
Ну вот, теперь всё как надо. Проверьте самостоятельно. Кстати, из опыта. Я вам настоятельно советую всегда использовать фигурные скобки, даже если внутри них будет один оператор. Очень часто это позволяет избежать глупых ошибок.
Внутри управляющей конструкций if-else можно использовать любые конструкции языка, в том числе ещё одну конструкцию if-else .
Вот так например:
#include int main(void) < int x = 0; scanf("%d", &x); if ( x < 0 ) < printf("Negative!\n"); >else < if ( x == 0 )< printf("Zero!\n"); >else < printf("Positive!\n"); >> return 0; >
Думаю, понятно, что используя вложенные условные операторы, вы можете сделать конструкцию аналогичную оператору выбора switch .
Использование вложенных условных операторов порождает ещё одну особенность.
else всегда относится к ближайшему if , у которого нет своего else
if ( n > 0 ) if ( а > b ) z = a; else z = b;
Согласно нашему правилу, else относится к внутреннему (второму) if . Если хотим, чтобы else относился к внешнему (первому) if , то можно воспользоваться составным оператором.
if ( n > 0 ) < if (а >b) z = a; > else z = b;
Как я уже упоминал, лучше всегда использовать фигурные скобки, дабы избежать случаев неправильного толкования записи. Искать подобные ошибки в программах очень тяжело. Обратите внимание также на расстановку отступов. Я использую их, чтобы по коду сразу стало ясно, какая ветвь к какому if относится.
Сохрани в закладки или поддержи проект.
Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим
Исследовательские задачи для хакеров:
- В языке Си существует ещё одна конструкция, работающая с условными выражениями. Это тернарная условная операция ?: . Самостоятельно найдите в интернете описание этой конструкции и изучите, как она работает.
Дополнительные материалы
- Задачи на условный оператор от Яндекса