Выбрать главу

Проверка наличия элементов в списке

Для всех списков, с которыми мы работали до сих пор, действовало одно простое предположение: мы считали, что в каждом списке есть хотя бы один элемент. Скоро мы предоставим пользователю возможность вводить информацию, хранящуюся в списке, поэтому мы уже не можем предполагать, что при каждом выполнении цикла в списке есть хотя бы один элемент. В такой ситуации перед выполнением цикла for будет полезно проверить, есть ли в списке хотя бы один элемент.

Проверим, есть ли элементы в списке заказанных дополнений, перед изготовлением пиццы. Если список пуст, программа предлагает пользователю подтвердить, что он хочет базовую пиццу без дополнений. Если список не пуст, пицца готовится так же, как в предыдущих примерах:

(1) requested_toppings = []

(2)if requested_toppings:

for requested_topping in requested_toppings:

print("Adding " + requested_topping + ".")

print("\nFinished making your pizza!")

(3)else:

. .print("Are you sure you want a plain pizza?")

На этот раз мы начинаем с пустого списка заказанных дополнений в точке (1) . Вместо того чтобы сразу переходить к циклу for, программа выполняет проверку в точке (2). Когда имя списка используется в условии if, Python возвращает True, если список содержит хотя бы один элемент; если список пуст, возвращается значение False. Если requested_toppings проходит проверку условия, выполняется тот же цикл for, который мы использовали в предыдущем примере. Если же условие ложно, то программа выводит сообщение, которое предлагает клиенту подтвердить, действительно ли он хочет получить базовую пиццу без дополнений (3).

В данном примере список пуст, поэтому выводится сообщение:

Are you sure you want a plain pizza?

Если в списке есть хотя бы один элемент, в выходные данные включается каждое заказанное дополнение.

Множественные списки

Посетители способны заказать что угодно, особенно когда речь заходит о дополнениях к пицце. Что если клиент захочет положить на пиццу картофель фри? Списки и команды if позволят вам убедиться в том, что входные данные имеют смысл, прежде чем обрабатывать их.

Давайте проверим наличие нестандартных дополнений перед тем, как готовить пиццу. В следующем примере определяются два списка. Первый список содержит перечень доступных дополнений, а второй — список дополнений, заказанных клиентом. На этот раз каждый элемент из requested_toppings проверяется по списку доступных дополнений перед добавлением в пиццу:

(1) available_toppings = ['mushrooms', 'olives', 'green peppers',

. . . . . . . . . . 'pepperoni', 'pineapple', 'extra cheese']

(2)requested_toppings = ['mushrooms', 'french fries', 'extra cheese']

(3)for requested_topping in requested_toppings:

(4) . .if requested_topping in available_toppings:

. . . .print("Adding " + requested_topping + ".")

(5) . .else:

. . . .print("Sorry, we don't have " + requested_topping + ".")

. . . .

print("\nFinished making your pizza!")

В точке (1) определяется список доступных дополнений к пицце. Стоит заметить, что если в пиццерии используется постоянный ассортимент дополнений, этот список можно реализовать в виде кортежа. В точке (2) создается список дополнений, заказанных клиентом. Обратите внимание на необычный заказ 'french fries'. В точке (3) программа перебирает список заказанных дополнений. Внутри цикла программа сначала проверяет, что каждое заказанное дополнение присутствует в списке доступных дополнений (4). Если дополнение доступно, оно добавляется в пиццу. Если заказанное дополнение не входит в список, выполняется блок else (5). Блок else выводит сообщение о том, что дополнение недоступно.

С этим синтаксисом программа выдает четкий, содержательный вывод:

Adding mushrooms.

Sorry, we don't have french fries.

Adding extra cheese.

Finished making your pizza!

Всего в нескольких строках кода нам удалось эффективно решить вполне реальную проблему!

Упражнения

5-8. Hello Admin: создайте список из пяти и более имен пользователей, включающий имя ‘admin’. Представьте, что вы пишете код, который выводит приветственное сообщение для каждого пользователя после его входа на сайт. Переберите элементы списка и выведите сообщение для каждого пользователя.

• Для пользователя с именем 'admin’ выведите особое сообщение — например: «Hello admin, would you like to see a status report?»

• В остальных случаях выводите универсальное приветствие — например: «Hello Eric, thank you for logging in again».

5-9. Без пользователей: добавьте в hello_admin.py команду if, которая проверит, что список пользователей не пуст.

• Если список пуст, выведите сообщение: «We need to find some users!»

• Удалите из списка все имена пользователей и убедитесь в том, что программа выводит правильное сообщение.

5-10. Проверка имен пользователей: выполните следующие действия для создания программы, моделирующей проверку уникальности имен пользователей.