Изучаем Python — страница 33 из 61


В этой главе вы научились писать тесты для функций и классов с использованием средств модуля unittest. Вы узнали, как написать класс, наследующий от unittest.TestCase, и как писать тестовые методы для проверки конкретных аспектов поведения ваших функций и классов. Вы научились использовать метод setUp() для эффективного создания экземпляров и атрибутов, которые могут использоваться во всех методах для тестирования класса.

Тестирование — важная тема, на которую многие новички не обращают внимания. Пока вы делаете свои первые шаги в программировании, писать тесты для простых проектов не нужно. Но как только вы начинаете работать над проектами, требующими значительных затрат ресурсов на разработку, непременно обеспечьте тестирование критических аспектов поведения ваших функций и классов. С эффективными тестами вы можете быть уверены в том, что изменения в проекте не повредят тому, что уже работает, а это развяжет вам руки для усовершенствования кода. Случайно нарушив существующую функциональность, вы немедленно узнаете об этом, что позволит вам быстро исправить проблему. Отреагировать на сбой теста всегда намного проще, чем на отчет об ошибке от недовольного пользователя.

Другие программисты будут более уважительно относиться к вашим проектам, если вы включите в них исходные тесты. Они будут чувствовать себя более ­комфортно, экспериментируя с вашим кодом, и с большей готовностью присоединятся к участию в ваших проектах. Если вы будете участвовать в проекте, над которым работают другие программисты, вам придется продемонстрировать, что ваш код проходит существующие тесты; кроме того, от вас будут ждать, что вы напишете тесты для нового поведения, добавленного вами в проект.

Поэкспериментируйте с тестами и освойтесь с процессом тестирования кода. ­Пишите тесты для критических аспектов поведения ваших функций и классов, но не стремитесь к полному тестовому покрытию своих ранних проектов (если у вас для этого нет особых причин).

Часть II. Проекты


Поздравляем! Вы знаете о Python достаточно для того, чтобы взяться за построение интерактивных, осмысленных проектов. Создание собственных проектов закрепит новые навыки и упрочит ваше понимание концепций, представленных в части I.

В части II представлены три типа проектов; вы можете взяться за любые из них в том порядке, который вам больше нравится. Ниже приведено краткое описание каждого проекта, чтобы вам было проще решить, с чего начать.

Программирование игры на языке Python


В проекте Alien Invasion (главы 12, 13 и 14) мы воспользуемся пакетом Pygame для написания 2D-игры, в которой игрок должен сбивать корабли пришельцев, падающие по экрану с нарастающей скоростью и сложностью. К концу этого проекта вы будете знать достаточно для того, чтобы создавать собственные 2D-игры с использованием Pygame.

Визуализация данных


Проект Data Visualization начинается с главы 15. В этом проекте вы научитесь генерировать данные и создавать практичные, элегантные визуализации этих данных с использованием пакетов matplotlib и Pygal. Глава 16 научит вас работать с данными из сетевых источников и передавать их пакету визуализации для построения графиков погодных данных и карты с населением мира. Наконец, глава 17 показывает, как написать программу для автоматической загрузки и визуализации данных. Навыки визуализации пригодятся вам в изучении области анализа данных — в современном мире это умение ценится очень высоко.

Веб-приложения


В проекте Web Applications (главы 18, 19 и 20) мы при помощи пакета Django создадим простое веб-приложение для ведения веб-дневника по произвольным темам. Пользователь создает учетную запись с именем и паролем, вводит тему и делает заметки. Вы также научитесь развертывать свои приложения так, чтобы сделать их доступными для потенциальных пользователей со всего мира.

После завершения проекта вы сможете заняться построением собственных простых веб-приложений. Кроме того, вы будете готовы к изучению более серьезных ресурсов, посвященных построению приложений с использованием Django.

Проект 1. Инопланетное вторжение

12. Стреляющий корабль


Давайте создадим собственную игру! Мы воспользуемся Pygame — подборкой интересных, мощных модулей Python для управления графикой, анимацией и даже звуком, упрощающей построение сложных игр. Pygame берет на себя такие задачи, как перерисовка изображений на экране, что позволяет вам пропустить бульшую часть рутинного, сложного программирования и сосредоточиться на высокоуровневой логике игровой динамики.

В этой главе мы настроим Pygame и создадим корабль, который движется влево и вправо и стреляет по приказу пользователя. В следующих двух главах вы ­создадите флот инопланетного вторжения, а затем займетесь внесением усовершенствований — например, ограничением количества попыток и добавлением таблицы рекордов.

Эта глава также научит вас управлять большими проектами, состоящими из многих файлов. Мы часто будем проводить рефакторинг и изменять структуру содержимого файлов, чтобы проект был четко организован, а код оставался эффективным.

Программирование игр — идеальный способ совместить изучение языка с развлечением. Написание простой игры поможет вам понять, как пишутся профессиональные игры. В процессе работы над этой главой вводите и запускайте код, чтобы понять, как каждый блок кода участвует в общем игровом процессе. Экспериментируйте с разными значениями и настройками, чтобы лучше понять, как следует организовать взаимодействие с пользователем в ваших собственных играх.

примечание

Игра Alien Invasion состоит из множества файлов; создайте в своей системе новый каталог с именем alien_invasion. Чтобы команды import работали правильно, все файлы проекта должны находиться в этой папке.

Планирование проекта


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

Итак, напишем общее описание игрового процесса. Хотя это описание не затрагивает все аспекты игры, оно дает достаточно четкое представление о том, с чего начинать работу:

Каждый игрок управляет кораблем, который находится в середине нижнего края экрана. Игрок перемещает корабль вправо и влево клавишами управления или курсором; клавиша «пробел» используется для стрельбы. В начале игры флот пришельцев находится в верхней части экрана и постепенно опускается вниз, также смещаясь в сторону. Игрок выстрелами уничтожает пришельцев. Если ему удается сбить всех пришельцев, появляется новый флот, который движется быстрее предыдущего. Если пришелец сталкивается с кораблем игрока или доходит до нижнего края экрана, игрок теряет корабль. Если игрок теряет все три ­корабля, игра заканчивается.

В первой фазе разработки мы создадим корабль, который может двигаться вправо и влево. Корабль должен стрелять из пушки, когда игрок нажимает клавишу «пробел». Когда это поведение будет реализовано, мы сможем заняться пришельцами и доработкой игрового процесса.

Установка Pygame


Прежде чем браться за программирование, установите пакет Pygame. Ниже описан процесс установки в Linux, OS X и Microsoft Windows.

Если вы используете Python 3 в системе Linux или если вы работаете в OS X, для установки Pygame используется pip — программа, управляющая загрузкой и установкой пакетов Python. Процедура установки пакетов с использованием pip описана ниже.

Если вы используете Python 2.7 в системе Linux или если вы работаете в Windows, для установки Pygame программа pip вам не понадобится. Вместо этого перейдите к разделу «Установка Pygame в Linux» (с. 229) или «Установка Pygame в Windows» (с. 231).

примечание

Далее приводятся инструкции по установке pip во всех системах, потому что эта программа понадобится вам для визуализации данных и веб-приложений. Инструкции также доступны по адресу https://www.nostarch.com/pythoncrashcourse/. Если у вас возникнут проблемы с инструкциями, приведенными ниже, попробуйте загрузить инструкции с сайта — возможно, они сработают.

Установка пакетов Python с использованием pip


В последних версиях Python pip устанавливается автоматически, поэтому сначала проверьте, присутствует ли эта программа в вашей системе. В Python 3 программа pip иногда называется pip3.

Проверка pip в Linux и OS X


Откройте терминальное окно и введите следующую команду:

$ pip --version

(1) pip 7.0.3 from /usr/local/lib/python3.5/dist-packages (python 3.5)

$

Если в вашей системе установлена только одна версия Python и вы получили примерно такой результат, переходите к разделу «Установка Pygame в Linux» (с. 229) или «Установка Pygame в OS X» (с. 230). Если вы получите сообщение об ошибке, попробуйте ввести имя pip3 вместо pip. Если ни одна версия не установлена в вашей системе, обратитесь к разделу «Установка pip» (c. 228).

Если в вашей системе установлено несколько версий Python, проверьте, что программа pip связана с используемой версией — например, Python 3.5 (1) . Если программа pip связана с правильной версией, переходите к разделу «Установка Pygame в Linux» (с. 229) или «Установка Pygame в OS X» (с. 230). Если версия неправильная, попробуйте ввести имя pip3 вместо pip. Если ни одна команда не работает для вашей версии Python, обратитесь к разделу «Установка pip» (c. 228).

Проверка pip в Windows


Откройте окно командной строки и введите следующую команду:

$ python -m pip --version

(1) pip 7.0.3 from C:\Python35\lib\site-packages (python 3.5)

$

Если в вашей системе установлена только одна версия Python, и вы получили примерно такой результат, переходите к разделу «Установка Pygame в Windows» (с. 231). Если вы получите сообщение об ошибке, попробуйте ввести имя pip3 вместо pip. Если ни одна версия не установлена в вашей системе, обратитесь к разделу «Установка pip» (с. 228).

Если в вашей системе установлено несколько версий Python, проверьте, что программа pip связана с используемой версией, например Python 3.5 (1) . Если программа pip связана с правильной версией, переходите к разделу «Установка Pygame в Windows» (с. 231). Если версия неправильная, попробуйте ввести имя pip3 вместо pip. Если ни одна команда не работает для вашей версии Python, обратитесь к следующему разделу «Установка pip».

Установка pip


Чтобы установить pip, обратитесь по адресу https://bootstrap.pypa.io/get-pip.py. Сохраните файл, если вам будет предложено. Если код get-pip.py появится в ­браузере, скопируйте код в текстовый редактор и сохраните в файле с именем get-pip.py. После того как программа get-pip.py будет сохранена на вашем компьютере, ее необходимо будет запустить с административными привилегиями, потому что pip будет устанавливать новые пакеты в вашей системе.

примечание

Если вы не нашли программу get-pip.py, обратитесь по адресу https://pip.pypa.io/, щелкните на ссылке Installation на левой панели, а затем в разделе Install pip перейдите по ссылке для загрузки get-pip.py.

Установка pip в Linux и OS X


Чтобы запустить get-pip.py с административными привилегиями, введите следу­ющую команду:

$ sudo python get-pip.py

примечание

Если терминальный сеанс был запущен командой python3, используйте команду sudo python3 get-pip.py.

После выполнения программы введите команду pip --version (или pip3 --version), чтобы убедиться в том, что программа pip была установлена правильно.

Установка pip в Windows


Чтобы запустить get-pip.py, введите следующую команду:

$ python get-pip.py

Если для запуска Python в терминале использовалась другая команда, проследите за тем, чтобы программа get-pip.py запускалась этой же командой — например, python3 get-pip.py или C:\Python35\python get-pip.py.

После выполнения программы введите команду python -m pip --version, чтобы убедиться в том, что программа pip была установлена правильно.

Установка Pygame в Linux


Если вы используете Python 2.7, установите Pygame при помощи менеджера пакетов. Откройте терминальное окно и введите следующую команду, которая загрузит и установит Pygame в вашей системе:

$ sudo apt-get install python-pygame

Проверьте правильность установки в терминальном сеансе; для этого введите следующую команду:

$ python

>>>import pygame

>>>

Если никаких дополнительных сообщений нет, значит, импортирование Pygame прошло успешно, и вы можете переходить к разделу «Создание проекта игры» на с. 231.

Если вы используете Python 3, процесс состоит из двух шагов: установки библиотек, от которых зависит Pygame, и загрузки/установки Pygame.

Чтобы установить библиотеки, необходимые Pygame, введите следующую команду (если в вашей системе используется другая команда, например python3.5, замените python3-dev на python3.5-dev).

$ sudo apt-get install python3-dev mercurial

$ sudo apt-get install libsdl-image1.2-dev libsdl2-dev libsdl-ttf2.0-dev

Эти команды установят библиотеки, необходимые для успешного запуска игры Alien Invasion. Если вы хотите включить расширенную функциональность Pygame (например, возможность добавления звуков), добавьте следующие библиотеки:

$ sudo apt-get install libsdl-mixer1.2-dev libportmidi-dev

$ sudo apt-get install libswscale-dev libsmpeg-dev libavformat-dev libavcode-dev

$ sudo apt-get install python-numpy

Теперь установите Pygame следующей командой (используйте pip3, если эта команда соответствует вашей системе):

$ pip install --user hg+http://bitbucket.org/pygame/pygame

После небольшой паузы программа сообщает, какие библиотеки были найдены. Нажмите Enter, даже если некоторые библиотеки отсутствуют. Вы увидите сообщение об успешной установке Pygame.

Чтобы проверить правильность установки, откройте терминальный сеанс и попробуйте импортировать Pygame:

$ python3

>>>import pygame

>>>

Если импортирование прошло нормально, переходите к разделу «Создание проекта игры» на с. 231.

Установка Pygame в OS X


Для установки некоторых пакетов, от которых зависит Pygame, вам понадобится менеджер пакетов Homebrew. Если в вашей системе он еще не установлен, обращайтесь к приложению А за инструкциями.

Чтобы установить библиотеки, от которых зависит Pygame, введите следующую команду:

$ brew install hg sdl sdl_image sdl_ttf

Команда устанавливает библиотеки, необходимые для Alien Invasion. В процессе установки каждой библиотеки на экране должна выводиться соответствующая информация.

Если вы хотите включить расширенную функциональность (например, возможность добавления звуков), добавьте еще две библиотеки:

$ brew install sdl_mixer portmidi

Установите Pygame следующей командой (используйте pip вместо pip3, если вы используете Python 2.7):

$ pip3 install --user hg+http://bitbucket.org/pygame/pygame

Чтобы проверить правильность установки, откройте терминальный сеанс и попробуйте импортировать Pygame (используйте python вместо python3, если вы используете Python 2.7):

$ python3

>>>import pygame

>>>

Если импортирование прошло нормально, переходите к разделу «Создание проекта игры».

Установка Pygame в Windows


Проект Pygame размещен на сайте совместного использования кода Bitbucket. Чтобы установить Pygame для вашей версии Windows, найдите на странице https://bitbucket.org/pygame/pygame/downloads/ программу установки для Windows, ­соответствующую вашей версии Python. Если вы не нашли подходящую программу установки на сайте Bitbucket, попробуйте поискать по адресу http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame.

Когда подходящий файл будет загружен, запустите программу установки, если это файл с расширением .exe.

Если файл имеет суффикс .whl, скопируйте его в каталог проекта. Откройте окно командной строки, перейдите в папку, в которую был скопирован установочный пакет, и воспользуйтесь программой pip для запуска установки:

>python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whl

Создание проекта игры