Эта
книга Программируем на Python. Доусон идеальное пособие для начинающих изучать Python. Руководство, написанное опытным разработчиком и преподавателем, научит фундаментальным принципам программирования на примере создания простых игр. Вы приобретете необходимые навыки для разработки приложений на Python и узнаете, как их применять в реальной практике. Для лучшего усвоения материала в книге приведено множество примеров программного кода. В конце каждой главы вы найдете проект полноценной игры, иллюстрирующий ключевые идеи изложенной темы, а также краткое резюме пройденного материала и задачи для самопроверки. Прочитав эту книгу, вы всесторонне ознакомитесь с языком Python, усвоите базовые принципы программирования и будете готовы перенести их на почву других языков, за изучение которых возьметесь. Научитесь программировать на Python играючи!
Оглавление книги
Программируем на Python. Доусон
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Глава 1. Начало работы. Программа Game Over . . . . . . . . . . . . . . . 30
Изучаем программу Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Знакомство с Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Python прост в использовании . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Python — мощный язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Python — объектно-ориентированный язык . . . . . . . . . . . . . . . . . . 32
Python — «склеивающий» язык . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Python работает на всех платформах . . . . . . . . . . . . . . . . . . . . . . 33
Сообщество программистов на Python . . . . . . . . . . . . . . . . . . . . . . 33
Python — бесплатная система с открытым исходным кодом . . . . . . 33
Установка Python в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Установка Python в других операционных системах . . . . . . . . . . . . . . . . . 34
Знакомство с IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Программирование в интерактивном режиме . . . . . . . . . . . . . . . . 35
Программирование в сценарном режиме . . . . . . . . . . . . . . . . . . . . 38
Вернемся к программе Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Использование комментариев . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Пустые строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Печать строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Глава 2. Типы, переменные и основы ввода-вывода.
Программа «Бесполезные факты» . . . . . . . . . . . . . . . . . . . . 43
Знакомство с программой «Бесполезные факты» . . . . . . . . . . . . . . . . . . . 43
Строки и кавычки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Знакомство с программой Game Over 2.0 . . . . . . . . . . . . . . . . . . . . 44
Кавычки внутри строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Вывод на экран нескольких значений . . . . . . . . . . . . . . . . . . . . . . 46
Вывод заключительных символов строки . . . . . . . . . . . . . . . . . . . 47
Создание строк в тройных кавычках . . . . . . . . . . . . . . . . . . . . . . . 47
Escape-последовательности в строках . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Знакомство с программой «Воображаемые благодарности» . . . . . . 48
Вставка табуляционного отступа . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вывод обратного слеша . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вставка пустой строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вставка кавычек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Звук системного динамика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Сцепление и повторение строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Знакомство с программой «Забавные строки» . . . . . . . . . . . . . . . . 51
Сцепление строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Символ продолжения строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Повторение строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Работа с числами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Знакомство с программой «Текстовые задачи» . . . . . . . . . . . . . . . 53
Числовые типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Применение математических операторов . . . . . . . . . . . . . . . . . . . 55
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Знакомство с программой «Привет» . . . . . . . . . . . . . . . . . . . . . . . 56
Создание переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Использование переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Имена переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Знакомство с программой «Персональный привет» . . . . . . . . . . . . 59
Применение функции input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Применение строковых методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Знакомство с программой «Манипуляции с цитатой» . . . . . . . . . . . 61
Создание новых строк с помощью строковых методов . . . . . . . . . . 62
Правильно выбранный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Знакомство с программой «Рантье» (версия с ошибкой) . . . . . . . . 64
Обнаружение и устранение логических ошибок . . . . . . . . . . . . . . . 65
Конвертация значений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Знакомство с программой «Рантье» (версия без ошибки) . . . . . . . 66
Преобразование строк в целые числа . . . . . . . . . . . . . . . . . . . . . . 67
Составные операторы присвоения . . . . . . . . . . . . . . . . . . . . . . . . 68
Вернемся к программе «Бесполезные факты» . . . . . . . . . . . . . . . . . . . . . 69
Начальные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . . 69
Вывод name на экран в нижнем и верхнем регистре . . . . . . . . . . . 70
Пятикратный вывод имени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Подсчет количества секунд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Вычисление значений moon_weight и sun_weight . . . . . . . . . . . . . 71
Ожидание выхода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Глава 3. Ветвление, циклы с оператором while и псевдокод.
Игра «Отгадай число» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Генерирование случайных чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Знакомство с программой «Кости» . . . . . . . . . . . . . . . . . . . . . . . . 74
Импорт модуля random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Применение функции randint() . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Применение функции randrange() . . . . . . . . . . . . . . . . . . . . . . . . . 76
Условные конструкции с if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Знакомство с программой «Пароль» . . . . . . . . . . . . . . . . . . . . . . . 76
Разбираемся в if-конструкции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Создание условий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Операторы сравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Создание блоков кода с помощью отступов . . . . . . . . . . . . . . . . . . 79
Создание собственных if-конструкций . . . . . . . . . . . . . . . . . . . . . . 80
Конструкции if с условием else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Знакомство с программой «Открыто/Закрыто» . . . . . . . . . . . . . . . 80
Разбираемся в условиях else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Конструкции if с условием elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Знакомство с программой «Компьютерный датчик настроения» . . 81
Разбираемся в условиях elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Создание циклов с while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Знакомство с программой «Симулятор трехлетнего ребенка» . . . . 85
Разбираемся в работе цикла while . . . . . . . . . . . . . . . . . . . . . . . . . 86
Инициализация управляющей переменной . . . . . . . . . . . . . . . . . . 86
Проверка значения управляющей переменной . . . . . . . . . . . . . . . 87
Изменение значения управляющей переменной . . . . . . . . . . . . . . 87
Борьба с бесконечными циклами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Знакомство с программой «Проигранное сражение» . . . . . . . . . . . 88
Трассировка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Условия, которые могут становиться ложными . . . . . . . . . . . . . . . 89
Значения как условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Знакомство с программой «Метрдотель» . . . . . . . . . . . . . . . . . . . . 90
Истинные и ложные значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Намеренное создание бесконечных циклов . . . . . . . . . . . . . . . . . . . . . . . 92
Знакомство с программой «Привередливая считалка» . . . . . . . . . . 93
Выход из цикла с помощью команды break . . . . . . . . . . . . . . . . . . 93
Команда continue и возврат к началу цикла . . . . . . . . . . . . . . . . . . 94
Как пользоваться командами break и continue . . . . . . . . . . . . . . . . 94
Составные условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Знакомство с программой «Эксклюзивная сеть» . . . . . . . . . . . . . . 95
Логический оператор not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Логический оператор and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Логический оператор or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Планирование программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Алгоритмы на псевдокоде . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Пошаговая доработка алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . 100
Вернемся к игре «Отгадай число» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
План программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Начальный блок комментариев . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Импорт модуля random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Объяснение правил . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Установка начальных значений . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Цикл отгадывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Поздравления победителю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Ожидание выхода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Глава 4. Циклы с оператором for, строки и кортежи.
Игра «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Знакомство с игрой «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Применение циклов for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Знакомство с программой «Слово по буквам» . . . . . . . . . . . . . . . 106
Разбираемся в работе for-цикла . . . . . . . . . . . . . . . . . . . . . . . . . 107
Создание for-цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Счет с помощью for-цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Знакомство с программой «Считалка» . . . . . . . . . . . . . . . . . . . . . 108
Счет по возрастанию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Счет по числам, кратным пяти . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Счет по убыванию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Операторы и функции для работы с последовательностями:
применение к строкам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Знакомство с программой «Анализатор текста» . . . . . . . . . . . . . . 111
Применение функции len() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Применение оператора in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Индексация строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Знакомство с программой «Случайные буквы» . . . . . . . . . . . . . . 113
Позиции с положительными номерами . . . . . . . . . . . . . . . . . . . . 113
Позиции с отрицательными номерами . . . . . . . . . . . . . . . . . . . . . 114
Случайный элемент строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Что такое неизменяемость строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Конструируем новую строку . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Знакомство с программой «Только согласные» . . . . . . . . . . . . . . 117
Создание констант . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Создание новых строк из существующих . . . . . . . . . . . . . . . . . . . 119
Срезы строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Знакомство с программой «Резчик пиццы» . . . . . . . . . . . . . . . . . 120
Значение None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Разбираемся в срезах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Создание срезов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Сокращения в записи срезов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Создание кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Знакомство с программой «Арсенал героя» . . . . . . . . . . . . . . . . . 124
Создание пустого кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Кортеж как условие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Создание непустого кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Вывод элементов кортежа на экран . . . . . . . . . . . . . . . . . . . . . . 126
Перебор элементов кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Использование кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Знакомство с программой «Арсенал героя 2.0» . . . . . . . . . . . . . . 127
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Применение функции len() к кортежам . . . . . . . . . . . . . . . . . . . . 128
Применение оператора in к кортежам . . . . . . . . . . . . . . . . . . . . . 128
Индексация кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Срезы кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Неизменяемость кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Сцепление кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Вернемся к игре «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Как сформировать анаграмму . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Создание пустой строки для анаграммы . . . . . . . . . . . . . . . . . . . 132
Настройка цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Выбор случайной позиции в слове . . . . . . . . . . . . . . . . . . . . . . . 132
Новая версия jumble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Новая версия word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Программа приветствует игрока . . . . . . . . . . . . . . . . . . . . . . . . . 133
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . 133
Поздравление за правильно отгаданное слово . . . . . . . . . . . . . . 133
Конец игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Глава 5. Списки и словари. Игра «Виселица» . . . . . . . . . . . . . . . . . 135
Знакомство с игрой «Виселица» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Использование списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Знакомство с программой «Арсенал героя 3.0» . . . . . . . . . . . . . . 137
Создание списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Применение функции len() к спискам . . . . . . . . . . . . . . . . . . . . . 138
Применение оператора in к спискам . . . . . . . . . . . . . . . . . . . . . . 138
Индексация списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Срезы списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Сцепление списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Изменяемость списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Присвоение нового значения элементу, выбранному по индексу . . . .140
Присвоение новых значений срезу списка . . . . . . . . . . . . . . . . . . 140
Удаление элемента списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Удаление среза списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Применение списковых методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Знакомство с программой «Рекорды» . . . . . . . . . . . . . . . . . . . . . 141
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Отображение меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Выход из программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Отображение списка рекордов . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Добавление рекорда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Удаление рекорда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Сортировка списка рекордов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Обработка ошибочного выбора . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Когда использовать кортежи, а когда — списки . . . . . . . . . . . . . . . . . . . 145
Последовательности с вложением . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Знакомство с программой «Рекорды 2.0» . . . . . . . . . . . . . . . . . . 146
Создаем последовательность с вложением . . . . . . . . . . . . . . . . . 147
Доступ к вложенным элементам . . . . . . . . . . . . . . . . . . . . . . . . . 148
Распаковка последовательности . . . . . . . . . . . . . . . . . . . . . . . . . 148
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Вывод результатов, содержащихся во вложенных кортежах . . . . 149
Добавление результата как вложенного кортежа . . . . . . . . . . . . 150
Обработка ошибочного выбора . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Распределенные ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Использование словарей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Знакомство с программой «Переводчик с гикского на русский» . . . 153
Создание словарей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Доступ к значениям в словаре . . . . . . . . . . . . . . . . . . . . . . . . . . 154