Книга «Изучаем Python»



Pdf көрінісі
бет67/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   63   64   65   66   67   68   69   70   ...   238
Байланысты:
2 5343781172763690906

УПРАЖНЕНИЯ

6-4 . Глоссарий 2: теперь, когда вы знаете, как перебрать элементы словаря, упростите код 

из упражнения 6-3, заменив серию команд print циклом, перебирающим ключи и значения 

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

терминов Python . При повторном запуске программы новые слова и значения должны быть 

автоматически включены в вывод .

6-5 . Реки: создайте словарь с тремя большими реками и странами, по которым протекает 

каждая река . Одна из возможных пар «ключ—значение» — ‘nile’: ‘egypt’ .

•  Используйте цикл для вывода сообщения с упоминанием реки и страны — например, 

«The Nile runs through Egypt .»

•  Используйте цикл для вывода названия каждой реки, включенной в словарь .

•  Используйте цикл для вывода названия каждой страны, включенной в словарь .

6-6 . Опрос: Возьмите за основу код favorite_languages .py (с . 106) .

•  Создайте список  людей, которые должны участвовать  в опросе по поводу  любимо-

го языка программирования . Включите некоторые имена, которые уже присутствуют 

в списке, и некоторые имена, которых в списке еще нет .

•  Переберите список людей, которые должны участвовать в опросе . Если они уже прош-

ли опрос, выведите сообщение с благодарностью за участие . Если они еще не про-

ходили опрос, выведите сообщение с предложением принять участие .

Вложение


Иногда нужно сохранить множество словарей в списке или сохранить спи-

сок как значение элемента словаря. Создание сложных структур такого рода 

 называется вложением. Вы можете вложить множество словарей в список, 

список элементов в словарь или даже словарь внутрь другого словаря. Как 

 наглядно показывают следующие примеры, вложение — чрезвычайно мощный 

механизм.

Список словарей

Словарь 


alien_0

 содержит разнообразную информацию об одном пришельце, но 

в нем нет места для хранения информации о втором пришельце, не говоря уже 

о целом экране, забитом пришельцами. Как смоделировать флот вторжения? На-

пример, можно создать список пришельцев, в котором каждый элемент представ-

ляет собой словарь с информацией о пришельце. Следующий код строит список 

из трех пришельцев:

aliens.py

alien_0 = {'color': 'green', 'points': 5}

alien_1 = {'color': 'yellow', 'points': 10}

alien_2 = {'color': 'red', 'points': 15}




114    Глава 6  •  Словари

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("Total number of aliens: " + str(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



Все пришельцы обладают одинаковыми характеристиками, но Python рассматри-

вает каждого пришельца как отдельный объект, что позволяет изменять атрибуты 

каждого владельца по отдельности.

Как работать с таким множеством? Представьте, что в этой игре некоторые при-

шельцы изменяют цвет и начинают двигаться быстрее. Когда приходит время 



Вложение    115

смены цветов, мы можем воспользоваться циклом 

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

    elif alien['color'] == 'yellow':

        alien['color'] = 'red'

        alien['speed'] = 'fast'

        alien['points'] = 15

Решение с хранением словарей в списке достаточно часто встречается тогда, когда 

каждый словарь содержит разные атрибуты одного объекта. Например, вы можете 



116    Глава 6  •  Словари

создать словарь для каждого пользователя сайта, как это было сделано в програм-

ме 

user .py


 на с. 108, и сохранить отдельные словари в списке с именем 

users


. Все 

словари в списке должны иметь одинаковую структуру, чтобы вы могли перебрать 

список и выполнить с каждым объектом словаря одни и те же операции.

Список в словаре

Иногда бывает удобно поместить список в словарь, вместо того чтобы помещать 

словарь в список. Представьте, как бы вы описали в программе заказанную пиццу. 

Если ограничиться только списком, сохранить удастся разве что список дополне-

ний к пицце. При использовании словаря список дополнений может быть всего 

лишь одним аспектом описания пиццы.

В следующем примере для каждой пиццы сохраняются два вида информации: тип 

теста и список дополнений. Список дополнений представляет собой значение, 

связанное с ключом 

'toppings'

. Чтобы использовать элементы в списке, нужно 

указать имя словаря и ключ 

'toppings'

, как и для любого другого значения в сло-

варе. Вместо одного значения будет получен список дополнений:





Достарыңызбен бөлісу:
1   ...   63   64   65   66   67   68   69   70   ...   238




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

    Басты бет