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

Циклы (повторения) – это составные операторы, которые позволяют мно-
гократно выполнять код до тех пор, пока условие верно. Рассмотрим два вида
циклов, существующих в Python, – for и while.
Цикл for
Цикл for, также называемый циклом с параметром, выполняет набор инструкций определенное количество раз. Вы даете циклу for число для начала
(например, число a), число для остановки (например, число z), набор инструкций
и переменную, которая отслеживает количество раз, когда инструкции были выполнены (она называется параметром/переменной цикла и обозначают ее i). Можете думать о цикле for как о круге. Он ходит по кругу, выполняя инструкции.
Иначе говоря, цикл for является итератором, основанным на цикле. Каждый раз,
когда цикл выполняет свои инструкции, i (который начинается со значения a)
увеличивается на 1. Когда i становится равным z, цикл for останавливается.
Синтаксис цикла for выглядит следующим образом:
for [имя_переменной] in [последовательность]:
[код_для_выполнения]
else:
[код_для_выполнения]
В цикле for указываются переменная и последовательность (множество
значений), по которой будет пробегать переменная. Последовательность может
быть задана списком, кортежем, строкой, диапазоном, ключами словаря и другими итерируемыми объектами. Для каждого элемента реализуется блок инструкций «код_для_выполнения». Блок else является необязательным, но делает программный код более универсальным (о нем будет сказано позже).
Переменная x последовательно выводит все элементы списка languages:
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print(x)
>> C
>> C++
>> Perl
>> Python
51

Последовательно выводятся элементы итерируемого объекта my_string:
my_string = "Python"
for character in my_string:
print(character)
>> 'P'
>> 'y'
>> 't'
>> 'h'
>> 'o'
>> 'n'
Здесь итерируются элементы кортежа:
my_tuple = ("a", "b", "c")
for item in my_tuple:
print(character)
>> 'a'
>> 'b'
>> 'c'
Здесь итерируются элементы словаря:
my_dict = {"self": "taught", "programming", "wizard":}
for key in my_dict:
print(key)
>> "self"
>> "wizard"
В последнем примере использовали ключ, потому что, когда выполняется
итерация по такому словарю, можно получить доступ только к каждому ключу
в нем, а не к значению, поэтому выбрали имя переменной, чтобы было понятно.
Возможность перебирать повторяющиеся объекты очень полезна. Итера-
тивные объекты используются для хранения данных, и можно использовать
циклы for для перебора данных, чтобы легко вносить в них изменения или перемещать данные из одного итеративного объекта в другой.
52

Функция range(). Чтобы повторить цикл фиксированное число раз,
можно использовать цикл for вместе с функцией range, при этом индексная
переменная принимает значения от 0 до 3 включительно:
for i in range(4):
print(i)
print(i ** 2)
# цикл закончился, поскольку закончился блок с отступом
print('Конец цикла')
>> 0
>> 0
>> 1
>> 1
>> 2
>> 4
>> 3
>> 9
>> Конец цикла
В данном примере range()используется для доступа как к индексу эле-
мента, так и к нему самому. При этом можно использовать ее в сочетании
с функцией длины len():
fibonacci = [0,1,1,2,3,5,8,13,21]
for i in range(len(fibonacci)):
print(i,fibonacci[i])
>> 0 0
>> 1 1
>> 2 1
>> 3 2
>> 4 3
>> 5 5
>> 6 8
>> 7 13
>> 8 21
53

Функция range() может иметь два параметра: range(a, b), где пара-
метр принимает значения от a до b-1.
Следующая программа суммирует числа от 1 до n:
sum = 0
n = 5
for i in range(1, n + 1):
sum += i
print(sum)
>> 15
Функция range() может иметь не только один или два параметра, но
и три: range(a, b, c), где третий параметр c – величина изменения индексной переменной. Например, функция range(1, 100, 2) организует
цикл по нечетным числам от 1 до 99, а range(100, 0, -1) организует цикл
от 100 до 1.
Цикл while
В то время как цикл for выполняет код определенное количество раз,
цикл while (“пока”) выполняет код до тех пор, пока условие цикла в его заголовке истинно (True).
Синтаксис цикла while:
while [условие]:
[код_для_выполнения]
else:
[код_для_выполнения]
Выполнение цикла while начинается с проверки условия. В случае если
условие не выполняется, то есть оно ложно (False), выполнение цикла прекращается и управление передается за пределы тела цикла. В противном случае
выполняется тело цикла и вновь проверяется условие. Работа цикла прекращается, когда условие перестает выполняться. Записывая условие, нужно следить
за тем, чтобы оно не принимало постоянно значение True, так как в этом случае
54

цикл не сможет завершиться. Такой цикл называется бесконечным циклом
Входные данные:
Выходные данные:
3456
4
(для прерывания бесконечного цикла необходимо нажать комбинацию клавиш
Ctrl+C). В цикле while, так же как и в цикле for, блок else является необя-
зательным, но делает программный код более универсальным (о нем будет сказано позже).
Следующая программа выводит i до тех пор, пока i будет меньше 5:
i = 1
while i < 5:
print(i)
i += 1
>> 1
>> 2
>> 3
>> 4
Нижеприведенная программа подсчитывает количество цифр натурального
числа n:
n = int(input())
length = 0
while n > 0:
n //= 10 # или n = n // 10
length += 1
print(length)
Возможно и другое решение этой задачи с помощью комбинации функций
len и str:
length = len(str(i)).
Напомним, что встроенная функция str преобразует объект в строковый
тип.
55

Еще один пример использования цикла while:
for i in 'hello world':
i = 1
>> 3
x = 5
while x > 0:
print('{}'.format(x))
x -= 1
print("Happy New Year!")
>> 5
>> 4
>> 3
>> 2
>> 1
>> 'Happy New Year!'
Операторы break и continue
Оператор break позволяет прервать исполнение циклов for и while
и выйти из них преждевременно. Логично инструкцию break вызывать только
внутри оператора if, так как в противном случае теряется смысл использования циклов.
Ниже приведены примеры использования инструкции break в циклах
for и while.
if i == 'o':
break
print(i * 2, end='')
...
>> hheellll
while i < 6:
print(i)
if i == 3:
break
i += 1
>> 1
>> 2
Оператор continue позволяет прервать текущую итерацию и перейти
к выполнению следующей, минуя оставшееся тело цикла.
56

Ниже приведены примеры использования инструкции continue в циклах
for i in 'hello world':
i = 0
Входные данные:
Выходные данные:
3
4
Ни одного от-
for и while.
if i == 'o':
continue
print(i * 2, end='')
...
>> hheellll wwrrlldd
while i < 6:
i += 1
if i == 3:
continue
print(i)
>> 1
>> 2
>> 4
>> 5
>> 6
В циклах можно использовать необязательную инструкцию else с последу-
ющим блоком операций, который будет выполнен один раз после окончания цикла, когда условие примет значение False. Заметим, что если выполнение цикла
было прервано инструкцией break, то ветвь else будет проигнорирована.
Ниже приведены примеры использования инструкции else в циклах for
и while.
n = int(input())
for i in range(n):
a = int(input())
if a < 0:
print('Встретилось отрицательное число', a)
break
else:
print('Ни одного отрицательного числа нет')
6
2
рицательного
числа нет
57

a = int(input())
Входные данные:
Выходные данные:
3
0
Встретилось
while a != 0:
if a < 0:
print('Встретилось отрицательное число', a)
break
a = int(input())
else:
print('Ни одного отрицательного числа нет')
6
-1
отрицательное
число -1
4
Функция Enumerate
Рассмотрим встроенную функцию Enumerate, которая перебирает кол-
лекцию элементов, отслеживая индекс текущего элемента.
Функция enumerate имеет два аргумента:
enumerate(sequence, start),
где sequence – итератор, а start – необязательный аргумент, начальное значение которого по умолчанию равно нулю, но можно установить его в любое
целое число, например, равное единице.
Возвращаемое значение функции – кортеж из двух элементов: индекс
и элемент объекта.
Функцию enumerate применяют тогда, когда необходим счётчик коли-
чества элементов. При этом не нужно инициировать переменную-счётчик.
«Питонисты», пришедшие из C или Java, часто используют конструкцию
range(len (...)) антипаттерн, чтобы отслеживать индекс во время итера-
ции в цикле for:
# Антипаттерн! Не делайте так.
for i in range(len(spisok)):
print(i, my_items[i])
58

Функция enumerate делает эту конструкцию более «питонической»
и идиоматической, а код, более читабельным и более устойчивым к ошибкам.
# Паттерн! Делайте так.
for i in enumerate(spisok):
print(i)
Например:
list = [14, 42, 27, 35]
for i in enumerate(list):
... print(i)
...
>> (0, 14)
>> (1, 42)
>> (2, 27)
>> (3, 35)
При необходимости эти кортежи можно распаковать, то есть извлечь ин-
декс и значение, в теле цикла следующим образом:
for i in enumerate(list):
print(i[0], i[1])
>> 0, 14
>> 1, 42
>> 2, 27
>> 3, 35
Но чаще это делают еще в заголовке for, используя следующую кон-
струкцию:
for id, val in enumerate(list):
print(id, val)
...
>> 0, 14
>> 1, 42
>> 2, 27
>> 3, 35
59

В последнем случае было использовано так называемое множественное
x = 1
>> 2 1
x = 1
присваивание, которое позволяет в одной инструкции присваивания изменять
значение сразу нескольких переменных. Например:
x, y = 0, 1
Эта возможность весьма удобна, если нужно обменять значения двух пе-
ременных. Сравните, как это реализуется в большинстве языков программирования (левый столбец таблицы) и в Python (правый столбец таблицы):
y = 2
t = a
x = y
y = t
y = 2
x, y = y, x
print(x, y)
>> 2 1
print(x, y)
Вложенные циклы
Вложенным циклом называется конструкция, в которой цикл выполняет-
ся внутри другого цикла, причем количество вложенных циклов не ограничено.
Цикл, находящийся внутри, называется внутренним, а снаружи – внешним.
Телом цикла называется блок кода, который нужно выполнить несколько
раз, при этом один проход цикла называется итерацией.
Вложенные циклы выполняются следующим образом: при каждой итера-
ции внешнего цикла полностью выполняются все итерации внутреннего цикла,
после чего начинается следующая итерация внешнего цикла.
Демонстрационный пример:
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
