92 Глава 5 • Команды if
else:
print("Your admission cost is $10.")
Условие
if
в точке проверяет, что возраст посетителя меньше 4 лет. Если условие
истинно, то программа выводит соответствующее сообщение, и Python пропускает
остальные проверки. Строка
elif
в точке в действительности является еще одной
проверкой
if
, которая выполняется только в том случае, если предыдущая проверка
завершилась неудачей. В этом месте цепочки известно, что возраст посетителя не
меньше 4 лет, потому что первое условие было ложным. Если посетителю меньше
18 лет, программа выводит соответствующее сообщение, и Python пропускает блок
else
. Если ложны оба условия —
if
и
elif
, то Python выполняет код в блоке
else
в точке .
В данном примере условие дает ложный результат, поэтому его блок не выпол-
няется. Однако второе условие оказывается истинным (12 меньше 18), поэтому код
будет выполнен. Вывод состоит из одного сообщения с ценой билета:
Your admission cost is $5.
При любом значении возраста больше 17 первые два условия ложны. В таких си-
туациях блок
else
будет выполнен, и цена билета составит $10.
Вместо того чтобы выводить сообщение с ценой билета в блоках
if
-
elif
-
else
,
лучше использовать другое, более компактное решение: присвоить цену в цепочке
if
-
elif
-
else
, а затем добавить одну команду
print
после выполнения цепочки:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
else:
price = 10
print("Your admission cost is $" + str(price) + ".")
Строки , и присваивают значение
price
в зависимости от значения
age
,
как и в предыдущем примере. После присваивания цены в цепочке
if
-
elif
-
else
отдельная команда
print
без отступа использует это значение для вывода со-
общения с ценой билета.
Этот пример выводит тот же результат, что и предыдущий, но цепочка
if
-
elif
-
else
имеет более четкую специализацию. Вместо того чтобы определять цену и выво-
дить сообщения, она просто определяет цену билета. Кроме повышения эффектив-
ности, у этого кода есть дополнительное преимущество: лучшая изменяемость.
Чтобы изменить текст выходного сообщения, достаточно будет отредактировать
всего одну команду
print
— вместо трех разных команд.
Серии
блоков elif
Код может содержать сколько угодно блоков
elif
. Например, если парк аттракци-
онов введет особую скидку для пожилых посетителей, вы можете добавить в свой
Команды if
93
код еще одну проверку для определения того, распространяется ли скидка на те-
кущего посетителя. Допустим, посетители с возрастом 65 и выше платят половину
от обычной цены билета, или $5:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 10
else:
price = 5
print("Your admission cost is $" + str(price) + ".")
Бульшая часть кода осталась неизменной. Второй блок
elif
в точке теперь
убеждается в том, что посетителю меньше 65 лет, прежде чем назначить ему пол-
ную цену билета $10. Обратите внимание: значение, присвоенное в блоке
else
,
должно быть заменено на $5, потому что до этого блока доходят только посетители
с возрастом 65 и выше.
Отсутствие блока else
Python не требует, чтобы цепочка
if
-
elif
непременно завершалась блоком
else
.
Иногда блок
else
удобен; в других случаях бывает нагляднее использовать допол-
нительную секцию
elif
для обработки конкретного условия:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 10
elif age >= 65:
price = 5
print("Your admission cost is $" + str(price) + ".")
Блок
elif
в точке назначает цену $5, если возраст посетителя равен 65 и выше;
смысл такого кода более понятен, чем у обобщенного блока
else
. С таким измене-
нием выполнение каждого блока возможно только при истинности конкретного
условия.
Блок
else
«универсален»: он обрабатывает все условия, не подходящие ни под одну
конкретную проверку
if
или
elif
, причем в эту категорию иногда могут попасть
недействительные или даже вредоносные данные. Если у вас имеется завершающее
конкретное условие, лучше используйте завершающий блок
elif
и опустите блок
else
. В этом случае вы можете быть уверены в том, что ваш код будет выполняться
только в правильных условиях.
94 Глава 5 • Команды if
Проверка нескольких условий
Цепочки
if
-
elif
-
else
эффективны, но они подходят только в том случае, если ис-
тинным должно быть только одно условие. Как только Python находит выполня-
ющееся условие, все остальные проверки пропускаются. Такое поведение доста-
точно эффективно, потому что оно позволяет проверить одно конкретное условие.
Однако иногда бывает важно проверить все условия, представляющие интерес.
В таких случаях следует применять серии простых команд
if
без блоков
elif
или
else
. Такое решение уместно, когда истинными могут быть сразу несколько усло-
вий и вы хотите отреагировать на все истинные условия.
Вернемся к примеру с пиццей. Если кто-то закажет пиццу с двумя дополнениями,
программа должна обработать оба дополнения:
Достарыңызбен бөлісу: