Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на языке Python. Учебное пособие.pdf
X
- •ПРЕДИСЛОВИЕ
- •I. ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ
- •1. Начало работы
- •2. Основные понятия
- •Ввод и вывод данных
- •Логические операторы
- •Условные инструкции
- •Инструкции
- •Типы данных
- •Константы и переменные
- •Арифметические операторы
- •Операторы сравнения
- •3. Функции
- •Определение функций
- •Встроенные функции
- •Многократное использование функций
- •Типы параметров функции
- •Область видимости
- •Обработка исключений
- •Строки документации
- •4. Контейнеры
- •Методы
- •Списки
- •Кортежи
- •Словари
- •Контейнеры внутри контейнеров
- •5. Операции со строками
- •6. Циклы
- •Цикл for
- •Цикл while
- •Операторы break и continue
- •Функция Enumerate
- •Вложенные циклы
- •Настройка функции print()
- •7. Модули
- •8. Файлы
- •Запись в файлы
- •Использование конструкции with
- •Чтение из файлов
- •CSV-файлы
- •II. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП)
- •9. Парадигмы программирования
- •Состояние
- •Процедурное программирование
- •Функциональное программирование
- •Объектно-ориентированное программирование
- •10. Базовые понятия ООП
- •Наследование
- •Полиморфизм
- •Абстракция
- •Инкапсуляция
- •Композиция
- •11. Дополнительные понятия ООП
- •Как работают переменные
- •Ключевое слово is
- •Константа None
- •Классы – это объекты
- •Переменные класса и переменные экземпляра класса
- •Приватные переменные
- •Методы переопределения
- •Функция super
- •Переопределение встроенных методов
- •12. Создание игр
- •Карты
- •Колода
- •Игрок
- •Игра
- •Игра «War»
- •13. Bash
- •Запуск Bash
- •Использование Bash
- •Относительные и абсолютные пути
- •Навигация
- •Флаги
- •Редактор vim
- •Команда touch
- •Просмотр файлов командой less
- •Пользователи
- •Разрешения
- •Программы Bash
- •Скрытые файлы
- •Переменные окружения
- •Переменная окружения $PATH
- •Вертикальная черта (пайп)
- •Команда cat
- •Последние команды
- •Быстрые перемещения
- •Экранирование (escaping)
- •Регулярные выражения в Python
- •15. Менеджеры пакетов
- •Вкладка «Завершение»
- •Функция wildcard (подстановочный знак)
- •Другие инструменты
- •14. Регулярные выражения
- •Настройка
- •Простое совпадение
- •Игнорирование регистра
- •Вывод только конкретных совпадений слов
- •Совпадение в начале и в конце
- •Поиск совпадений с несколькими символами
- •Повторение
- •Диапазон
- •16. Управление версиями
- •Репозитории
- •Помещение и извлечение данных
- •Пример помещения данных
- •Пример извлечения данных
- •Откат версий
- •Команда git diff
- •Другой запрос на включение
- •IV. ВВЕДЕНИЕ В ИНФОРМАТИКУ
- •17. Структуры данных и алгоритмы
- •Что такое алгоритмы и структуры данных?
- •Нотация Big-O
- •Оператор деления по модулю
- •Сортировка методом пузырька
- •Поисковый алгоритм
- •Рекурсия
- •Абстрактные типы данных
- •Узлы
- •Стеки
- •Связанные списки
- •Массивы
- •Бинарные деревья
- •Поиск в ширину и в глубину
- •Хэш-таблицы
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Можно использовать синтаксис pip freeze > [имя файла], чтобы
сохранить имена всех пакетов, которые были установлены с помощью pip,
в файл. Создайте файл требований командой:
pip freeze > requirements.txt
>>
Откройте файл requirements.txt в текстовом редакторе, чтобы увидеть новый файл. Этот файл полезен, потому что можно использовать синтаксис pip install [requirements_file] для установки всех пакетов, перечисленных в файле требований. Эта команда полезна для быстрой загрузки
зависимостей программы Python, которая не указана в pypi и, следовательно,
недоступна в pip.
Наконец, можно удалить загруженные программы с помощью
pip uninstall [имя_пакета]. Для удаления Flask используйте следу-
ющую команду:
sudo pip uninstall Flask
>> Proceed (y/n)? y
Successfully uninstalled Flask-0.11.1
Теперь модуль Flask удален. Проверить это можно командой pip
freeze.
16. Управление версиями
Разработка программного обеспечения – это командный вид спорта. Когда
вы работаете над проектом совместно с другим программистом или несколькими программистами, то будете вносить изменения в кодовую базу – папки
и файлы, из которых состоит ваше программное обеспечение, – и вам необходимо синхронизировать эти изменения. Вы могли бы периодически отправлять
друг другу электронные письма с вашими изменениями и самостоятельно комбинировать две разные версии, но это быстро станет утомительным. Кроме того, что произойдет, если вы оба внесете изменения в одну и ту же часть проек-
141

та? Чьи изменения следует использовать? Именно такие проблемы решает система контроля версий. Система контроля версий – это программное обеспечение, разработанное для того, чтобы вы могли легко работать над проектами
вместе с другими программистами.
Существует множество различных систем контроля версий. Наиболее
популярными из них являются Git и SVN. Системы контроля версий – это программы, обычно используемые в сочетании со службой, которая хранит ваше программное обеспечение в облаке, например GitHub. В этой главе вы
научитесь использовать систему управления версиями Git для размещения
программного обеспечения на GitHub, веб-сайте, который хранит ваш код
в облаке.
Репозитории
Репозиторий – это структура данных, созданная программой Git для
управления программным проектом. Структура данных – это способ организации и хранения информации: списки и словари – примеры структур данных
(подробнее о структурах данных вы узнаете дальше). Репозитории используются для отслеживания всех изменений в программном проекте.
Когда вы работаете над проектом, управляемым Git, существует несколько
репозиториев (обычно по одному на каждого человека, работающего над проектом). Типичная ситуация выглядит так: каждый, кто работает над проектом,
также имеет свой собственный репозиторий на своем компьютере, называемый
локальным репозиторием, который отслеживает все изменения, которые они
делают на своем компьютере. Есть также центральный репозиторий, размещенный на веб-сайте, таком как GitHub, с которым взаимодействуют все локальные репозитории, чтобы оставаться синхронизированными друг с другом.
Программист, работающий над проектом, может обновить центральный репозиторий изменениями, внесенными в его локальный репозиторий, или он может
обновить свой локальный репозиторий новейшими изменениями, которые другие программисты внесли в центральный репозиторий. Если вы работаете над
проектом с еще одним программистом, вся система будет выглядеть следующим образом.
142

Делается это из командной строки с помощью программы Git.
Можно создать новый репозиторий с помощью программы Git из командной строки или на веб-сайте GitHub. Создав репозиторий, можно использовать
программу Git для управления им и связи с центральным репозиторием.
Для начала необходимо создать учетную запись Github: перейдите на
Github.com/join, чтобы создать ее. Создайте New repository (новый репозиторий) на Github. Войдите в свою учетную запись GitHub на github.com и нажмите
кнопку + в правом верхнем углу экрана. Нажмите Create repository (создать
репозиторий) в раскрывающемся меню. Дайте репозиторию имя hangman.
Сделайте его Public (общедоступным) и проверьте инициализацию репозитория с помощью файла readme. Теперь нажмите Create repository. Если в какой-то момент у вас возникнут проблемы, и вы сделаете что-то не так в этом
разделе, перейдите на страницу настроек вашего репозитория, удалите его
и начните заново. Вам также необходимо установить Git. Это можно сделать,
используя менеджер пакетов по вашему выбору.
Нажмите кнопку в правом верхнем углу и выберите Your Profile (Ваш
профиль).
143

Увидите имя вашего репозитория: hangman. Кликните по нему – увидите
кнопку с надписью Clone Or Download (Клонировать или скачать). Когда
щелкните по ней, то увидите ссылку. Можно использовать эту ссылку, чтобы
загрузить свой репозиторий к себе в компьютер с помощью команды git clone
[repository_url]. Репозиторий будет загружен в любом каталоге, из которого
вводите команду. Скопируйте ссылку или нажмите кнопку копирования ссылки
в буфер обмена и используйте ее с командой git clone:
$ git clone
>>
Используйте команду ls для проверки, загрузился ли репозиторий.
Помещение и извлечение данных
Есть две основные операции, которые можно делать с Git. Первая – обнов-
ление центрального репозитория изменениями из вашего локального репозитория, то есть помещать данные (толкать), потому что таким образом отправляются новые данные в свой центральный репозиторий.
Вторая – обновление вашего локального репозитория, внося изменения из
центрального репозитория, то есть получать данные (тянуть).
Команда git remote -v показывает вам, из какого центрального репозитория загружается и извлекается ваш локальный репозиторий. Флаг -v означает подробное описание того, что команда обычно выводит дополнительную
информацию. Используйте эту команду внутри, чтобы увидеть центральный
репозиторий, в который ваш локальный репозиторий помещает и извлекает
данные:
$ git remote -v
>> origin https://github.com/[username]/my_git_project.git (fetch)
>> origin https://github.com/[username]/my_git_project.git (push)
Первая строка показывает центральный репозиторий, из которого ваш проект будет извлекать данные, а вторая строка показывает центральный репозиторий, в который ваш проект будет отправлять данные. Как правило, будете отправлять и получать данные из одного и того же центрального репозитория.
144

Пример помещения данных
Внесите изменения в локальный репозиторий для вашего проекта hangman
и отправьте эти изменения в центральный репозиторий.
Переместите файл Python с кодом, который использовали для создания
Hangman, в каталог hangman, который создали ранее. В нашем локальном репозитории теперь есть файл, которого нет в нашем центральном репозитории, т.к.
наш локальный репозиторий не синхронизирован с нашим центральным репозиторием. Можем исправить это, отправив изменения, сделанные в нашем локальном репозитории, в наш центральный репозиторий.
Отправка изменений из локального репозитория в центральный репозиторий происходит в три этапа. Сначала вы создаете свои файлы, где сообщаете
Git, какие файлы имеют изменения, которые хотите отправить в свой центральный репозиторий. После того как вы все просмотрели, фиксируете файлы
и, наконец, помещаете. Сообщаете Git, какие файлы необходимо поместить
в наш центральный репозиторий. Это называется промежуточной обработкой
файла. Когда файл находится в стадии создания, есть шанс изменить свое решение и отменить его. Синтаксис git add [file_path] используется для
создания файла. Используйте команду git add hangman.py, чтобы подготовить ваш файл:
$ git add hangman.py
>>
Команда git status показывает текущее состояние вашего проекта по
отношению к вашему репозиторию. Новые файлы, которые существуют в вашем локальном проекте, но не существуют в вашем репозитории, отображаются зеленым цветом, как и удаленные файлы. Файлы, которые были изменены,
выделены красным цветом. Файл модифицируется, если он находится в вашем
репозитории, но локальная версия и версия в вашем репозитории различаются.
Введите команду git status:
$ git status
>> On branch master Changes to be committed:
(use "git reset HEAD <file>…" to unstage)
new file: hangman.py
145

Вы должны увидеть файл hangman.py, выделенный зеленым цветом.
Нужно подготовить каждый файл, который необходимо отправить в репозиторий, с помощью команды git add [file]. Если подготовили файл, но передумали, то можете отменить его подготовку, не внося изменений в центральный репозиторий. Можно отключить файл с помощью синтаксиса git reset
[file_path], файл Hangman.py – с помощью команды git reset
hangman.py. Используйте git status, чтобы увидеть результат, и снова
добавьте его с помощью git add hangman.py:
$ git reset hangman.py
$ git status
>>
$ git add hangman.py
>>
После того как разместили файлы, переходите ко второму этапу – фиксации файлов в центральном репозитории. Когда фиксируете файлы, нужно использовать флаг -m, чтобы можно было передать сообщение. Сообщение будет
сохранено вместе с вашей фиксацией в вашем репозитории, чтобы помочь вам
вспомнить, какие изменения вы внесли в эту фиксацию.
$ git commit -m "my first commit"
>> 1 file changed, 1 insertion(+) create mode 100644 hello_world.py
Третий этап – отправление ваших изменений на GitHub. Это делается с помощью команды git push origin master:
$ git push origin master
>> Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 0 bytes/s,
done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/[your_username]/my_project.git
0eb3a47..48acc38 master -> master
146

Как только вы введете свое имя пользователя и пароль GitHub из команд-
в котором он был в то время
ной строки, ваши изменения будут отправлены на GitHub. Если посмотрите на
свой репозиторий на веб-сайте GitHub, увидите, что hangman.py теперь находится в вашем проекте.
Пример извлечения данных
Для обновления вашего локального репозитория необходимо внести изме-
нения в наш центральный репозиторий, для этого используйте команду git
pull origin master.
$ git pull origin master
>>From https://github.com/alex/my_project
>> * branch master -> FETCH_HEAD
Git применил изменения из нашего центрального репозитория в наш ло-
кальный репозиторий, и теперь они синхронизированы. Можно просмотреть
файл README.md на своем компьютере, чтобы увидеть изменения.
Откат версий
Когда вы используете контроль версий, вся история вашего проекта сохра-
няется и доступна для использования. Если вы решите вернуться к версии вашего проекта 10-дневной давности, можете это сделать, просмотрев историю
коммитов (сохранения изменениий) вашего проекта с помощью команды git
log, которая должна вывести что-то вроде этого:
$ git log
>> commit aeb4ef3cf3aabdb9205ea9e96e8cab5c0f5ca7ea
Author: Alex <alex@Pro.local>
Date: Thu Jan 21 13:52:02 2016 -0800
Строка цифр и букв после фиксации является номером фиксации.
Можно использовать это число, чтобы вернуть наш проект к тому состоянию,
, с помощью команды
git checkout[old commit]. В этом случае команда будет git
checkout aeb4ef3cf3aabdb9205ea9e96e8cab5c0f5ca7ea.
147

Команда git diff
Можно использовать команду git diff, чтобы увидеть разницу между
версией файла в нашем локальном проекте и версией в нашем репозитории. Добавьте x=100 во вторую строку файла hello_world.py. Введите
команду:
$ git diff hello_world.py
>> diff –git a/hello_world.py b/hello_world.py
index b376c99..83f9007 100644
– a/hello_world.py
+++ b/hello_world.py
@@ -1 +1,2 @@
print('hello')
+x = 100
Git выделяет +x=100 зеленым цветом, потому что строка изменилась,
+ означает, что строка x=100 была добавлена.
Другой запрос на включение
Как ни странно, в контроле версий есть две концепции, называемые pull.
Ранее говорилось об извлечении данных из вашего репозитория. Существует
также не связанная с этим концепция, называемая запросом на извлечение. Запрос на включение происходит на GitHub. Если вы работаете над веткой проекта и хотите объединить ее с главным репозиторием, должны отправить запрос
на включение в GitHub, чтобы объединить их. Это дает вашим коллегам по команде возможность просмотреть и прокомментировать ваши изменения. Если
все выглядит хорошо, кто-то из вашей команды может одобрить запрос на извлечение и объединить две ветки.
Обычно вы создаете новую ветку, когда хотите разработать новую функцию для вашей программы или исправить ошибку или проблему. Когда вы закончите все, что делаете в своей ветке, вы обычно объединяете свои изменения с основной веткой, что представляет собой процесс объединения двух
148

веток. Рассмотрение слияния выходит за рамки этого пособия, но в git-scm
есть отличное руководство, которое можно посмотреть по адресу:
https://git-
scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging.
В заключение отметим, в чем разница между git и GitHub и чем отличается
коммит от пуша:
Git – это инструмент, позволяющий реализовать распределённую систему
контроля версий, а GitHub – это сервис для проектов, использующих Git;
git commit – редактирует репозиторий, заносит туда изменения, а git push –
обновляет ссылки на удалённый репозиторий. Простыми словами, когда вы
«коммитите» изменения, вы делаете их на своём локальном репозитории, при
этом удалённый репозиторий (тот что непосредственно находится на Git) остаётся без изменений.
149

IV. ВВЕДЕНИЕ В ИНФОРМАТИКУ
17. Структуры данных и алгоритмы
Алгоритмы и структуры данных, пожалуй, самый важный предмет компьютерных наук. Название влиятельной книги «Алгоритмы + структуры данных =
программы» резюмирует их важность. Цель этой главы – ознакомление с предметом. В дополнение к усвоению этой главы обязательно нужно больше узнать
об алгоритмах и структурах данных за пределами этого пособия, а также потратить много времени на практику представленных здесь концепций. Многие
примеры в этой главе взяты из замечательной книги «Problem Solving with
Algorithms and Data Structures» Брэда Миллера (Brad Miller) и Дэвида Ранума
(David Ranum). Эту книгу можно прочитать в Интернете по адресу:
http://interactivepython.org
Что такое алгоритмы и структуры данных?
Алгоритм – это последовательность шагов, которые можно выполнить для
решения проблемы. Проблема может быть в чем угодно, например в сортировке, или поиске в списке, или в обходе дерева.
Структура данных – это способ хранения и организации информации.
Структуры данных имеют фундаментальное значение для программирования,
и любой язык программирования, который вы используете, будет иметь встроенные структуры данных. Общие структуры данных включают хеш-таблицы,
стеки и списки. Структуры данных представляют собой разумный компромисс
в плане обработки, некоторые из них лучше подходят для конкретных задач,
чем другие.
.
Нотация Big-O
Нотация Big O – это стандартная метрика, используемая для измерения
сложности алгоритма. Она дает основу для принятия решения о том, какой из
алгоритмов лучше, путем анализа количества шагов, выполняемых каждым алгоритмом, и выбора того, который требует наименьшего количества шагов.
Для описания алгоритма можно использовать уравнение вида T(n) = n.
Далее представлены некоторые алгоритмы, которые следует изучить.
150
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
