Проверка нескольких условий

We use cookies. Read the Privacy and Cookie Policy

Цепочки if-elif-else эффективны, но они подходят только в том случае, если истинным должно быть только одно условие. Как только Python находит выполня­ющееся условие, все остальные проверки пропускаются. Такое поведение достаточно эффективно, потому что оно позволяет проверить одно конкретное условие.

Однако иногда бывает важно проверить все условия, представляющие интерес. В таких случаях следует применять серии простых команд if без блоков elif или else. Такое решение уместно, когда истинными могут быть сразу несколько условий и вы хотите отреагировать на все истинные условия.

Вернемся к примеру с пиццей. Если кто-то закажет пиццу с двумя дополнениями, программа должна обработать оба дополнения:

toppings.py

(1) requested_toppings = ['mushrooms', 'extra cheese']

(2)if 'mushrooms' in requested_toppings:

. .print("Adding mushrooms.")

(3)if 'pepperoni' in requested_toppings:

. .print("Adding pepperoni.")

(4)if 'extra cheese' in requested_toppings:

. .print("Adding extra cheese.")

. .

print(" Finished making your pizza!")

Обработка начинается в точке (1) со списка, содержащего заказанные дополнения. Команды if в точке (2) и (3) проверяют, включает ли заказ конкретные дополнения — грибы и пепперони, и если включает — выводят подтверждающее сообщение. Проверка в точке (3) реализована простой командой if, а не elif или else, поэтому условие будет проверяться независимо от того, было ли предыдущее условие истинным или ложным. Код в точке (4) проверяет, была ли заказана дополнительная порция сыра, независимо от результата первых двух проверок. Эти три независимых условия проверяются при каждом выполнении программы.

Так как в этом коде проверяются все возможные варианты дополнений, в заказ будут включены два дополнения из трех:

Adding mushrooms.

Adding extra cheese.

Finished making your pizza!

Если бы в программе использовался блок if-elif-else, код работал бы неправильно, потому что он прерывал работу после обнаружения первого истинного условия. Вот как это выглядело бы:

requested_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toppings:

print("Adding mushrooms.")

elif 'pepperoni' in requested_toppings:

print("Adding pepperoni.")

elif 'extra cheese' in requested_toppings:

print("Adding extra cheese.")

print(" Finished making your pizza!")

Первое же проверяемое условие (для 'mushrooms') оказывается истинным. Однако значения 'extra cheese' и 'pepperoni' после этого не проверяются, потому что в цепочках if-elif-else после обнаружения первого истинного условия все остальные условия пропускаются. В результате в пиццу будет включено только первое из заказанных дополнений:

Adding mushrooms.

Finished making your pizza!

Итак, если вы хотите, чтобы в программе выполнялся только один блок кода, — используйте цепочку if-elif-else. Если же выполняться должны несколько блоков, используйте серию независимых команд if.

Упражнения

5-3. Цвета 1: представьте, что в вашей компьютерной игре только что был подбит корабль пришельцев. Создайте переменную с именем alien_color и присвойте ей значение ‘green’, ‘yellow’ или ‘red’.

• Напишите команду if для проверки того, что переменная содержит значение ‘green’. Если условие истинно, выведите сообщение о том, что игрок только что заработал 5 очков.

• Напишите одну версию программы, в которой условие if выполняется, и другую версию, в которой оно не выполняется. (Во второй версии никакое сообщение выводиться не должно.)

5-4. Цвета 2: выберите цвет, как это было сделано в упражнении 5-3, и напишите цепочку if-else.

• Напишите команду if для проверки того, что переменная содержит значение ‘green’. Если условие истинно, выведите сообщение о том, что игрок только что заработал 5 очков.

• Если переменная содержит любое другое значение, выведите сообщение о том, что игрок только что заработал 10 очков.

• Напишите одну версию программы, в которой выполняется блок if, и другую версию, в которой выполняется блок else.

5-5. Цвета 3: преобразуйте цепочку if-else из упражнения 5-4 в цепочку if-elif-else.

• Если переменная содержит значение 'green’, выведите сообщение о том, что игрок только что заработал 5 очков.

• Если переменная содержит значение 'yellow’, выведите сообщение о том, что игрок только что заработал 10 очков.

• Если переменная содержит значение 'red’, выведите сообщение о том, что игрок только что заработал 15 очков.

• Напишите три версии программы и проследите за тем, чтобы для каждого цвета пришельца выводилось соответствующее сообщение.

5-6. Периоды жизни: напишите цепочку if-elif-else для определения периода жизни человека. Присвойте значение переменной age, а затем выведите сообщение.

• Если значение меньше 2 — младенец.

• Если значение больше или равно 2, но меньше 4 — малыш.

• Если значение больше или равно 4, но меньше 13 — ребенок.

• Если значение больше или равно 13, но меньше 20 — подросток.

• Если значение больше или равно 20, но меньше 65 — взрослый.

• Если значение больше или равно 65 — пожилой человек.

5-7. Любимый фрукт: составьте список своих любимых фруктов. Напишите серию независимых команд if для проверки того, присутствуют ли некоторые фрукты в списке.

• Создайте список трех своих любимых фруктов и назовите его favorite_fruits.

• Напишите пять команд if. Каждая команда должна проверять, входит ли определенный тип фрукта в список. Если фрукт входит в список, блок if должен выводить сообщение вида «You really like bananas!».