Главная страница
Навигация по странице:

  • УПРАЖНЕНИЯ 5.8. Hello Admin

  • 5.9. Без пользователей

  • 5.10. Проверка имен пользователей

  • 5.11. Порядковые числительные

  • УПРАЖНЕНИЯ 5.12. Стиль оформления команд if

  • Мэтиз. Изучаем Python. Crash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g


    Скачать 6.2 Mb.
    НазваниеCrash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g
    Дата28.06.2022
    Размер6.2 Mb.
    Формат файлаpdf
    Имя файлаМэтиз. Изучаем Python.pdf
    ТипДокументы
    #618322
    страница12 из 52
    1   ...   8   9   10   11   12   13   14   15   ...   52
    toppings.py
    requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
    for requested_topping in requested_toppings:
    print(f"Adding {requested_topping}.")
    print("\nFinished making your pizza!")

    Использование команд if со списками 101
    Вывод достаточно тривиален, поэтому код сводится к простому циклу for
    :
    Adding mushrooms.
    Adding green peppers.
    Adding extra cheese.
    Finished making your pizza!
    А если в пиццерии вдруг закончится зеленый перец? Команда if в цикле for может правильно обработать эту ситуацию:
    requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
    for requested_topping in requested_toppings:

    if requested_topping == 'green peppers':
    print("Sorry, we are out of green peppers right now.")

    else:
    print(f"Adding {requested_topping}.")
    print("\nFinished making your pizza!")
    На этот раз программа проверяет каждый заказанный элемент перед добавлением его к пицце. В точке  программа проверяет, заказал ли клиент зеленый перец, и если заказал, выводит сообщение о том, что этого дополнения нет. Блок else в точке  гарантирует, что все другие дополнения будут включены в заказ.
    Из выходных данных видно, что все заказанные топпинги обрабатываются пра- вильно:
    Adding mushrooms.
    Sorry, we are out of green peppers right now.
    Adding extra cheese.
    Finished making your pizza!
    Проверка наличия элементов в списке
    Для всех списков, с которыми мы работали до сих пор, действовало одно простое предположение: мы считали, что в каждом списке есть хотя бы один элемент. Скоро мы предоставим пользователю возможность вводить информацию, хранящуюся в списке, поэтому мы уже не можем предполагать, что при каждом выполнении цикла в списке есть хотя бы один элемент. В такой ситуации перед выполнением цикла for будет полезно проверить, есть ли в списке хотя бы один элемент.
    Проверим, есть ли элементы в списке заказанных топпингов, перед изготовлением пиццы. Если список пуст, программа предлагает пользователю подтвердить, что он хочет базовую пиццу без топпингов. Если список не пуст, пицца готовится так же, как в предыдущих примерах:

    102 Глава 5 • Команды if

    requested_toppings = []

    if requested_toppings:
    for requested_topping in requested_toppings:
    print(f"Adding {requested_topping}.")
    print("\nFinished making your pizza!")

    else:
    print("Are you sure you want a plain pizza?")
    На этот раз мы начинаем с пустого списка заказанных топпингов в точке . Вместо того чтобы сразу переходить к циклу for
    , программа выполняет проверку в точ- ке . Когда имя списка используется в условии 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(f"Adding {requested_topping}.")

    else:
    print(f"Sorry, we don't have {requested_topping}.")
    print("\nFinished making your pizza!")

    Использование команд if со списками 103
    В точке  определяется список доступных топпингов к пицце. Стоит заметить, что если в пиццерии используется постоянный ассортимент топпингов, этот спи- сок можно реализовать в виде кортежа. В точке  создается список топпингов, заказанных клиентом. Обратите внимание на необычный заказ 'french fries'
    В точке  программа перебирает список заказанных топпингов. Внутри цикла про- грамма сначала проверяет, что каждый заказанный топпинг присутствует в списке доступных топпингов . Если топпинг доступен, он добавляется в пиццу. Если заказанный топпинг не входит в список, выполняется блок else
    . Блок else вы- водит сообщение о том, что топпинг недоступен.
    С этим синтаксисом программа выдает четкий, содержательный вывод:
    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
    Jaden, thank you for logging in again».
    5.9. Без пользователей: добавьте в hello_admin .py команду if
    , которая проверит, что список пользователей не пуст.
    • Если список пуст, выведите сообщение «We need to ind some users!».
    • Удалите из списка все имена пользователей и убедитесь в том, что программа выво- дит правильное сообщение.
    5.10. Проверка имен пользователей: выполните следующие действия для создания про- граммы, моделирующей проверку уникальности имен пользователей.
    • Создайте список current_users
    , содержащий пять и более имен пользователей.
    • Создайте другой список, new_users
    , содержащий пять имен пользователей. Убеди- тесь в том, что одно или два новых имени также присутствуют в списке current_
    users
    • Переберите список new_users и для каждого имени в этом списке проверьте, было ли оно использовано ранее. Если имя уже использовалось, выведите сообщение о том, что пользователь должен выбрать новое имя. Если имя не использовалось, выведите сообщение о его доступности.

    104 Глава 5 • Команды if
    • Проследите за тем, чтобы сравнение выполнялось без учета регистра символов.
    Если имя 'John'
    уже используется, в регистрации имени 'JOHN'
    следует отказать.
    (Для этого необходимо создать копию current_users
    , содержащую версию всех су- ществующих имен пользователей в нижнем регистре.)
    5.11. Порядковые числительные: порядковые числительные в английском языке заканчи- ваются суффиксом th (кроме 1st, 2nd и 3rd).
    • Сохраните числа от 1 до 9 в списке.
    • Переберите элементы списка.
    • Используйте цепочку if-elif-else в цикле для вывода правильного окончания чис- лительного для каждого числа. Программа должна выводить числительные "1st
    2nd
    3rd
    4th
    5th
    6th
    7th
    8th
    9th"
    , причем каждый результат должен располагаться в от- дельной строке.
    Оформление команд if
    Во всех примерах этой главы применялись правила стилевого оформления. В PEP 8 приведена только одна рекомендация, касающаяся проверки условий: заключать операторы сравнения (такие, как
    ==
    ,
    >=
    ,
    <=
    и т. д.) в одиночные пробелы. Напри- мер, запись if age < 4:
    лучше, чем:
    if age<4:
    Пробелы не влияют на интерпретацию вашего кода Python; они только упрощают чтение кода вами и другими разработчиками.
    УПРАЖНЕНИЯ
    5.12. Стиль оформления команд if: проанализируйте программы, написанные в этой главе, и проверьте, правильно ли вы оформляли условия.
    5.13. Ваши идеи: к этому моменту вы уже стали более квалифицированным программи- стом, чем когда начинали читать книгу. Теперь вы лучше представляете, как в программах моделируются явления реального мира, и сможете сами придумать задачи, которые будут решаться в ваших программах. Запишите несколько задач, которые вам хотелось бы ре- шить по мере роста вашего профессионального мастерства. Может быть, это какие-то ком- пьютерные игры, задачи анализа наборов данных или веб-приложения?
    Итоги
    В этой главе вы научились писать условия, результатом которых всегда является логическое значение (
    True или
    False
    ). Вы научились писать простые команды if
    , цепочки if
    - else и цепочки if
    - elif
    - else
    . Вы начали использовать эти структуры

    Итоги 105
    для выявления конкретных условий, которые необходимо проверить, и проверки этих условий в ваших программах. Вы узнали, как обеспечить специальную обра- ботку некоторых элементов в списке, с сохранением эффективности циклов 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

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

    108 Глава 6 • Словари
    Теперь программа может получить значение, связанное с любым из ключей в alien_0
    : color или points
    . Если игрок сбивает корабль пришельца, то для полу- чения количества заработанных им очков может использоваться код следующего вида:
    alien_0 = {'color': 'green', 'points': 5}

    new_points = alien_0['points']

    print(f"You just earned {new_points} points!")
    После того как словарь будет определен, код  извлекает значение, связанное с ключом 'points'
    , из словаря. Затем это значение сохраняется в переменной new_points
    . Строка  преобразует целое значение в строку и выводит сообщение с количеством заработанных очков:
    You just earned 5 points!
    Если этот код будет выполняться каждый раз, когда игрок сбивает очередного при- шельца, программа будет получать правильное количество очков.
    Добавление новых пар «ключ-значение»
    Словари относятся к динамическим структурам данных: в словарь можно в любой момент добавлять новые пары «ключ-значение». Для этого указывается имя сло- варя, за которым в квадратных скобках следует новый ключ с новым значением.
    Добавим в словарь alien_0
    еще два атрибута: координаты x
    и y
    для вывода изобра- жения пришельца в определенной позиции экрана. Допустим, пришелец должен отображаться у левого края экрана, в 25 пикселах от верхнего края. Так как система экранных координат обычно располагается в левом верхнем углу, для размещения пришельца у левого края координата x
    должна быть равна 0, а координата y
    — 25:
    alien.py
    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}

    Работа со словарями 109
    Окончательная версия словаря содержит четыре пары «ключ-значение». Первые две определяют цвет и количество очков, а другие две — координаты.
    ПРИМЕЧАНИЕ В версии Python 3 .7 словари сохраняют исходный порядок добавления пар «ключ-значение» . Когда вы выводите словарь или перебираете его элементы, вы будете получать элементы в том порядке, в каком они добавлялись в словарь .
    Создание пустого словаря
    В некоторых ситуациях бывает удобно (или даже необходимо) начать с пустого словаря, а затем добавлять в него новые элементы. Чтобы начать заполнение пу- стого словаря, определите словарь с пустой парой фигурных скобок, а затем добав- ляйте новые пары «ключ-значение» (каждая пара в отдельной строке). Например, вот как строится словарь alien_0
    :
    alien.py
    alien_0 = {}
    alien_0['color'] = 'green'
    alien_0['points'] = 5
    print(alien_0)
    Программа определяет пустой словарь alien_0
    , после чего добавляет в него зна- чения для цвета и количества очков. В результате создается словарь, который ис- пользовался в предыдущих примерах:
    {'color': 'green', 'points': 5}
    Обычно пустые словари используются при хранении данных, введенных пользова- телем, или при написании кода, автоматически генерирующего большое количество пар «ключ-значение».
    Изменение значений в словаре
    Чтобы изменить значение в словаре, укажите имя словаря с ключом в квадратных скобках, а затем новое значение, которое должно быть связано с этим ключом. До- пустим, в процессе игры цвет пришельца меняется с зеленого на желтый:
    alien.py
    alien_0 = {'color': 'green'}
    print(f"The alien is {alien_0['color']}.")
    alien_0['color'] = 'yellow'
    print(f"The alien is now {alien_0['color']}.")

    110 Глава 6 • Словари
    Сначала определяется словарь alien_0
    , который содержит только цвет пришельца; затем значение, связанное с ключом 'color'
    , меняется на 'yellow'
    . Из выходных данных видно, что цвет пришельца действительно сменился с зеленого на желтый:
    The alien is green.
    The alien is now yellow.
    Рассмотрим более интересный пример: отслеживание позиции пришельца, который может двигаться с разной скоростью. Мы сохраним значение, представляющее текущую скорость пришельца, и используем его для определения величины гори- зонтального смещения:
    alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
    print(f"Original position: {alien_0['x_position']}")
    # Пришелец перемещается вправо.
    # Вычисляем величину смещения на основании текущей скорости.

    if alien_0['speed'] == 'slow':
    x_increment = 1
    elif alien_0['speed'] == 'medium':
    x_increment = 2
    else:
    # Пришелец двигается быстро.
    x_increment = 3
    # Новая позиция равна сумме старой позиции и приращения.

    alien_0['x_position'] = alien_0['x_position'] + x_increment print(f"New position: {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

    Работа со словарями
    1   ...   8   9   10   11   12   13   14   15   ...   52


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