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

Примечание. Не сохраняйте данные в переменной, если не планируете
Нежелательное использование
Рациональное использование
x = 10
>> 10
print(100)
Пример вызова метода upper
Пример вызова метода replace
"Hello".upper()
>> 'HELLO'
"Hello".replace("e", "@")
>> 'H@llo'
дальнейшее ее использование. Ниже показан пример рационального использования пространства переменных.
print(x)
переменной
>> 100
переменной
4. Контейнеры
Кроме объектов, которые хранились в переменных, их можно сохранять
в так называемых контейнерах. Контейнер – это еще один способ хранения
набора объектов в памяти. Иначе говоря, контейнер – это набор некоторого количества элементов, упакованных в него определённым образом. Наиболее популярными контейнерами являются списки, кортежи и словари. Списки и кортежи представляют собой последовательности, а словари – отображения.
Методы
В Python существует понятие – методы, которые связаны с определенным
типом данных, и в отличие от функций методы вызываются с объектами. Методам, как и функциям, можно передавать параметры.
Списки
Одним из наиболее часто используемых видов контейнеров является список (list). Список представляет собой последовательность объектов, которые
хранятся в определенном порядке.
31

Пример создания пустого списка
list
Пример создания пустого списка
fruit = list()
>> []
fruit = []
>> []
Признаком списка являются квадратные скобки. Для создания списка ис-
пользуются два способа. Можно создать пустой список с помощью функции
list или квадратных скобок, в которых ничего не помещено.
с помощью функции
fruit
с помощью квадратных скобок
fruit
Список Python можно создать, поместив элементы списка в квадратные
скобки, и разделить их запятыми.
fruit = ["Apple", "Orange", "Peach"]
fruit
>> ['Apple', 'Orange', 'Peach']
Особо подчеркнем, что элементы в списке хранятся в определенном по-
рядке. В данном примере элемент Apple – первый элемент (начало списка),
Orange – второй и Peach – третий (конец списка). В список можно добавлять
элементы с помощью метода append. При этом каждый новый элемент добавляется в конец списка.
fruit = ["Apple", "Orange", "Peach"]
fruit.append("Banana")
fruit.append("Melon")
fruit
>> ['Apple', 'Orange', 'Peach', 'Banana', 'Melon']
В списке можно хранить разные типы элементов.
random = []
random.append(True)
random.append(100)
random.append(1.1)
32

random.append("Hello")
random
>> [True, 100, 1.1, 'Hello']
Элементы в строках, списках и кортежах можно перебирать. Этот процесс
называется итерированием (перебором), а объекты – итерируемыми. Иначе
говоря, итерируемый объект (iterable) – это объект, который способен возвращать элементы по одному. Кроме того, это объект, из которого можно получить
итератор (от англ. iterator – перечислитель) – интерфейс, предоставляющий доступ к элементам коллекции (массива или контейнера) и навигацию по ним.
Каждый элемент в списке имеет свой индекс, то есть порядковый номер,
причем индексы начинаются с нуля, а не с единицы. Так, элемент Apple в примере, приведенном выше, имеет индекс 0, Orange – 1, а Peach – 2.
К любому элементу списка можно обратиться по его индексу. Синтаксис
обращения имеет вид имя_списка[индекс].
fruit = ["Apple", "Orange", "Peach"]
fruit[0]
fruit[1]
fruit[2]
>> 'Apple'
>> 'Orange'
>> 'Peach'
При попытке доступа к несуществующему индексу программа выдаст исключение.
colors = ["blue", "green", "yellow"]
colors[5]
>> IndexError: list index out of range
Списки изменяемы, т.е. в них можно добавлять и удалять объекты. Чтобы
в списке изменить объект, нужно присвоить его индекс новому объекту.
colors = ["blue", "green", "yellow"]
colors
colors[2] = "red"
colors
33

>> ['blue', 'green', 'yellow']
>> ['blue', 'green', 'red']
Для удаления последнего элемента списка используют метод pop, но
необходимо помнить, что с пустым списком метод не работает и в случае
ошибки программа генерирует исключение.
colors = ["blue", "green", "yellow"]
colors
item = colors.pop()
item
colors
>> ['blue', 'green', 'yellow']
>> 'yellow'
>> ['blue', 'green']
Списки можно соединить с помощью операции конкатенации (сложения).
colors1 = ["blue", "green", "yellow"]
colors2 = ["orange", "pink", "black"]
colors1 + colors2
>> ['blue', 'green', 'yellow', 'orange', 'pink', 'black']
Наличие элемента в списке проверяется ключевым словом in, а отсутст-
вие – ключевым словом not.
colors = ["blue", "green", "yellow"]
"green" in colors
>> True
colors = ["blue", "green", "yellow"]
"black" not in colors
>> True
Длину списка можно определить с помощью уже упоминавшейся выше
функции len.
len(colors)
>> 3
34

Пример. Рассматривается программа с помощью встроенной функции
Способ 1. Литеральное объявление:
Способ 2. Через функцию tuple():
my_tuple = ()
my_tuple = tuple()
input предлагает угадать цвет. При правильном угадывании программа под-
тверждает догадку, а в противном случае предлагает угадать вновь.
colors = ["purple", "orange", "green"]
guess = input("Угадайте цвет:")
if guess in colors:
print("Вы угадали!")
else:
print("Неправильно! Попробуйте еще.")
>> Угадайте цвет:
Кортежи
Кортеж (tuple) – это еще один вид последовательности, в котором объекты
разделены запятыми и хранятся в определенном порядке. По своей природе они
аналогичны спискам, но, в отличие от них, являются неизменяемыми, то есть
после объявления кортежа его элементы нельзя изменять, добавлять или удалять. Элементами кортежа могут быть объекты любых типов. Кортеж записывается в круглых скобках. Кортежи можно создавать двумя способами.
my_tuple
>> ()
my_tuple
>> ()
Пример создания кортежа:
rndm = ("M. Jackson", 1958, True)
rndm
>> ('M. Jackson', 1958, True)
Для объявления кортежа, включающего один единственный элемент, нужно использовать завершающую запятую. Это необходимо, чтобы отличать кортеж от числа в скобках:
# это кортеж
("self_taught",)
35

# это не кортеж
(9) + 1
>> ('self_taught',)
>> 10
Как было указано выше, после объявления кортежа его элементы нельзя
изменять, добавлять или удалять. В противном случае будет сгенерировано исключение.
dys = ("1984",
"О дивный новый мир",
"451 градус по Фаренгейту")
dys[1] = "Рассказ служанки"
>> TypeError: 'tuple' object does not support item assignment
Любой элемент кортежа можно получить по его индексу.
dys = ("1984",
"О дивный новый мир",
"451 градус по Фаренгейту")
dys[2]
>> '451 градус по Фаренгейту'
Проверка наличия элемента в кортеже осуществляется ключевым словом
in.
dys = ("1984",
"О дивный новый мир",
"451 градус по Фаренгейту")
"1984" in dys
>> True
Проверка отсутствия элемента в кортеже осуществляется ключевыми сло-
вами not in.
dys = ("1984",
"О дивный новый мир",
"451 градус по Фаренгейту")
36

"Рассказ служанки" not in dys
Способ 1. Литеральное объявление:
Способ 2. Через функцию dict():
my_dict = {}
>> {}
my_dict = dict()
>> {}
>> True
Заметим, что выражения abc_tuple = (5, 6, 7) и abc_tuple = 5, 6, 7 тождественны.
После знакомства с кортежами напрашивается вполне естественный вопрос, зачем использовать кортеж вместо списка. Смысл в том, что свойство неизменяемости, это то, что выгодно отличает кортеж от списка и в некоторых
случаях является совершенно необходимым, например, для хранения географических координат, которые являются константами. Кроме того, кортежи, в отличие от списков, используются как ключи словарей.
Словари
Еще одним типом контейнера является структура, называемая словарем.
Аналогия для словаря в языке Python – обычный толковый словарь, где каждому отдельному слову (ключу) соответствует его определение (значение). От-
личительной чертой словарей является то, что они не хранят объекты в определенном порядке. В словари можно добавлять новые пары ключ-значение,
то есть словари являются изменяемыми структурами. Для объявления словарей используются фигурные скобки {}. Словари можно создавать двумя способами.
my_dict
my_dict
При формировании словарей в них можно добавлять пары ключ-значение.
Ключ от значения отделяется двоеточием. Пары ключ-значение отделяются запятыми. При наличии лишь одной пары ключ-значение запятая после нее не
ставится.
fruits = {"Apple":
"red",
"Banana":
37

"yellow"}
fruits
>> {'Apple': 'red', 'Banana': 'yellow'}
В словарь можно добавлять пары ключ-значение, используя конструкцию
имя_словаря[ключ] = значение. Поиск значений осуществляется с по-
мощью ключа. Для этого используется синтаксис имя_словаря[ключ].
facts = dict()
# add a value
facts["код"] = "смешной"
# look up a key
facts["код"]
# add a value
facts["Билл"] = "Гейтс"
# look up a key
facts["Билл"]
# add a value
facts["основание"] = 1776
# look up a key
facts["основание"]
>> 'смешной'
>> 'Гейтс'
>> 1776
Значения словаря могут меняться, а ключ должен быть неизменяемым.
В качестве ключа могут быть кортеж и строка, но не список или словарь.
Наличие ключа определяется с помощью ключевого слова in, однако его
запрещается использовать для проверки наличия в словаре значения.
bill = dict({"Билл Гейтс":
"инвестор"})
"Билл Гейтс" in bill
>> True
38

При попытке доступа к ключу, которого нет в словаре, программой будет
выдано исключение.
Отсутствие ключа определяется с помощью ключевых слов not in.
bill = dict({"Билл Гейтс":
"инвестор"})
"Билл Дорз" not in bill
>> True
Ключевое слово del позволяет удалить пару ключ-значение из словаря.
books = {"Дракула": "Стокер",
"1984": "Оруэлл",
"Процесс": "Кафка"}
del books["Процесс"]
books
>> {'Дракула': 'Стокер', '1984': 'Оруэлл'}
Пример. Программа, использующая словарь.
rhymes = {"1": "смех",
"2": "синий",
"3": "я",
"4": "этаж",
"5": "жизнь"
}
n = input("введите число:")
if n in rhymes:
rhyme = rhymes[n]
print(rhyme)
else:
print("Не найдно.")
>> введите число:
Программа с помощью ключа, который вводит пользователь, ищет в словаре rhymes название песни, предварительно осуществляя проверку на наличие ключа в словаре.
39

Контейнеры внутри контейнеров
Контейнеры могут сохраняться в других контейнерах. Это справедливо для
всех видов контейнеров, в частности для списков.
lists = []
rap = ["Баста", "Кравц", "Злой дух", "25-17"]
rock = ["Наутилус Помпилиус", "Кино", "Ария"]
djs = ["Paul Oakenfold", "Tiesto"]
lists.append(rap)
lists.append(rock)
lists.append(djs)
print(lists)
>> [['Баста', 'Кравц', 'Злой дух', '25-17'], ['Наутилус
Помпилиус', 'Кино', 'Ария'], ['Paul Oakenfold', 'Tiesto']]
Список lists имеет три индекса: первый – это список рэперов, второй –
рокеров, третий – диджеев. Доступ к спискам осуществляется с помощью индексов. Для предыдущего примера доступ к первому списку имеет вид
rap = lists[0]
print(rap)
>> ['Баста', 'Кравц', 'Злой дух', '25-17']
Добавим новый элемент в список rap и вновь выведем списки.
rap = lists[0]
rap.append("Наше дело")
print(rap)
print(lists)
>> ['Баста', 'Кравц', 'Злой дух', '25-17', 'Наше дело']
>> [['Баста', 'Кравц', 'Злой дух', '25-17' 'Наше дело'],
['Наутилус Помпилиус', 'Кино', 'Ария'], ['Paul Oakenfold',
'Tiesto']]
Заметим, что соглашения в языке Python позволяют хранить кортеж внутри
списка и наоборот, а также словарь внутри списка или кортежа.
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
