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



Pdf көрінісі
бет62/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   58   59   60   61   62   63   64   65   ...   238
Пара «ключ—значение» представляет собой данные, связанные друг с другом. Если 

вы укажете ключ, то Python вернет значение, связанное с этим ключом. Ключ отде-

ляется от значения двоеточием, а отдельные пары разделяются запятыми. В словаре 

может храниться любое количество пар «ключ—значение».

Простейший словарь содержит ровно одну пару «ключ—значение», как в следу-

ющей измененной версии словаря 

alien_0

:

alien_0 = {'color': 'green'}



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

alien_0


а именно — его цвет. Строка 

'color'

 является ключом в словаре; с этим ключом 

связано значение 

'green'


.

Обращение к значениям в словаре

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

в квадратных скобках:

alien_0 = {'color': 'green'}

print(alien_0['color'])

Эта конструкция возвращает значение, связанное с ключом 

'color'


, из словаря 

alien_0


:

green


Количество пар «ключ—значение» в словаре не ограничено. Например, вот как 

выглядит исходный словарь 

alien_0

 с двумя парами «ключ—значение»:

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

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

в 

alien_0


color


 или 

points


. Если игрок сбивает корабль пришельца, для получения 

заработанных им очков может использоваться код следующего вида:

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

new_points = alien_0['points']



print("You just earned " + str(new_points) + " points!")




Работа со словарями    103

После того как словарь будет определен, код  извлекает значение, связанное 

с ключом 

'points'


, из словаря. Затем это значение сохраняется в переменной 

new_points

. Строка  преобразует целое значение в строку и выводит сообщение 

с количеством заработанных очков:

You just earned 5 points!

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

шельца, программа будет получать правильное количество очков.

Добавление новых пар «ключ—значение»

Словари относятся к динамическим структурам данных: в словарь можно в любой 

момент добавлять новые пары «ключ—значение». Для этого указывается имя сло-

варя, за которым в квадратных скобках следует новый ключ с новым значением.

Добавим в словарь 

alien_0

 еще два атрибута: координаты 

x

 и 


y

 для вывода изобра-

жения пришельца в определенной позиции экрана. Допустим, пришелец должен 

отображаться у левого края экрана, в 25 пикселах от верхнего края. Так как система 

экранных координат обычно располагается в левом верхнем углу, для размещения 

пришельца у левого края координата 

x

 должна быть равна 0, а координата 



y

 — 25:


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

print(alien_0)

alien_0['x_position'] = 0



alien_0['y_position'] = 25

print(alien_0)

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

ранее. После этого выводится «снимок» текущего состояния словаря. В точке  

в словарь добавляется новая пара «ключ—значение»: ключ 

'x_position'

 и значе-

ние 

0

. То же самое делается для ключа 



'y_position'

 в точке . При выводе изме-

ненного словаря мы видим две дополнительные пары «ключ—значение»:

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

{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}

Окончательная версия словаря содержит четыре пары «ключ—значение». Первые 

две определяют цвет и количество очков, а другие две — координаты. Обратите 

внимание: порядок пар «ключ—значение» не соответствует порядку их добавления. 

Python не интересует, в каком порядке добавлялись пары; важна лишь связь между 

каждым ключом и его значением.

Создание пустого словаря

В некоторых ситуациях бывает удобно (или даже необходимо) начать с пустого 

словаря, а затем добавлять в него новые элементы. Чтобы начать заполнение пу-

стого словаря, определите словарь с пустой парой фигурных скобок, а затем добав-

ляйте новые пары «ключ—значение» (каждая пара в отдельной строке). Например, 

вот как строится словарь alien_0:




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

alien_0 = {}

alien_0['color'] = 'green'

alien_0['points'] = 5

print(alien_0)

Программа определяет пустой словарь 

alien_0

, после чего добавляет в него зна-

чения для цвета и количества очков. В результате создается словарь, который ис-

пользовался в предыдущих примерах:

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

Обычно пустые словари используются при хранении данных, введенных пользова-

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

пар «ключ—значение».

Изменение значений в словаре

Чтобы изменить значение в словаре, укажите имя словаря с ключом в квадратных 

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

пустим, в процессе игры цвет пришельца меняется с зеленого на желтый:

alien_0 = {'color': 'green'}

print("The alien is " + alien_0['color'] + ".")

alien_0['color'] = 'yellow'

print("The alien is now " + alien_0['color'] + ".")

Сначала определяется словарь 

alien_0


, который содержит только цвет пришельца; 

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

'color'

, меняется на 

'yellow'

. Из выходных 

данных видно, что цвет пришельца действительно сменился с зеленого на желтый:

The alien is green.

The alien is now yellow.

Рассмотрим более интересный пример: отслеживание позиции пришельца, который 

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

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

зонтального смещения:

alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}

print("Original x-position: " + str(alien_0['x_position']))

# Пришелец перемещается вправо.

# Вычисляем величину смещения на основании текущей скорости.

if alien_0['speed'] == 'slow':



    x_increment = 1

elif alien_0['speed'] == 'medium':

    x_increment = 2

else:


    # Пришелец двигается быстро.

    x_increment = 3

# Новая позиция равна сумме старой позиции и приращения.



Работа со словарями    105

alien_0['x_position'] = alien_0['x_position'] + x_increment



print("New x-position: " + str(alien_0['x_position']))

Сначала определяется словарь с исходной позицией (координаты 

x

 и 


y

) и ско-


ростью 

'medium'


. Значения цвета и количества очков для простоты опущены, но 

с ними этот пример работал бы точно так же. Также выводится исходное значение 

x_position

.

В точке  цепочка 



if

-

elif



-

else


 определяет, на какое расстояние пришелец должен 

переместиться вправо; полученное значение сохраняется в переменной 

x_increment

Если пришелец двигается медленно (



'slow'

), то он перемещается на одну единицу 

вправо; при средней скорости (

'medium'


) он перемещается на две единицы вправо; 

наконец, при высокой скорости (

'fast'

) он перемещается на три единицы вправо. 



Вычисленное смещение прибавляется к значению 

x_position

 в , а результат со-

храняется в словаре с ключом 

x_position

.

Для пришельца со средней скоростью позиция смещается на две единицы:



Original x-position: 0

New x-position: 2

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

шельца. Например, чтобы превратить пришельца со средней скоростью в быстрого, 

добавьте следующую строку:

alien_0['speed'] = fast

При следующем выполнении кода блок 

if

-



elif

-

else



 присвоит 

x_increment

 большее 

значение.

Удаление пар «ключ—значение»

Когда информация, хранящаяся в словаре, перестает быть ненужной, пару «ключ—

значение» можно полностью удалить при помощи команды 

del


. При вызове до-

статочно передать имя словаря и удаляемый ключ.

Например, в следующем примере из словаря 

alien_0


 удаляется ключ 

'points'


 

вместе со значением:

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

print(alien_0)

del alien_0['points']



print(alien_0)

Строка  приказывает Python удалить ключ 

'points'

 из словаря 

alien_0

, а также 

удалить значение, связанное с этим ключом. Из вывода видно, что ключ 

'points'


 

и его значение 5 исчезли из словаря, но остальные данные остались без измене-

ний:

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



{'color': 'green'}




Достарыңызбен бөлісу:
1   ...   58   59   60   61   62   63   64   65   ...   238




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

    Басты бет