Книга Изучаем Python
Скачать 4.68 Mb.
|
ББК 32.973.2-018.1 УДК 004.43 М54 Мэтиз Эрик М54 Изучаем Python. Программирование игр, визуализация данных, веб-прило- жения. — СПб.: Питер, 2017. — 496 с.: ил. — (Серия «Библиотека программиста»). ISBN 978-5-496-02305-4 Книга «Изучаем Python» — это ускоренный курс, который позволит вам сэкономить время и сразу начать писать работоспособные программы (игры, визуализации данных, веб-приложения и многое другое). Хотите стать программистом? В первой части книги вам предстоит узнать о базо- вых принципах программирования, познакомиться со списками, словарями, классами и циклами, вы научитесь создавать программы и тестировать код. Во второй части книги вы начнете использовать знания на практике, работая над тремя крупными проектами: создадите собственную «стрелялку» с нарастающей сложностью уровней, займетесь работой с большими наборами данных и освоите их визуализацию, и, наконец, создадите полноценное веб-приложение на базе Django, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том, что такое программирование, не нужно ждать. Ключ на старт и вперед! 12+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.) ББК 32.973.2-018.1 УДК 004.43 Права на издание получены по соглашению с No Starch Press Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. ISBN 978-1593276034 англ. © 2016 by Eric Matthes ISBN 978-5-496-02305-4 © Перевод на русский язык ООО Издательство «Питер», 2017 © Издание на русском языке, оформление ООО Издательство «Питер», 2017 © Серия «Вы и ваш ребенок», 2017 Оглавление Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Часть I. Основы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Глава 1. Начало работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Подготовка среды программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Решение проблем с установкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Запуск программ Python в терминале . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Глава 2. Переменные и простые типы данных . . . . . . . . . . . . . . . . . . 32 Что происходит при запуске hello_world .py . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Философия Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Глава 3. Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Что такое список? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Индексы начинаются с 0, а не с 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Упорядочение списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Ошибки индексирования при работе со списками . . . . . . . . . . . . . . . . . . . . . 59 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Глава 4. Работа со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Перебор всего списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6 Оглавление Создание числовых списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Работа с частью списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Стиль программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Глава 5. Команды if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Проверка условий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Команды if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Использование команд if со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Оформление команд if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Глава 6. Словари . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Простой словарь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Работа со словарями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Перебор словаря . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Вложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Глава 7. Ввод данных и циклы while . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Как работает функция input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Циклы while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Использование цикла while со списками и словарями . . . . . . . . . . . . . . . . . 130 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Глава 8. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Определение функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Передача аргументов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Возвращаемое значение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Передача списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Хранение функций в модулях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Стилевое оформление функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Глава 9. Классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Создание и использование класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Работа с классами и экземплярами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Импортирование классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Импортирование нескольких классов из модуля . . . . . . . . . . . . . . . . . . . . . 179 Стандартная библиотека Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Оформление классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Оглавление 7 Глава 10. Файлы и исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Чтение из файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Запись в файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Сохранение данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Глава 11. Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Тестирование функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Тестирование класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Часть II. Проекты. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Программирование игры на языке Python . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Визуализация данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Веб-приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Глава 12. Стреляющий корабль . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Планирование проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Установка Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Создание проекта игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Добавление изображения корабля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Рефакторинг: модуль game_functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Управление кораблем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 В двух словах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Стрельба . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Глава 13. Осторожно, пришельцы! . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Анализ проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Создание пришельца . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Построение флота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Перемещение флота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Уничтожение пришельцев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Завершение игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Определение исполняемых частей игры . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Глава 14. Ведение счета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Добавление кнопки Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Повышение сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Подсчет очков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 8 Оглавление Глава 15. Генерирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Установка matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Построение простого графика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Случайное блуждание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Моделирование бросков кубиков в Pygal . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Глава 16. Загрузка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Формат CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Формат JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Глава 17. Работа с API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Использование API веб-приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Глава 18. Знакомство с Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Подготовка к созданию проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Начало работы над приложением . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Построение других страниц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Глава 19. Учетные записи пользователей . . . . . . . . . . . . . . . . . . . . . 408 Редактирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Создание учетных записей пользователей . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Редактирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 Глава 20. Оформление и развертывание приложения . . . . . . . . . . . 437 Оформление приложения Learning Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Развертывание Learning Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Приложение А. Установка Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Python в системе Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Python в OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Python в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Ключевые слова и встроенные функции Python . . . . . . . . . . . . . . . . . . . . . . 469 Приложение Б. Текстовые редакторы . . . . . . . . . . . . . . . . . . . . . . . . 471 Geany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Sublime Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Emacs и vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Оглавление 9 Приложение В. Помощь и поддержка . . . . . . . . . . . . . . . . . . . . . . . . . 478 Первые шаги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Поиск в Интернете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 IRC (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 Приложение Г. Git и контроль версий . . . . . . . . . . . . . . . . . . . . . . . . . 483 Установка Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Создание проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Игнорирование файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Инициализация репозитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Проверка статуса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Добавление файлов в репозиторий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Закрепление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Просмотр журнала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Второе закрепление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Отмена изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Извлечение предыдущих закреплений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Удаление репозитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 |