96
Глава 5 •
Команды if
В данном примере условие
дает ложный результат, поэтому его блок не выпол-
няется. Однако второе условие оказывается истинным (12 меньше 18), поэтому код
будет выполнен. Вывод состоит из одного сообщения с ценой билета:
Your admission cost is $25.
При любом значении возраста больше 17 первые два условия ложны. В таких си-
туациях блок
else
будет выполнен и цена билета составит $40.
Вместо того чтобы выводить сообщение с ценой билета в блоках
if
-
elif
-
else
,
лучше использовать другое, более компактное решение: присвоить цену в цепочке
if
-
elif
-
else
, а затем
добавить одну команду
print
после выполнения цепочки:
age = 12
if age < 4:
❶
price = 0
elif age < 18:
❷
price = 25
else:
❸
price = 40
❹
print(f"Your admission cost is ${price}.")
Строки
,
и
присваивают значение
price
в зависимости от значения
age
,
как и в предыдущем примере. После присваивания цены в цепочке
if
-
elif
-
else
отдельная команда
print
без отступа
использует это значение для вывода со-
общения с ценой билета.
Этот пример выводит тот же результат, что и предыдущий, но цепочка
if
-
elif
-
else
имеет более четкую специализацию. Вместо того чтобы определять цену и выво-
дить сообщения, она просто определяет цену билета. Кроме повышения эффектив-
ности, у этого кода есть дополнительное преимущество: его легче модифицировать.
Чтобы изменить текст выходного сообщения, достаточно будет отредактировать
всего одну команду
print
— вместо трех разных команд.
Серии
блоков elif
Код может содержать сколько угодно блоков
elif
. Например, если парк аттракци-
онов введет особую скидку для пожилых посетителей, вы можете добавить в свой
код еще одну проверку для определения того, распространяется ли скидка на те-
кущего посетителя. Допустим, посетители возрастом 65 и выше платят половину
обычной
цены билета, или $40:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 25
❶
elif age < 65:
Команды if
97
price = 40
❷
else:
price = 20
print(f"Your admission cost is ${price}.")
Большая часть кода осталась неизменной. Второй блок
elif
в точке
теперь
убеждается в том, что посетителю меньше 65 лет, прежде чем назначить ему пол-
ную цену билета $40. Обратите внимание: значение, присвоенное в блоке
else
,
должно быть заменено на $20, потому что до этого блока доходят только посетители
с возрастом 65 и выше.
Отсутствие
блока else
Python не требует, чтобы цепочка
if
-
elif
непременно завершалась блоком
else
.
Иногда блок
else
удобен; иногда бывает лучше использовать дополнительную
секцию
elif
для обработки конкретного условия:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 25
elif age < 65:
price = 40
❶
elif age >= 65:
price = 20
print(f"Your admission cost is ${price}.")
Блок
elif
в точке
назначает цену $20, если возраст посетителя равен 65 и выше;
смысл такого кода более понятен, чем у обобщенного блока
else
. С таким измене-
нием выполнение каждого блока возможно только при истинности конкретного
условия.
Блок
else
«универсален»: он обрабатывает все условия, не подходящие ни под одну
конкретную проверку
if
или
elif
, причем в эту категорию иногда могут попасть
недействительные или даже вредоносные данные. Если у вас имеется завершающее
конкретное условие, лучше используйте завершающий блок
elif
и опустите блок
else
. В этом случае вы можете быть уверены в том, что ваш код будет выполняться
только в правильных условиях.
Проверка
нескольких условий
Цепочки
if
-
elif
-
else
эффективны, но они подходят в том случае, если истинным
должно быть только одно условие. Когда Python находит выполняющееся условие,
все остальные проверки пропускаются. Такое поведение достаточно эффективно,
потому что оно позволяет проверить одно конкретное условие.