Условные операторы
Программа может выполняться постепенно: строка за строкой, выражение за выражением от начала и до конца, не пропуская ни единой строки кода. Но такое в реальности происходит редко. Зачастую необходимо ввести вариативность, чтобы при выполнении определенного условия, происходило одно, а при его невыполнении – другое. Так применяются условные операторы.
Определение
Условные операторы в Python 3 иногда называют операторами ветвления. Они созданы, чтобы программа могла выбрать, какой инструкции стоит следовать при определенном значении заданной переменной. Условные операторы состоят из заголовка и тела. Заголовок – это сама конструкция и то, что стоит рядом с ним (не в фигурных скобках в других языках программирования или перед двоеточием в Python). Тело – то, что написано после двоеточия. Чтобы программа поняла, что код после него является вложенным, необходимо обязательно сделать отступ в виде четырех пробелов. Обычно они ставятся автоматически, если пользователь работает в специально созданной среде программирования.
Заметим, что пользоваться клавишей Tab для создания отступа крайне нежелательно.
Ситуаций, в которых можно было бы применить условный оператор, великое множество. К ним, например, относится:
- Определение, сдал ли студент экзамен. При количестве верных ответов 10 из 15 – сдал, если меньше – не сдал;
- Выяснение размера скидки. Если купил 10 товаров – скидка 10%, если меньше – скидка не предоставляется.
Оператор if
С английского название этого оператора переводится, как «если». То есть он задает условие. После данного оператора записывается само выражение. Если оно оказывается истинным, то программа переходит к выполнению инструкции, заданной в указанном операторе. Выражение считается истинным, когда оно:
- не равно нулю;
- не является пустым;
- является логическим
Для ясности рассмотрим пример использования if — условия в Python 3:
if 3: print("Привет 3")
На экране перед пользователем появится запись: Привет 3.
a = 6 if a == 6: print("Привет 2")
На дисплее компьютера отобразится: Привет 2.
Также можно задать условие формулой или условным выражением:
a = 5 if a > 2: print("Привет 3")
Переменная равна 5, условие, чтобы она была больше 2. Оно истинное, поэтому перед нами появится: Привет 3.
Еще более сложный вариант с несколькими переменными:
a = 0 b = 34 c = 10 if c < 100: a = b + c print(a)
Поскольку с действительно меньше 100, а станет равным 44, и именно это число появится на дисплее при выполнении данного кода. Если бы с изначально было большее 100, например, 110, то на экране бы отобразился 0, переменная а просто не изменилась бы вообще.
Оператор else
Иногда программе нужно указать, что делать, если условие оказывается ложным. Для этого задается новый набор инструкций и используется конструкция if – else. Кстати, стоит запомнить, что в else не может быть никакого логического выражения. Также невозможна и ситуация, при которой выполнятся обе ветви (и if, и else).
a = 7 if a > 5: print("Да") else: print("Нет")
При выполнении данного кода на компьютере появится: Да. Это происходит, потому что 7 действительно больше заданной в условии цифры 5.
Посмотрим, что же случится, если условие станет ложным. Возьмем тот же код, но изменим переменную а.
a = 3 if a > 5: print("Да") else: print("Нет")
Очевидно, что перед пользователем появится слово «Нет», поскольку 3 не больше 5, а меньше.
product1 = 30 product2 = 23 if product1+ product2 > 70 : print("70 рублей не хватит") else: print("Денег хватает, все оплачено")
В данном случае программист увидит запись: Денег хватает, все оплачено, поскольку 30 + 23 = 53, а это меньше чем 70.
Оператор elif и конструкция if – elif – else
Вообще elif примерно расшифровывается, как else + if. Чтобы можно было реализовать программу, которая выбирала бы из нескольких альтернативных вариантов, используется указанная конструкция.
Рассмотрим код, в котором имеется несколько условий:
if balance < 0: print("Баланс ниже нуля, положите деньги на счет, чтобы Вам не выписали штраф") elif balance == 0: print("Баланс равен нулю, скорее внесите деньги на счет") else: print("Ваш баланс выше нуля, все хорошо")
Так, программа может рассмотреть варианты с тремя условиями. И если переменная balance будет равна 150, то перед пользователем появится надпись: Ваш баланс выше нуля, все хорошо.
Оператор elif позволяет упростить код. Сделать его легче читаемым. Позволяет избежать написание несколько условий if в Python.
Тернарный оператор
Иногда для сокращения записи используется так называемый тернарный оператор, благодаря ему код набирается в одну строку. Посмотрим на пример того, как можно записать условие Python в одну строку:
is_happy = True state = "happy" if is_happy else "not happy"
Чтобы не расписывать в несколько строк оператор if, просто используем сжатый вариант.
Конструкция switch – case
Данная инструкция в Python не используется. Вместо этого можно применять конструкции с несколькими elif. Например, программист хочет написать код, чтобы программа ставила оценку за пройденный студентами тест. При этом оценок может быть несколько. Тогда можно оформить так:
if grade >= 50: print("Оценка 5 с плюсом") elif grade >= 45: print("Оценка 5") elif grade >= 35: print("Оценка 4") elif grade >= 25: print("Оценка 3") else: print("Тест провален")
В этом случае значение переменной grade будет сравниваться со всеми условиями подряд. Однако когда условие станет истинным, выполнение кода остановится и на экране появится сообщение об оценке. Например, если grade равен 30, то на дисплей будет выведена надпись: Оценка 3; если же переменная будет ниже 25, то пользователь увидит: Тест провален.
Если начинающий программист успешно владеет условными конструкциями, это существенно облегчает написание программ и позволяет точнее обозначать их действия. Для усложнения можно создавать целые комбинации операторов, а также объединять их с помощью циклов.
Операторы 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
Python 3: if-elif-else, for и while
Для управления порядком выполнения команд в Python существует конструкции:
- if-elif-else
- for
- while
- Операторы break и continue
- Оператор else в for и while
if-elif-else
Оператор if - elif - else позволяет описывать ветвление по какому-нибудь условию:
elif test2 :
Блок блок else можно опустить. Блоков elif может быть несколько, либо их может не быть совсем.
Оператор if в Python работает аналогично оператору if в Java и аналогично оператору if в Javascript.
Порядок выполнние if - elif - else в Python:
- Проверяется условие test1 блока if . Если оно true , то выполняется блок инструкций state1 .
- Поочерёдно выполняются все условия блоков elif , и выполняются соответствующие им блоки, если он true . Блоков elif может быть несколько.
- Выполняется инструкция state3 блока else .
str1 = "Vasya"
if ( str1 == "Petya" ) :
print ( "yes" ) ;
elif ( str1 == "Vasya" ) :
print ( "else" )
Выведет в консоль:
Проверка истинности в Python происходит в соответствии со следующими правилами:
- Любое число, не равное 0, или непустой объект — истина.
- Числа, равные 0, пустые объекты и значение None — ложь.
- Операции сравнения применяются к структурам данных рекурсивно.
- Операции сравнения возвращают истину или ложь.
- Логические операторы and и or возвращают истинный или ложный объект-операнд.
for
Оператор цикла for в Python ОТЛИЧАЕТСЯ от оператора цикла for в Java и оператора цикла for в Javascript. В Python оператор цикла for позволяет пройтись по всем элементам любой последовательности (строки или списка, например).
lst1 = [ 45 , 78 , 23 ]
for n in lst1 :
Этот код выведет в консоль:
while
Оператор цикла while выполняет инструкции до тех пор, пока условие истинно:
while ( n > 0 ) :
Выведет в консоль:
Операторы break и continue
Оператор break прерывает выполнение цикла, а оператор continue переходит к следующей итерации цикла, что соответствует их поведению в других языках.
while ( n > 0 ) :
elif ( n == 5 ) :
Выведет в консоль:
Число 11 было пропущено ,так как при сравнении с 11 мы переходим к следующей итерации цикла с помощью continue . Число 6 стало последним, так как при сравнении с 5 мы прерываем цикл с помощью break .
Оператор else в for и while
В Python после циклов for и while можно использовать else , блок инструкций внутри которого будет выполняться после полного прохода цикла for , или после того, как условие while стало ложным, но НЕ будет выполняться при прерывании цикла оператором break .
Оператор выбора в Python (if else)
Фундаментальная важность условий для любого из языков программирования заключается в их возможности описывать большую часть логики работы программы.
Говоря простыми словами, конструкция if else в Python указывает интерпретатору, следует ли выполнять определенный участок кода или нет.
Как и все прочие составные инструкции языка, оператор выбора также поддерживает свойство вложенности. Это означает, что использование if else позволяет создавать внутри программного модуля так называемое логическое ветвление.
Как работает if else
Синтаксис
Оператор if else в языке Python — это типичная условная конструкция, которую можно встретить и в большинстве других языков программирования.
# самый простой пример, где есть всего одно условие a = 1 if a == 1: print("It is true") > It is true
Синтаксически конструкция выглядит следующим образом:
- сначала записывается часть if с условным выражением, которое возвращает истину или ложь;
- затем может следовать одна или несколько необязательных частей elif (в других языках вы могли встречать else if );
- Завершается же запись этого составного оператора также необязательной частью else .
count = 1 # условное выражение может быть сколь угодно сложным, # и может быть сколь угодно много elif-частей if True and count == 1 and count == 2: print("if") elif count == 'count': print("First elif") elif count == 14.2: print("Second elif") elif count == 1: print("Nth elif") else: print("Else") > Nth elif
Для каждой из частей существует ассоциированный с ней блок инструкций, которые выполняются в случае истинности соответствующего им условного выражения.
b = 10 if b == 10: # любое количество инструкций print(b) b = b * 15 b = b - 43 b = b ** 0.5 print(b) elif b == 20: print("You will not see me") else: print("And me") > 10 > 10.344080432788601
То есть интерпретатор начинает последовательное выполнение программы, доходит до if и вычисляет значение сопутствующего условного выражения. Если условие истинно, то выполняется связанный с if набор инструкций. После этого управление передается следующему участку кода, а все последующие части elif и часть else (если они присутствуют) опускаются.
Отступы
Отступы — важная и показательная часть языка Python. Их смысл интуитивно понятен, а определить их можно, как размер или ширину пустого пространства слева от начала программного кода.
# начало кода # код # код # код # начало первого отступа # первый отступ # первый отступ # начало второго отступа # второй отступ # второй отступ # конец второго отступа # конец первого отступа
Благодаря отступам, python-интерпретатор определяет границы блоков. Все последовательно записанные инструкции, чье смещение вправо одинаково, принадлежат к одному и тому же блоку кода. Конец блока совпадает либо с концом всего файла, либо соответствует такой инструкции, которая предшествует следующей строке кода с меньшим отступом.
var_a = 5 var_b = 10 var_c = 20 if var_c**2 > var_a * var_b: # блок №1 if var_c < 100: # блок №2 if var_c >10: # блок №3 var_a = var_a * var_b * var_c # блок №2 var_b = var_a + var_c # блок №1 var_c = var_a - var_b print(var_a) print(var_b) print(var_c) > 1000 > 1020 > -20
Таким образом, с помощью отступов появляется возможность создавать блоки на различной глубине вложенности, следуя простому принципу: чем глубже блок, тем шире отступ.
Подробнее о табуляции и отступах в Python:
Примеры
Рассмотрим несколько практических примеров использования условного оператора.
Пример №1 : создание ежедневного бэкапа (например базы данных):
from datetime import datetime def daily_backup(last_backup_date): """ Передаем дату последнего бэкапа. Если прошло больше 1 дня, создаем бэкап """ if not last_backup_date: print(f"creating first backup [] ..") return delta = datetime.now() - last_backup_date if delta.days > 0: print(f"creating backup [] ..") else: print(f"backup on [] already exists") daily_backup("") > creating first backup [2020-08-15] .. daily_backup(datetime(2020, 8, 14)) > creating backup [2020-08-15] .. daily_backup(datetime(2020, 8, 15)) > backup on [2020-08-15] already exists
Пример №2 : Проверка доступа пользователя к системе. В данном примере if проверяет наличие элемента в списке:
BLACK_LIST = ['192.34.12.3', '192.34.12.5', '192.34.10.23'] USERS = ['rolli34', 'constantinpetrovv', 'kate901'] def access_available(user_name, ip): if user_name in USERS: if ip not in BLACK_LIST: return True else: print(f"write to log: user [ip: ] in block list") else: print(f"write to log: user [ip: ] does not exists") return False if access_available("rolli34", "192.34.12.111"): print(f"Hello!!") > Hello!! if access_available("rolli34", "192.34.10.23"): print(f"Hello!!") > write to log: user rolli34 [ip: 192.34.10.23] in block list if access_available("devnull", "192.34.10.11"): print(f"Hello!!") > write to log: user devnull [ip: 192.34.10.11] does not exists
Пример №3 : Валидация входных данных. В примере к нам приходят данные в формате json . Нам необходимо выбрать все записи определенного формата:
NEED = < "name": str, "weight": int, "age": int, >def is_valid(data): valid = True for need_key_name, need_type in NEED.items(): # проверяем наличие ключа if need_key_name in data: # если ключ есть, проверяем тип значения data_type = type(data[need_key_name]) if data_type != need_type: print(f"type error: '' is , need: ") valid = False else: print(f"key error: '' does not exists") valid = False return valid if is_valid(): print("data is valid") > key error: 'weight' does not exists key error: 'age' does not exists if is_valid(): print("data is valid") > key error: 'weight' does not exists type error: 'age' is , need: if is_valid(): print("data is valid") > data is valid
Оператор elif
elif позволяет программе выбирать из нескольких вариантов. Это удобно, например, в том случае, если одну переменную необходимо многократно сравнить с разными величинами.
shinobi = 'Naruto' if shinobi == 'Orochimaru': print('fushi tensei') elif shinobi == 'Naruto': print('RASENGAN') elif shinobi == 'Sasuke': print('chidori') > RASENGAN
Такая конструкция может содержать сколь угодно большую последовательность условий, которые интерпретатор будет по порядку проверять.
Но помните, что первое условие всегда задается с if
Также не стоит забывать, что как только очередное условие в операторе оказывается истинным, программа выполняет соответствующий блок инструкций, а после переходит к следующему выражению.
Из этого вытекает, что даже если несколько условий истинны, то исполнению подлежит все равно максимум один, первый по порядку, блок кода с истинным условием.
Если ни одно из условий для частей if и elif не выполняется, то срабатывает заключительный блок под оператором еlse (если он существует).
Заглушка pass
Оператор-заглушка pass заменяет собой отсутствие какой-либо операции.
Он может быть весьма полезен в случае, когда в ветвлении встречается много elif -частей, и для определенных условий не требуется выполнять никакой обработки.
Наличие тела инструкции в Python обязательно
sum = 100000 account_first = 12000 account_second = 360000 if account_first > sum: pass elif account_second > sum: pass else: print(sum)
if else в одну строку
Во многих языках программирования условие может быть записано в одну строку. Например, в JavaScript используется тернарный оператор:
# так выглядит условие в одну строку в JavaScript const accessAllowed = (age > 21) ? true : false;
Читается это выражение так: если age больше 21 , accessAllowed равен true , иначе — accessAllowed равен false .
В Python отсутствует тернарный оператор
Вместо тернарного оператора, в Питоне используют инструкцию if else , записанную в виде выражения (в одно строку):
if else
number = -10 abs_number = number if number >= 0 else -number print(abs_number)
Такая конструкция может показаться сложной, поэтому для простоты восприятия, нужно поделить ее на 3 блока:
Стоит ли использовать такой синтаксис? Если пример простой, то однозначно да:
Вполне читаемо смотрятся и следующие 2 примера:
x = "Kate" if "Alex" in "My name is Alex" else "Mary" print(x) > Kate y = 43 if 42 in range(100) else 21 print(y) > 43
Но если вы используете несколько условий, сокращенная конструкция усложняется и становится менее читаемой:
x = 10 result = 100 if x > 42 else 42 if x == 42 else 0 print(result) > 0
Вложенные условия
Ограничений для уровней вложенности в Python не предусмотрено, а регулируются они все теми же отступами:
# делать код менее читаемым можно до бесконечности def run(action): if action: print(some_func()) else: if some_func(): num = one_func() if num: if 0 < num < 100: print(num) else: print('-')
Стоит ли использовать такие вложенности? Скорее нет, чем да. Одно из положений Python Zen гласит:
Flat is better than nested (развернутое лучше вложенного).
Большая вложенность имеет следующие недостатки:
- становится трудно легко найти, где заканчивается конкретный блок;
- код становится менее читаемым и сложным для понимания;
- возможно придется прокручивать окно редактора по горизонтали.
Но что делать, если в скрипте не получается уйти от большой вложенности if-else? ♂️
Чтобы уйти от большой вложенности, попробуйте не использовать оператор else
Пример выше, можно записать следующим образом:
def run(action): if action: print(some_func()) return if not some_func(): return num = one_func() if not num: return if 0 < num < 100: print(num) return print('-')
Конструкция switch case
В Python отсутствует инструкция switch case
В языках, где такая инструкция есть, она позволяет заменить собой несколько условий if и более наглядно выразить сравнение с несколькими вариантами.
Свято место пусто не бывает, поэтому в питоне такое множественное ветвление, в обычном случае, выглядит как последовательность проверок if-elif :
n = 5 if n == 1: print(n) elif n == 2: print(n) else: print("There is not your number") > "There is not your number"
Однако есть и более экзотический вариант реализации этой конструкции, задействующий в основе своей python-словари :
switch_dict = < 1: 1, 2: 2, 3: 3, >print(switch_dict.get(5, "There is not your number")) > "There is not your number"
Использование словарей позволяет, в качестве значений, хранить вызовы функций, тем самым, делая эту конструкцию весьма и весьма мощной и гибкой.
