Главная страница

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


Скачать 4.68 Mb.
НазваниеКнига Изучаем Python
Дата10.12.2022
Размер4.68 Mb.
Формат файлаpdf
Имя файлаErik_Metiz_Izuchaem_Python_Programmirovanie_igr_vizualizatsia_da.pdf
ТипКнига
#837531
страница12 из 53
1   ...   8   9   10   11   12   13   14   15   ...   53
98 Глава 5 • Команды if в точке . Когда имя списка используется в условии if
, Python возвращает
True
, если список содержит хотя бы один элемент; если список пуст, возвращается значе- ние
False
. Если requested_toppings проходит проверку условия, выполняется тот же цикл for
, который мы использовали в предыдущем примере. Если же условие ложно, то программа выводит сообщение, которое предлагает клиенту подтвердить, действительно ли он хочет получить базовую пиццу без дополнений .
В данном примере список пуст, поэтому выводится сообщение:
Are you sure you want a plain pizza?
Если в списке есть хотя бы один элемент, в выходные данные включается каждое заказанное дополнение.
Множественные списки
Посетители способны заказать что угодно, особенно когда речь заходит о дополне- ниях к пицце. Что если клиент захочет положить на пиццу картофель фри? Списки и команды if позволят вам убедиться в том, что входные данные имеют смысл, прежде чем обрабатывать их.
Давайте проверим наличие нестандартных дополнений перед тем, как готовить пиццу. В следующем примере определяются два списка. Первый список содержит перечень доступных дополнений, а второй — список дополнений, заказанных кли- ентом. На этот раз каждый элемент из requested_toppings проверяется по списку доступных дополнений перед добавлением в пиццу:
 available_toppings = ['mushrooms', 'olives', 'green peppers',
'pepperoni', 'pineapple', 'extra cheese']
 requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
 for requested_topping in requested_toppings:
 if requested_topping in available_toppings:
print("Adding " + requested_topping + ".")
 else:
print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")
В точке  определяется список доступных дополнений к пицце. Стоит заметить, что если в пиццерии используется постоянный ассортимент дополнений, этот спи- сок можно реализовать в виде кортежа. В точке  создается список дополнений, заказанных клиентом. Обратите внимание на необычный заказ 'french fries'
В точке  программа перебирает список заказанных дополнений. Внутри цикла программа сначала проверяет, что каждое заказанное дополнение присутствует в списке доступных дополнений . Если дополнение доступно, оно добавляется в пиццу. Если заказанное дополнение не входит в список, выполняется блок else
.
Блок else выводит сообщение о том, что дополнение недоступно.
С этим синтаксисом программа выдает четкий, содержательный вывод:

Оформление команд if 99
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 . Проверка имен пользователей: выполните следующие действия для создания про- граммы, моделирующей проверку уникальности имен пользователей .
• Создайте список current_users, содержащий пять и более имен пользователей .
• Создайте другой список new_users, содержащий пять и более имен пользователей .
Убедитесь в том, что одно или два новых имени также присутствуют в списке current_
users .
• Переберите список new_users и для каждого имени в этом списке проверьте, было ли оно использовано ранее . Если имя уже использовалось, выведите сообщение о том, что пользователь должен выбрать новое имя . Если имя не использовалось, выведите сообщение о его доступности .
• Проследите за тем, чтобы сравнение выполнялось без учета регистра символов . Если имя 'John’ уже используется, в регистрации имени ‘JOHN’ следует отказать .
5-11 . Порядковые числительные: порядковые числительные в английском языке заканчива- ются суффиксом th (кроме 1st, 2nd и 3rd) .
• Сохраните числа от 1 до 9 в списке .
• Переберите элементы списка .
• Используйте цепочку if-elif-else в цикле для вывода правильного окончания числи- тельного для каждого числа . Программа должна выводить числительные «1st 2nd 3rd
4th 5th 6th 7th 8th 9th», причем каждый результат должен располагаться в отдельной строке .
Оформление команд if
Во всех примерах этой главы применялись правила стилевого оформления. В PEP 8 приведена только одна рекомендация, касающаяся проверки условий: заключать

100 Глава 5 • Команды if операторы сравнения (такие, как
==
,
>=
,
<=
и т. д.) в одиночные пробелы. Напри- мер, запись if age < 4:
лучше, чем:
if age<4:
Пробелы не влияют на интерпретацию вашего кода Python; они только упрощают чтение кода вами и другими разработчиками.
УПРАЖНЕНИЯ
5-12 . Стиль оформления команд if: проанализируйте программы, написанные в этой главе, и проверьте, правильно ли вы оформляли условия .
5-13 . Ваши идеи: к этому моменту вы уже стали более квалифицированным программистом, чем в начале книги . Теперь вы лучше представляете, как в программах моделируются яв- ления реального мира, и сможете сами придумать задачи, которые будут решаться в ваших программах . Запишите несколько задач, которые вам хотелось бы решить с ростом вашего профессионального мастерства . Может быть, это какие-то компьютерные игры, задачи ана- лиза наборов данных или веб-приложения?
Итоги
В этой главе вы научились писать условия, результатом которых всегда яв- ляется логическое значение (
True или
False
.) Вы научились писать простые команды if
, цепочки if
- else и цепочки if
- elif
- else
. Вы начали использовать эти структуры для выявления конкретных условий, которые необходимо про- верить, и проверки этих условий в ваших программах. Вы узнали, как обес- печить специальную обработку некоторых элементов в списке с сохранением эффективности циклов for
. Также мы вернулись к стилевым рекомендациям
Python, с которыми более сложные программы становятся относительно про- стыми для чтения и понимания.
В главе 6 рассматриваются словари Python. Словарь отчасти напоминает список, но он позволяет связывать разные виды информации. Вы научитесь создавать словари, перебирать их элементы, использовать их в сочетании со списками и командами if
. Словари помогут вам моделировать еще более широкий спектр реальных ситуаций.

6
Словари
В этой главе речь пойдет о словарях — структурах данных, предназначенных для объединения взаимосвязанной информации. Вы узнаете, как получить до- ступ к информации, хранящейся в словаре, и как изменить эту информацию.
Так как объем данных в словаре практически безграничен, мы рассмотрим средства перебора данных в словарях. Кроме того, вы научитесь использовать вложенные словари в списках, вложенные списки в словарях и даже словари в других словарях.
Операции со словарями позволяют моделировать всевозможные реальные объекты с большей точностью. Вы узнаете, как создать словарь, описывающий человека, и сохранить в нем сколько угодно информации об этом человеке. В словаре может храниться имя, возраст, место жительства, профессия и любые другие атрибуты.
Вы узнаете, как сохранить любые два вида информации, способные образовать пары: список слов и их значений, список имен людей и их любимых чисел, список гор и их высот и т. д.
Простой словарь
Возьмем игру с инопланетными пришельцами, которые имеют разные цвета и при- носят разное количество очков игроку. В следующем простом словаре хранится информация об одном конкретном пришельце:
alien.py
alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
В словаре alien_0
хранятся два атрибута: цвет (
color
) и количество очков (
points
).
Следующие две команды print читают эту информацию из словаря и выводят ее на экран:
green
5
Работа со словарями, как и большинство других новых концепций, требует опре- деленного опыта. Стоит вам немного поработать со словарями, и вы увидите, как эффективно они работают при моделировании реальных ситуаций.

102 Глава 6 • Словари
Работа со словарями
Словарь в языке Python представляет собой совокупность пар «ключ—значение».
Каждый ключ связывается с некоторым значением, и программа может получить значение, связанное с заданным ключом. Значением может быть число, строка, список и даже другой словарь. Собственно, любой объект, создаваемый в программе
Python, может стать значением в словаре.
В Python словарь заключается в фигурные скобки
{}
, в которых приводится по- следовательность пар «ключ—значение», как в предыдущем примере:
alien_0 = {'color': 'green', 'points': 5}
Пара «ключ—значение» представляет собой данные, связанные друг с другом. Если вы укажете ключ, то 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'}

106 Глава 6 • Словари
ПРИМЕЧАНИЕ
Учтите, что удаление пары «ключ—значение» отменить уже не удастся .
Словарь с однотипными объектами
В предыдущем примере в словаре сохранялась разнообразная информация об одном объекте (пришельце из компьютерной игры). Словарь также может ис- пользоваться для хранения одного вида информации о многих объектах. Допустим, вы хотите провести опрос среди коллег и узнать их любимый язык программиро- вания. Результаты простого опроса удобно сохранить в словаре:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
Пары в словаре в этой записи разбиты по строкам. Ключами являются имена участ- ников опроса, а значениями — выбранные ими языки. Если вы знаете, что для определения словаря потребуется более одной строки, нажмите клавишу Enter по- сле ввода открывающей фигурной скобки. Снабдите следующую строку отступом на один уровень (четыре пробела) и запишите первую пару «ключ—значение», по- ставив за ней запятую. После этого при нажатии Enter ваш текстовый редактор будет автоматически снабжать все последующие пары таким же отступом, как у первой.
Завершив определение словаря, добавьте закрывающую фигурную скобку в новой строке после последней пары «ключ—значение» и снабдите ее отступом на один уровень, чтобы она была выровнена по ключам. За последней парой также рекомен- дуется включить запятую, чтобы при необходимости все было готово к добавлению новой пары «ключ—значение» в следующей строке.
1   ...   8   9   10   11   12   13   14   15   ...   53


написать администратору сайта