aliens.py
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
Вложение
121
❶
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
print(alien)
Сначала создаются три словаря, каждый из которых представляет отдельного при-
шельца. В точке
каждый словарь заносится в список с именем
aliens
. Наконец,
программа перебирает список и выводит каждого пришельца:
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
Конечно, в реалистичном примере будут использоваться более трех пришельцев,
которые будут генерироваться автоматически. В следующем примере функция
range()
создает флот из 30 пришельцев:
# Создание пустого списка для хранения пришельцев.
aliens = []
# Создание 30 зеленых пришельцев.
❶
for alien_number in range(30):
❷
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
❸
aliens.append(new_alien)
# Вывод первых 5 пришельцев:
❹
for alien in aliens[:5]:
print(alien)
print("...")
# Вывод количества созданных пришельцев.
❺
print(f"Total number of aliens: {len(aliens)}")
В начале примера список для хранения всех пришельцев, которые будут созданы,
пуст. В точке
функция
range()
возвращает множество чисел, которое просто
сообщает Python, сколько раз должен повторяться цикл. При каждом выполнении
цикла создается новый пришелец
, который затем добавляется в список
aliens
.
В точке
сегмент используется для вывода первых пяти пришельцев, а в точке
выводится длина списка (для демонстрации того, что программа действительно
сгенерировала весь флот из 30 пришельцев):
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
...
Total number of aliens: 30
122
Глава 6 • Словари
Все пришельцы обладают одинаковыми характеристиками, но Python рассматри-
вает каждого пришельца как отдельный объект, что позволяет изменять атрибуты
каждого владельца по отдельности.
Как работать с таким множеством? Представьте, что в этой игре некоторые при-
шельцы изменяют цвет и начинают двигаться быстрее. Когда приходит время сме-
ны цветов, мы можем воспользоваться циклом
for
и командой
if
для изменения
цвета. Например, чтобы превратить первых трех пришельцев в желтых, двигающих-
ся со средней скоростью и приносящих игроку по 10 очков, можно действовать так:
# Создание пустого списка для хранения пришельцев.
aliens = []
# Создание 30 зеленых пришельцев.
for alien_number in range (0,30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
# Вывод первых 5 пришельцев:
for alien in aliens[0:5]:
print(alien)
print("...")
Чтобы изменить первых трех пришельцев, мы перебираем элементы сегмента,
включающего только первых трех пришельцев. В данный момент все пришельцы
зеленые (
'green'
), но так будет не всегда, поэтому мы пишем команду
if
, которая
гарантирует, что изменяться будут только зеленые пришельцы. Если пришелец
зеленый, то его цвет меняется на желтый (
'yellow'
), скорость — на среднюю
(
'medium'
), а награда увеличивается до 10 очков:
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
...
Цикл можно расширить, добавив блок
elif
для превращения желтых пришельцев
в красных — быстрых и приносящих игроку по 15 очков. Мы не станем приводить
весь код, а цикл выглядит так:
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
Вложение
123
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed'] = 'fast'
alien['points'] = 15
Решение с хранением словарей в списке достаточно часто встречается тогда, когда
каждый словарь содержит разные атрибуты одного объекта. Например, вы можете
создать словарь для каждого пользователя сайта, как это было сделано в програм-
ме
user .py
на с. 114, и сохранить отдельные словари в списке с именем
users
. Все
словари в списке должны иметь одинаковую структуру, чтобы вы могли перебрать
список и выполнить с каждым объектом словаря одни и те же операции.
Список в словаре
Вместо того чтобы помещать словарь в список, иногда бывает удобно поместить
список в словарь. Представьте, как бы вы описали в программе заказанную пиццу.
Если ограничиться только списком, сохранить удастся разве что список топпингов
к пицце. При использовании словаря список топпингов может быть всего лишь
одним аспектом описания пиццы.
В следующем примере для каждой пиццы сохраняются два вида информации: осно-
ва и список топпингов. Список топпингов представляет собой значение, связанное
с ключом
'toppings'
. Чтобы использовать элементы в списке, нужно указать имя
словаря и ключ
'toppings'
, как и для любого другого значения в словаре. Вместо
одного значения будет получен список топпингов:
Достарыңызбен бөлісу: |