Добавил:
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
- •Оператор деления по модулю
- •Сортировка методом пузырька
- •Поисковый алгоритм
- •Рекурсия
- •Абстрактные типы данных
- •Узлы
- •Стеки
- •Связанные списки
- •Массивы
- •Бинарные деревья
- •Поиск в ширину и в глубину
- •Хэш-таблицы
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Вкладка «Завершение»
Вкладка завершение (завершение/заполнение табуляции, автодополнение,
автозавершение) – это функция, которая поможет повысить скорость выполнения задач из командной строки. Если набрать команду и нажать кнопку табуляции (Tab) на клавиатуре, оболочка командной строки попытается выполнить
команду автоматически.
Попробуйте набрать ech в командной строке, а затем tab; ech автоматически превратится в echo. Также можно использовать вкладку для заполнения
путей к файлам или каталогам. Начните вводить путь к каталогу, в котором вы
находитесь, и завершите его, нажав tab. Если при нажатии tab ничего не происходит, то две команды или пути названы одинаково, и оболочка не знает, что
выбрать. Например, если у вас есть каталог с именем car и другой каталог
с именем candy, и вы набираете ca и пытаетесь выполнить табуляцию, ничего
не произойдет, потому что оболочка не будет знать, что выбрать: car или
candy. Если добавите n, набрав can, и нажмете Tab Complete, оболочка
выполнит автозаполнение candy, потому что знает, что car неверен.
Функция wildcard (подстановочный знак)
Подстановочный знак – это символ, используемый для сопоставления
с шаблоном. Двумя примерами подстановочных знаков являются звездочка
и вопросительный знак. Подстановочный знак звездочки соответствует всему,
что начинается или заканчивается шаблоном, в зависимости от того, ставится
он до или после шаблона. Подстановочные знаки звездочки обычно используются с командой ls. Команда ls*.txt покажет все файлы в текущем катало-
ге, которые заканчиваются на .txt, тогда как ls.txt* покажет все файлы,
которые заканчиваются на .txt.
Знак вопроса будет соответствовать любому одиночному символу. Таким
образом, ls t?o покажет все файлы или каталоги, которые соответствуют t,
за которым следует любой символ, за которым следует o. Если бы у вас были
каталоги с именем two и too, они оба были бы напечатаны.
131

Другие инструменты
Если терминал загроможден, можно очистить его с помощью команды
clear. Если процесс занимает слишком много времени, можно остановить его
с помощью control+c. Еще одна мощная команда – grep, используемая для
поиска в файлах шаблонов, описана в следующей главе.
В этой главе были описаны лишь основы bash. Чтобы узнать больше об
использовании bash, прочитайте статью по адресу habrahabr.ru/post/47163/.
14. Регулярные выражения
Регулярное выражение – это последовательность символов, используемая
для поиска шаблона в строке. В этой главе можно получить практические
навыки в использовании регулярных выражений из командной строки с помощью команды grep для применения регулярных выражений при поиске файлов, также научиться использовать регулярные выражения в Python.
Настройка
Чтобы начать практиковаться в использовании регулярных выражений, создайте файл с именем zen.txt. В командной строке (убедитесь, что находитесь
в каталоге, где вы создали zen.txt) введите команду python3 -c «import
this». Команда распечатает «Дзен Пайтона», поэму, написанную Тимом Питерсом:
The Zen of Python
Beautiful is better than ugly.
Explicit is better than im plicit.
Simple is better than complex.
Complex is better tha n complicated.
Flat is bette r than nested.
Sparse is better tha n de nse .
Readability counts.
Special cas e s aren’t special enough to break the rules.
Although prac ti cal i ty bea ts pur i ty.
132

Errors should ne ve r pass si le nt ly .
Unless expl icitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one – and preferably only one – obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than ne ver.
Although never is often better than right now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one hon ki n g grea t idea – let’s do more of those !
Флаг -c выполняет код, переданный в виде строки, а import this печатает Zen of Python при выполнении. Скопируйте и вставьте Zen of Python в файл
zen.txt. Также рекомендуется прочитать Zen of Python, так как она содержит
много мудрости. Используйте функцию exit() для выхода из Python, если
используете интерактивную оболочку bash.
Если используете macOS, установите следующие переменные среды в терминале:
$ export GREP_OPTIONS='--color=always'
$ export GREP_COLOR='1;35;40’
Это заставит grep выделить слова, совпавшие в терминале, что по умолчанию происходит в Ubuntu, но не в macOS. Помните, что установка переменной среды из терминала не является постоянной, поэтому, если выйти из терминала и вернуться, придется снова установить переменные среды. Добавьте
переменные среды в файл .profile, если хотите сделать изменение постоянным.
Простое совпадение
Команда grep принимает в качестве параметров регулярное выражение
и путь к файлу, в котором нужно искать регулярное выражение. В командной
строке в каталоге, где вы создали файл zen.txt, введите следующую команду:
$ grep Beautiful zen.txt
>> Beautiful is better than ugly.
133

Beautiful – это самый простой вид регулярного выражения, а zen.txt – это
путь к файлу, в котором нужно искать регулярное выражение. Консоль напечатала строку Beautiful is better than ugly с выделенным красным цветом шрифта
Beautiful, потому что это слово совпало с регулярным выражением.
Игнорирование регистра
Если изменить регулярное выражение с Beautiful на beautiful, оно больше
не будет соответствовать чему-либо в Zen of Python. Введите grep
beautiful zen.txt, чтобы убедиться в этом. Если хотите, чтобы ваше регулярное выражение соответствовало слову beautiful независимо от регистра
(независимо от того, заглавные буквы написаны или нет), можно использовать
флаг -i:
$ grep -i beautiful zen.txt
>> Beautiful is better than ugly.
Тогда grep будет игнорировать регистр и снова выделит Beautiful.
Вывод только конкретных совпадений слов
Команда grep возвращает всю строку файла, в котором было найдено
совпадение. Можно вернуть только конкретное совпадающее слово, используя
флаг -o:
$ grep -o Beautiful zen.txt
>> Beautiful
По умолчанию grep возвращает всю фразу, в которой она нашла совпадение: Beautiful is better than ugly, но поскольку добавили флаг -o,
возвращается только точное совпадение с шаблоном, т.е. слово Beautiful.
Совпадение в начале и в конце
В регулярных выражениях есть определенные символы, которые не совпадают сами с собой, но вместо этого делают что-то особенное. Например, символ (^) используется для поиска совпадений только в том случае, если они
встречаются в начале строки:
134

$ grep ^If zen.txt
>> If the implementation is hard to explain, it’s a bad idea.
>> If the implementation is easy to explain, it may be a good idea.
Точно так можно использовать знак доллара ($), чтобы искать совпадения
с шаблоном только в конце строки:
$ grep idea.$ zen.txt
>> If the implementation is hard to explain, it’s a bad idea.
>> If the implementation is easy to explain, it may be a good idea.
Совпали две строки с одинаковыми окончаниями idea. Фраза Namespaces
are one honking gre at i dea – let’s do more of those! была проигнорирована, потому
что, хотя она и включает слово idea, но не заканчивается им. Можете объединить два совпадения, которые были рассмотрены, в регулярное выражение ^$
для поиска пустых строк в файле.
Поиск совпадений с несколькими символами
Можно использовать квадратные скобки в регулярном выражении для со-
ответствия любому символу внутри скобок. В этом примере вместо сопоставления текста из файла zen.txt будет использоваться конвейер для передачи строки в grep:
$ echo Two is a number and too is not. | grep -i t[ow]o
>> Two is a number and too is not.
Помните, что символ | передает выходные данные одной команды в качестве входных данных следующей. В этом случае выходные данные echo передаются как входные данные grep. Команда echo Two is a number and
too is not | grep -i t[ow]o будет соответствовать и two, и too, потому что регулярное выражение ищет t, за которым следует либо o, либо w, за
которым следует o.
Повторение
Можно добавить в паттерны повторение с помощью символа
“звездочки”.
Звездочка означает, что «предшествующий элемент будет найден ноль или более раз». Например, используя звездочку, можно найти совпадения с tw, за ко-
135

торым следует любое количество o. Регулярное выражение grep two* вы-
полняет это:
$ echo two twooo twoo not too. | grep -o two*
>> two
>> twooo
Добавление * после two означает, что регулярное выражение должно со-
ответствовать чему-либо, за которым следует two с любым количеством o.
Диапазон
Можно сопоставить диапазон букв или цифр, поместив диапазон в скобки.
Например, захотеть сопоставить только числа из текста 122233 hello
334443 goodbye 939333. Регулярное выражение [[:digit:]]* будет
соответствовать всем числам в строке, потому что оно включает диапазон чисел
(0-9), за которым следует символ *, который указывает регулярному выражению сопоставлять как можно больше чисел в строке.
$ echo 122233 hello 334443 goodbye 939333 | grep -o [0-9]*
>> 122233
>> 33443
>> 939333
Точно так можно сопоставить диапазон символов (в данном случае все
символы) с регулярным выражением [[:alpha:]]:
$ echo 122233 hello 334443 goodbye 939333 | grep [[:alpha:]]*
Экранирование (escaping)
Чтобы сопоставить один из специальных символов, например знак долла-
ра, можно экранировать символ. Экранирование означает добавление перед
символом специального символа, чтобы программа, оценивающая синтаксис,
знала, что можно использовать фактический символ, а не специальное значение, которое обычно имеет символ. Экранирование в регулярных выражениях
выполняется с помощью обратной косой черты:
$ echo I love $ | grep \$
>> I love $
136

Обычно знак доллара имеет особое значение, заключающееся только в сопоставлении чего-либо в конце строки, однако поскольку вы экранировали его,
регулярное выражение ищет знак доллара.
Регулярные выражения в Python
В Python есть библиотека re (от англ. словосочетания regular expressions –
регулярные выражения), которая позволяет использовать регулярные выражения в программах на Python. Символы в регулярных выражениях Python не всегда совпадают с grep, но концепция регулярных выражений та же.
import re
line = "Match this."
matchObj = re.search('this', line)
if matchObj:
print(matchObj.group())
else:
print("No match!")
>> this
Библиотека re используется различными методами, такими как поиск,
который возвращает первое вхождение шаблона, который вы ищете. Если совпадение найдено, возвращается объект SRE_Match и можно получить совпадение, вызвав функцию group(). Если совпадение не найдено, re.search()
возвращает None.
Можно использовать функцию findall() в модуле re, чтобы найти
каждое вхождение шаблона, а не только первое совпадение.
import re
line = """The numbers 172 can be found on the back of the
U.S. $5 dollar bill in the bushes at the base
of the Lincoln Memorial."""
matchObj = re.findall('\d+', line)
if matchObj:
print matchObj
137

else:
print ("No match!")
>> ['172', '5']
Функция re.findall()модуля re возвращает список всех строк, соот-
ветствующих шаблону, и пустой список, если совпадений нет. Синтаксис
функции:
re.findall(pattern, string, flags=0),
где
pattern : шаблон, соответствия которому нужно обнаружить;
string : строка, внутри которой требуется отыскать соответствия шаблону;
flags=0 : флаги управления интерпретацией регулярного выражения.
Функция сканирует строку слева направо, вхождения возвращаются в по-
рядке обнаружения в виде списка. Возвращается список строк либо список кортежей, если в шаблоне присутствуют несколько групп.
Символ \d означает цифру, а символ + означает повторение предыдущего
символа один или более раз. Если их совместить \d+, получится выражение,
которое означает одну или более цифр.
Если сопоставить все, что находится между двумя символами подчеркива-
ния, можно сделать это таким образом:
import re
line = """__yellow__ __red__ and __blue__ are colors"""
matchObj = re.findall('__.*?__', line)
if matchObj:
print matchObj
else:
print("No match!")
Два символа подчеркивания соответствуют двум символам подчеркивания,
точка соответствует любому символу, а вопросительный знак, следующий за
звездочкой, означает, что любой символ будет совпадать до тех пор, пока не
появится еще одно двойное подчеркивание.
138

15. Менеджеры пакетов
Менеджеры пакетов – это программы, которые устанавливают и управля-
ют другими программами в операционной системе. Примером управления программой является поддержание программы в актуальном состоянии при выходе
новой версии. Менеджеры пакетов полезны, потому что программисты используют программы для создания новых программ. Например, большинство программ используют одну или несколько баз данных, которые сами являются
программами. Программисты используют менеджеры пакетов для загрузки
и обновления своих баз данных, а также для установки и управления множеством других программ, которые они используют в своей работе.
Pip
Pip используется для загрузки пакетов Python. Pip устанавливает пакет
Python, после чего можно импортировать загруженную программу в качестве
модуля в свои программы на Python. Сначала проверьте, установлен ли Pip, перейдя либо в оболочку командной строки Bash, либо в командную строку, если
используете Windows (которую можете найти, выполнив поиск в командной
строке в окне запуска), и набрав pip.
$ pip
>> Usage: pip <command> [options]
Commands:
install Install packages.
download Download packages. ...
Должен быть выведен список команд, которые можно использовать с помощью pip. Pip поставляется с Python, когда его загружаете, но в более ранних
версиях этого не было, поэтому, если при вводе pip ничего не происходит,
загуглите “установка pip с помощью easy_install”. Ознакомиться с инструкциями по его установке можно на сайте https://pythonworld.ru/osnovy/pip.html
Можно использовать pip install [package_name] для установки нового
пакета. Найти все доступные для загрузки пакеты Python можно по адресу
https://pypi.python.org/pypi. Есть два способа указать пакет: можно просто ис-
139
.

пользовать имя пакета или указать имя пакета, за которым следует == и номер
версии. Если используется имя пакета, будет загружена самая последняя версия. Иногда не нужна самая последняя версия, а нужна конкретная версия, поэтому существует второй вариант. Вот пример того, как можно установить пакет под названием Flask, популярный пакет Python, который позволяет легко
создавать веб-сайты, используя номер версии:
pip install Flask==0.11.1
>>
В Unix-подобных системах нужно использовать команду sudo:
$ sudo pip install Flask==0.11.1
>> Password:
>> Successfully installed flask-0.11.1
Когда установка будет завершена, модуль Flask будет помещен в специальную папку на компьютере, которая называется site-packages. Site-packages
автоматически включается в ваш путь Python, поэтому, когда Python импортирует модуль, он просматривает site-packages, чтобы увидеть, есть ли
он там.
Теперь, написав программу, можно импортировать и использовать модуль
Flask. Создайте новый файл Python и добавьте следующий код:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index ():
return "Hello, World!"
app.run(port = '8000')
>> * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
Можно просмотреть пакеты, которые установили с помощью команды pip
freeze:
pip freeze
>> Flask==0.11.11
...
140
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
