Условия if-else в Python: elif, вложенные if и тернарный оператор
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
Каждый день вы принимаете сотни решений. Если идёт дождь, вы берёте зонт. Если на светофоре красный, вы останавливаетесь. Если заряд телефона ниже 20%, вы ищете зарядку. Всё это решения по условию: вы что-то проверяете и действуете в зависимости от результата.
Программы принимают решения так же. Без условий код каждый раз выполнялся бы в точности одинаково, какие бы данные он ни получил. Условия позволяют программам реагировать на разные ситуации, обрабатывать граничные случаи и вести себя разумно.
В этом уроке вы узнаете, как Python принимает решения с помощью if, else и elif. К концу урока вы будете писать программы, которые выбирают разные пути в зависимости от ввода пользователя, вычисленных значений и сложных сочетаний условий.
Как работает инструкция if в Python?
Инструкция if представляет собой самый простой способ принять решение. Она проверяет условие. Если условие равно True, выполняется код с отступом под ней. Если условие равно False, Python полностью пропускает этот код.
It's hot outside! Stay hydrated. Have a great day!
Обратите внимание на структуру. После ключевого слова if идёт условие (temperature > 30), а затем двоеточие (:). Строки под ним записаны с отступом: так Python понимает, какой код относится к блоку if. Последняя строка выполняется в любом случае, потому что у неё нет отступа под if.
Попробуйте изменить температуру в коде выше на 25 и запустить его ещё раз. Две строки о жаре исчезнут, но «Have a great day!» вы по-прежнему увидите, потому что эта строка находится вне блока if.
Добавляем else: что происходит, когда условие ложно?
Одна инструкция if может либо что-то сделать, либо ничего не делать. Но часто нужно сделать одно, когда условие истинно, и что-то другое, когда оно ложно. Для этого и нужен else.
You're too young to vote. Come back in 3 years.
Представьте if-else как развилку на дороге. Python всегда идёт либо по одной дороге, либо по другой: никогда по обеим сразу и никогда ни по одной. Каждый раз выполняется ровно один блок.
score = 85
if score >= 60:
print('You passed!')
if score < 60:
print('You failed.')score = 85
if score >= 60:
print('You passed!')
else:
print('You failed.')Вариант с else лучше по двум причинам. Во-первых, он короче и легче читается. Во-вторых, в нём невозможно случайно выполнить оба блока или ни одного. С двумя отдельными инструкциями if одна опечатка во втором условии может привести к ошибкам.
Как работает elif, когда условий несколько?
А если вариантов больше двух? Представьте, что вы ставите оценки за контрольную: A, B, C, D или F. Пять исходов не обработать одними if и else. Здесь на помощь приходит elif (сокращение от «else if», «иначе если»).
Score: 82, Grade: B
Python проверяет условия сверху вниз. Как только он находит условие, равное True, он выполняет этот блок и пропускает всё, что ниже. Если ни одно условие не подошло, выполняется блок else, который служит страховкой.
Блоков elif может быть сколько угодно. else в конце необязателен, но его полезно добавлять, чтобы перехватить неожиданные значения.
Вложенные инструкции if: условия внутри условий
Иногда второе условие нужно проверять, только если выполнено первое. Например, на аттракционе в парке сначала проверяют ваш рост, а потом возраст. Инструкцию if можно поместить внутрь другой инструкции if, это называется вложенностью.
Welcome to the ride!
Внутренний if выполняется, только когда внешний if равен True. Обратите внимание, как растёт отступ: каждый уровень вложенности добавляет ещё один уровень отступа.
if has_ticket:
if age >= 12:
if height >= 120:
print('Welcome!')if has_ticket and age >= 12 and height >= 120:
print('Welcome!')Тернарный оператор в Python: if-else в одну строку
Бывает, что простой if-else лишь присваивает значение. Для этого в Python есть сокращённая запись, которая называется тернарным оператором (или условным выражением). Она умещает весь if-else в одну строку.
adult adult
Синтаксис такой: value_if_true if condition else value_if_false. Читается почти как обычная фраза: «status равен 'adult', если age не меньше 18, иначе 'minor'».
Wear a t-shirt today. Absolute value of -5 is 5
Частые ошибки в if-else
Вот ошибки, которые новички чаще всего допускают в условных инструкциях. Научитесь узнавать их, и вы сэкономите себе часы отладки.
This always runs! Red or blue! Primary color!
Упражнения для практики
Пора потренироваться! Упражнения идут от простых инструкций if к более сложной условной логике. Попробуйте решить каждое, прежде чем смотреть подсказки.
Напишите программу, которая проверяет, чётное число или нечётное. Дана переменная number со значением 7.
Выведите "even", если число чётное, или "odd", если нечётное.
Ожидаемый вывод:
oddПодсказка: число чётное, если number % 2 == 0 (остаток от деления на 2 равен нулю).
Напишите программу, которая советует, что надеть, в зависимости от температуры. Дана переменная temp со значением 22.
Правила:
"Wear shorts""Wear a t-shirt""Wear a jacket""Wear a coat"Ожидаемый вывод:
Wear a t-shirtНе запуская код, предскажите, что он выведет. Затем запустите его и проверьте себя.
Хорошо подумайте, какие условия равны True, а какие False.
В этой программе подсчёта оценки есть ошибка. Любой балл получает оценку «D», даже когда должна быть «A», «B» или «C». Исправьте цепочку elif, чтобы она работала правильно.
Ожидаемый вывод при score = 85:
Grade: BБилет в кинотеатр стоит $12 для взрослых (от 18 лет) и $8 для детей (младше 18). С помощью тернарного оператора задайте цену в одну строку, а затем выведите её.
Дана переменная age со значением 14.
Ожидаемый вывод:
Ticket price: $8Напишите проверку входа в систему. Даны две переменные: username и password.
Правила:
"admin" и password равно "secret123", выведите "Welcome, admin!""admin", но пароль неверный, выведите "Wrong password""User not found"Ожидаемый вывод при username = "admin", password = "wrong":
Wrong passwordИтоги: инструкции if-else в Python
Вот всё, что вы узнали об условиях в Python:
| Понятие | Синтаксис | Назначение |
|---|---|---|
if | if condition: | Выполнить код, если условие равно True |
else | else: | Выполнить код, если условие if равно False |
elif | elif condition: | Проверить дополнительные условия |
| Вложенный if | if внутри if | Многоуровневые решения |
| Тернарный оператор | x if cond else y | if-else в одну строку для простых значений |
Главные правила:
if, elif и else заканчивается двоеточием (:)True==, а не = (это присваивание)Что дальше?
Теперь, когда вы умеете принимать решения, пора научить программы повторять действия. В следующем уроке, [Цикл for в Python](/python/python-for-loops), вы узнаете, как перебирать списки, диапазоны и строки, чтобы обрабатывать данные, не переписывая один и тот же код снова и снова.