М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет89/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   85   86   87   88   89   90   91   92   ...   334
Байланысты:
Изучаем Python

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'
, как и для любого другого значения в словаре. Вместо 
одного значения будет получен список топпингов:


Достарыңызбен бөлісу:
1   ...   85   86   87   88   89   90   91   92   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет