Оглавление
Отзывы о книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
О научном редакторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Предисловие к третьему изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Для кого написана эта книга? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Чему эта книга вас научит? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Онлайн-ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Почему именно Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
ЧАСТЬ I. ОСНОВЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Глава 1. Первые шаги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Подготовка среды программирования . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Python в разных операционных системах . . . . . . . . . . . . . . . . . . . . . . . . 23
Запуск программы Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Решение проблем с установкой ............................... 30
Запуск программ Python в терминале . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Глава 2. Переменные и простые типы данных . . . . . . . . . . . . . . . . . . . . . . 33
Что происходит при запуске hello_world.py . . . . . . . . . . . . . . . . . . . . . . 33
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6 Оглавление
Дзен Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Глава 3. Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Что такое список? ......................................... 50
Индексы начинаются с 0, а не с 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Изменение, добавление и удаление элементов . . . . . . . . . . . . . . . . . . . 53
Упорядочение списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Ошибки индексирования при работе со списками . . . . . . . . . . . . . . . . . 62
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Глава 4. Работа со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Перебор всего списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Предотвращение ошибок с отступами . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Создание числовых списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Работа с частью списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Стиль программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Глава 5. Команды if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Проверка условий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Команды if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Использование команд if со списками . . . . . . . . . . . . . . . . . . . . . . . . . 100
Оформление команд if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Глава 6. Словари . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Простой словарь ......................................... 106
Работа со словарями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Перебор словаря . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Вложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Глава 7. Ввод данных и циклы while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Как работает функция input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Циклы while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Использование цикла while со списками и словарями . . . . . . . . . . . . . . 138
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Глава 8. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Определение функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Передача аргументов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Оглавление 7
Возвращаемое значение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Передача списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Хранение функций в модулях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Стилевое оформление функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Глава 9. Классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Создание и использование класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Работа с классами и экземплярами . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Импортирование классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Стандартная библиотека Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Оформление классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Глава 10. Файлы и исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Чтение из файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Запись в файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Сохранение данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Глава 11. Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Тестирование функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Тестирование класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
ЧАСТЬ II. ПРОЕКТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Программирование игры на языке Python . . . . . . . . . . . . . . . . . . . . . . 238
Визуализация данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Веб-приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
ПРОЕКТ 1. ИГРА «ИНОПЛАНЕТНОЕ ВТОРЖЕНИЕ» . . . . . . . . . . . . . . . 239
Глава 12. Инопланетное вторжение . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Планирование проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Установка Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Создание проекта игры .................................... 241
Добавление изображения корабля . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Рефакторинг: методы _check_events() и _update_screen() . . . . . . . . . . 249
Управление кораблем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
В двух словах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
8 Оглавление
Стрельба . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Глава 13. Осторожно, пришельцы! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Анализ проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Создание пришельца . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Построение флота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Перемещение флота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Уничтожение пришельцев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Завершение игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Определение исполняемых частей игры . . . . . . . . . . . . . . . . . . . . . . . . 291
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Глава 14. Ведение счета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Добавление кнопки Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Повышение сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Подсчет очков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
ПРОЕКТ 2. ВИЗУАЛИЗАЦИЯ ДАННЫХ . . . . . . . . . . . . . . . . . . . . . . . . . 318
Глава 15. Генерирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Установка matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Построение простого графика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Случайное блуждание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Моделирование бросков кубиков в Plotly . . . . . . . . . . . . . . . . . . . . . . . 338
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Глава 16. Загрузка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Формат CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Построение карт с глобальными наборами данных: формат JSON . . . . 361
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Глава 17. Работа с API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Использование API веб-приложений . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
ПРОЕКТ 3. ВЕБ-ПРИЛОЖЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Глава 18. Знакомство с Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Подготовка к созданию проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Начало работы над приложением . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Построение других страниц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Оглавление 9
Глава 19. Учетные записи пользователей . . . . . . . . . . . . . . . . . . . . . . . . 423
Редактирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Создание учетных записей пользователей . . . . . . . . . . . . . . . . . . . . . . 435
Редактирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Глава 20. Оформление и развертывание приложения . . . . . . . . . . . . . . . 454
Оформление приложения Learning Log . . . . . . . . . . . . . . . . . . . . . . . . 454
Развертывание Learning Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Послесловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
ПРИЛОЖЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Приложение А. Установка Python и диагностика проблем . . . . . . . . . . . . 486
Python в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Python в macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Python в системе Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Ключевые слова Python и встроенные функции . . . . . . . . . . . . . . . . . . 489
Приложение Б. Текстовые редакторы . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Настройка Sublime Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Другие текстовые редакторы и IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Приложение В. Помощь и поддержка . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Первые шаги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Поиск в интернете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
IRC (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Slack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Discord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Приложение Г. Git и контроль версий . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Установка Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Создание проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Игнорирование файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Инициализация репозитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Проверка статуса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Добавление файлов в репозиторий . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Закрепление ............................................ 505
Просмотр журнала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Второе закрепление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Отмена изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Извлечение предыдущих закреплений . . . . . . . . . . . . . . . . . . . . . . . . . 508
Удаление репозитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510