Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
метров два целых числа, которые определяют интервал, в котором будет сгене­рировано случайное число.
import random random.randint(0,100)
>> 52
Примечание.
Заметим, что в этом случае может быть сгенерировано дру-
гое число.
Изменим последнюю программу, используя еще один модуль – time:
import random, time while True: print(random.randint(1, 100)) time.sleep(1)
Отличие этой программы от предыдущей заключается в том, что она гене­рирует случайные целые числа в интервале от 1 до 100 с паузой в одну секунду. Используемый цикл бесконечен и остановить исполнение кода необходимо, ис­пользуя комбинацию клавиш Ctrl + C.
Встроенный модуль statistics подсчитает статистические величины: среднее значение, медиану и моду в итерируемом объекте (списке), состоящем из чисел.
import statistics
# среднее nums = [1, 5, 33, 12, 46, 33, 2] statistics.mean(nums) # медиана statistics.median(nums) # мода
statistics.mode(nums) >> 18.857142857142858 >> 12 >> 33
Если необходимо проверить, является ли строка ключевым словом в Python,
то применяют встроенный модуль keyword.
71
import keyword keyword.iskeyword("for")
keyword.iskeyword("football") >> True >> False
Довольно часто возникает необходимость в создании собственных модулей. Для этого достаточно сохранить скрипт (скрипт, или сценарий, – это по-
следовательность команд для выполнения конкретных операций, то есть это небольшая программа, настроенная на определенное действие) с расширением *.py. Теперь он доступен в любом другом файле. Например, создайте два файла: hello.py и project.py и сохраните их в одной созданной директории modimp. В первом запишите:
def print_hello():
print("Hi!")
А во втором вызовите эту функцию:
import hello
hello.print_hello() >> Hi!
Создайте новый файл message.py и поместите его в ту же директорию,
в которой находится main.py. Соответственно модуль будет называться message. Определите в нем следующий код:
hello = "Hello all"
def print_message(text):
print(f"Message: {text}")
Вы определили переменную hello и функцию print_message, которая
в качестве параметра получает некоторый текст и выводит его на консоль.
Импортируйте модуль message в главном файле программы – main.py:
import message # подключаем модуль message
# выводим значение переменной hello
print(message.hello) # Hello all
# обращаемся к функии print_message
message.print_message("Hello work") # Message: H ello work
72
Если запустить основной модуль main.py, то программа исполнит свою ра- боту. Но запуск отдельно модуля message.py не даст никакого результата, так как модуль message просто определяет функцию и переменную и не выполняет никаких других действий. Модуль message.py может использоваться как сам по себе, так и подключаться к другим модулям.
При выполнении модуля среда определяет его имя и присваивает его гло­бальной переменной __name__ (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя будет __main__ (также по два под­черкивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения .py. И можно это использовать. Измените содержимое файла message.py:
hello = "Hello all" def print_message(text): print(f"Message: {text}") def main(): print_message(hello)
# вызов функции main if __name__ == "__main__": main()
В операторе print(f"Message: {text}")в строку встроены значе- ния переменных. Для этого внутри строки переменные размещаются в фигур­ных скобках {}, а перед всей строкой ставится символ f.
В модуль message.py добавлена функция main для тестирования его функ­циональности. И можно сразу запустить файл message.py отдельно от всех и протестировать код.
При вызове функции main в последних двух строках переменная __name__ указывает на имя модуля. Для главного модуля, который непосредственно за­пускается, эта переменная всегда будет иметь значение __main__ вне зависи­мости от имени файла. Если запустить скрипт message.py отдельно, Python при­своит переменной __name__ значение __main__, а далее в if вызовет функцию main из этого же файла.
73
Однако если запустить другой скрипт, а message.py подключить в качестве
вспомогательного, то переменная __name__ получит значение message и метод main в файле message.py не будет работать.
Данный подход с проверкой имени модуля является более рекомендуе-
мым, чем просто вызов метода main.
Получить список всех модулей можно командой
help("modules")
Встроенная функция dir() возвращает отсортированный список строк,
содержащих все имена, определенные в модуле.
В заключение отметим, что для удобства восприятия кода в сообществе
Python-разработчиков принято называть файлы в стиле snake_case, что перево- дится как «змеиный регистр» и поэтому идеально сочетается с языком Python.

8. Файлы

В Python хорошо организована работа с файлами. Встроенные средства Python для работы с файлами: открытие / закрытие, чтение и запись. Можно легко читать данные из файла и записывать в файл. Чтение данных из файла означает доступ к содержимому файла. Запись данных в файл означает добав­ление нового содержимого в файл. Это полезно при использовании данных из файла в программе или выводе данных из программы в файл. Рассмотрим осно­вы работы с файлами.

Запись в файлы

Прежде чем работать с файлом, его надо открыть встроенной функцией
open:
f = open('text.txt', 'r')
У функции open два параметра: первый – это строка, представляющая собой путь к файлу, а второй – определяет режим, в котором нужно открыть файл.
Путь к файлу определяет локацию файла на компьютере, например: /Users/calex/my_file.txt – это путь к файлу с именем my_file.txt. Каждое слово, разделенное косой чертой перед ним, является именем папки. Вместе они ука-
74
зывают путь к файлу. Если путь к файлу содержит только имя файла,
Режим
Что делает?
'r'
Чтение файла (по умолчанию)
'w'
Запись в файл. Если файл не существует, то он будет создан
'x'
Запись в файл. Если файл не существует, то будет вызвано исклю-
'a'
Открытие на дозапись, информация добавляется в конец файла
't'
Открывает как текстовый файл (по умолчанию)
'b'
Открывает как двоичный файл
'+'
Открывает файл на чтение и запись
Python
будет искать файл в папке, из которой запускается программа. Не рекомендует­ся прописывать путь к файлу самостоятельно. Пути к файлам всегда нужно со­здавать с помощью встроенного модуля os module.
import os os.path.join("Users", "calex", "my_file.txt")
>> 'Users/calex/my_file.txt'
Подробную информацию о том, как прописывать пути к файлам, можно
посмотреть на сайте https://www.theselftaughtprogrammer.io/filepaths
.
Второй параметр представляет режим открытия файла, который опреде­ляет действия для выполнения с файлом. Вот несколько режимов, в которых можно открыть файл:
чение
Режимы могут быть объединены, например: комбинируя 'r+' или 'w+', можно добиться открытия файла в режиме и чтения, и записи одновременно, но с одним отличием – первый режим вызовет исключение, если файла не су­ществует, а работа во втором режиме в таком случае создаст его в каталоге, где расположена программа.
После того как передали функции open путь к файлу и режим в качестве параметров, open создает так называемый файловый объект, который можно использовать для чтения или записи в файл (или того и другого, в зависимости
от выбранного режима). Вот пример записи в файл:
my_file = open("my_file.txt", "w") my_file.write("Hello from Python!") my_file.close()
75
Функция open создает новый файл с именем my_file.txt (потому что передали 'w' в качестве режима) в каталоге, в котором запускалась программа. Сохраните файловый объект, возвращенный функцией open, в переменной
my_file.
Теперь вызовите метод write (запись) для файлового объекта, который принимает строку в качестве параметра и записывает ее в новый созданный файл. Наконец, закройте файл, вызвав метод close. Это важный шаг. Всякий раз, когда открывается файл с помощью метода open, нужно закрыть его с по­мощью метода close, в противном случае это может вызвать проблемы.

Использование конструкции with

Существует более рациональный способ для открытия файлов, заключаю­щийся в использовании конструкции with … as …, которая работает как ме­неджер создания контекста. Менеджеры контекста позволяют выделять и осво­бождать ресурсы строго по необходимости.
Перепишите вышеприведенный пример с помощью конструкции with:
with open("my_file.txt", "w") as my_file: my_file.write("Hello from Python!")
Основное отличие в том, что Python самостоятельно закрывает файл, и раз­работчику нет необходимости помнить об этом, а кроме того, не будут вызваны исключения при открытии файла (например, если файл не существует).

Чтение из файлов

Для чтения содержимого файла есть несколько возможностей, но наиболее практичными являются лишь две.
1. Метод read. Он читает файл целиком, если вызывается без аргумента.
Если же в качестве аргумента используется целое число n, то читается n сим­волов.
f = open('text.txt') f.read(1)
>> 'H'
f.read()
>> 'ello, world!\nThe end.\n\n'
76
При применении этой функции несколько раз подряд будет считываться
часть за частью этого текста – виртуальный курсор будет сдвигаться на считан­ную часть текста. Курсор можно сдвинуть на определенную позицию методом
seek().
with open("text.txt", "r") as f: # 'Hello, world!' first_part = f.read(8) # 'Hello, w'
f.seek(4)
second_part = f.read(8) # 'o, world'
2. Чтение файла заключается в считывании его построчно, с помощью
цикла for:
with open("text.txt", "r") as f: for line in f:
print(line) >> 'Hello, world!\n' >> '\n' >> 'The end.\n' >> '\n'
Можно вызвать read только один раз (каждый раз, когда запускаете свою
программу). Если нужно будет в программе снова использовать содержимое файла позже, следует сохранить его содержимое в переменной или контейнере. Например, можно изменить следующий пример:
with open("my_file.txt", "r") as my_file:
for line in my_file.read():
print(line) >> Hello from Python!
чтобы сохранить содержимое файла в виде списка:
my_list = list()
with open("my_file.txt", "r") as my_file:
for line in my_file.read():
my_list.append(line)
print(my_list) >> Hello from Python!
Метод my_list.append()добавляет элемент в конец списка.
77

CSV-файлы

Python поставляется со встроенным модулем для работы с CSV-файлами. Этот формат является одним из самых распространенных форматов импорта и экспорта электронных таблиц и баз данных. CSV-файл имеет расширение .csv и содержит данные, разделенные с помощью запятых (CSV – Comma Separated Values – значения, разделенные запятыми). Запятая в файле CSV называется разделителем (в качестве разделителя может выступать и символ вертикальной черты). Каждая часть данных, разделенная запятой, представляет собой ячейку в Excel. Каждая строка файла CSV представляет собой строку в Excel. Вот при­мер содержимого файла csv:
# my_file.csv one, two, three four, five, six
Можно загрузить этот файл в Excel, и one, two и three будут распола­гаться в отдельных ячейках первой строки, а four, five и six – в ячейках второй строки электронной таблицы.
Можно использовать оператор with, чтобы открыть CSV-файл, но внутри оператора with нужно использовать модуль csv для преобразования файлового объекта в объект csv. Модуль csv имеет метод write, который принимает фай­ловый объект и разделитель и возвращает объект csv с помощью метода
writerow, который используют для записи в CSV-файл:
import csv with open('my_file.csv', 'w') as csvfile:
spamwriter = csv.writer(csvfile, delimiter = ',') spamwriter.writerow(['one', 'two', 'three']) spamwriter.writerow(['four', 'five', 'six'])
Метод writerow принимает список в качестве параметра. Каждый эле­мент в списке записывается в файл CSV, и каждый элемент отделяется раздели­телем, который передан методу записи (в данном случае запятой). writerow записывает только одну строку, поэтому нужно вызвать его дважды, чтобы со­здать две строки. При запуске программы она создаст новый файл с именем
78
my_file.csv
, и если открыть файл в текстовом редакторе, он будет выгл
я-
деть так:
# my_file.csv one, two, three four, five, six
Если загрузить этот файл в Excel (или в Google-таблицы), запятые
исчезнут, one, two и three будут в ячейках первой строки, а four, five и
six –
в ячейках второй строки.
Также можно использовать модуль csv для чтения содержимого файла. Чтобы открыть файл CSV только для чтения, сначала надо передать в качестве второго параметра функции open параметр 'r'. Вместо использования метода
записи, как в предыдущем примере, используется метод чтения reader с пе­редачей пути к файлу и запятой в качестве разделителя.
Метод reader возвращает итерируемый объект, который перебирается для печати каждой строки. Вызываем метод join, чтобы добавить запятую между каждым значением и распечатать содержимое файла, как оно отобража-
ется в исходном файле:
import csv with open('my_file.csv', 'r') as csvfile: spamreader = csv.reader(csvfile, delimiter = ',')
for row in spamreader: print(','.join(row))
>> one,two,three >> four,five,six
79

II. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП)

9. Парадигмы программирования

Парадигма программирования – это совокупность идей и понятий,
определяющих стиль написания компьютерных программ. Существует много различных парадигм программирования. В этой главе будут рассмотрены сле­дующие парадигмы программирования: процедурное (императивное) програм­мирование, функциональное (декларативное) программирование и объектно­ориентированное программирование, на которое будет сделан акцент в учебном пособии.

Состояние

Одним из фундаментальных различий между разными парадигмами про-
граммирования является обработка состояния. Состояние – это данные, к кото­рым программа имеет доступ. Программы хранят данные в переменных. Таким образом, состояние – это значение переменных программы в данный момент времени выполнения программы.

Процедурное программирование

До сих пор программирование базировалось на парадигме процедурного
программирования, которое можно описать как “сделай это, потом то”, то
есть это последовательность шагов, ведущих к решению, причем каждый шаг изменяет состояние программы. Примером процедурного программирования может служить следующая программа:
x = 3 y = 5 z = 7 xyz = x + y + z
>> 15
Каждый шаг программы изменяет ее состояние: переходим к xyz, определяя
сначала x, потом – y, затем – z и, наконец, – xyz.
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]