From a84abc4ad364532f9c04c8f516d7fea84d770d49 Mon Sep 17 00:00:00 2001 From: DeviatovaMY Date: Tue, 4 Nov 2025 10:46:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=95=D0=9C=D0=906/report=20and=20task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA6/report.md | 473 ++++++++++++++++++++++++++++++++++++++++++++++++ TEMA6/task.md | 68 +++++++ TEMA6/task.py | 25 +++ 3 files changed, 566 insertions(+) create mode 100644 TEMA6/report.md create mode 100644 TEMA6/task.md create mode 100644 TEMA6/task.py diff --git a/TEMA6/report.md b/TEMA6/report.md new file mode 100644 index 0000000..bd749d0 --- /dev/null +++ b/TEMA6/report.md @@ -0,0 +1,473 @@ +# Отчет по теме 6 + +Девятова Мария, А-03-23 + +## 1 Запуск IDLE + +## 2 Вывод данных на экран дисплея + +### 2.1 Вывод в командной строке + +Вывод содержимого объекта простым упоминанием в командной строке называется "эхо-выводом" (пригоден только при работе в командной строке) + +``` +stroka='Автоматизированная система управления' +stroka +'Автоматизированная система управления' +``` + +### 2.2 Вывод с использованием функции print + +По умолчанию sep=' ', т.е. при выводе нескольких объектов они разделяются пробелом, но можно задать и другое значение sep. + +``` +fff=234.5;gg='Значение температуры = ' +print(gg, fff) +Значение температуры = 234.5 +print(gg, fff, sep='/') +Значение температуры = /234.5 +``` + +По умолчанию end='\n', т.е. выводимая строка заканчивается переносом на новую строку, но аналогично можно задать другое значение. +При использовании print() без аргументов так же происходит переход на новую строку. + +``` +print(gg, fff,sep='/',end='***'); print('____') +Значение температуры = /234.5***____ +print() + +``` + +Также возможно расположение выводимого текста на нескольких строках при использовании тройных кавычек или перечисление выводимых строк в двойных кавычках через запятую. +Разница будет в том, что при использовании тройных кавычек текст выводится на экран ровно так, как был передан (с переносами строки), а при перечислении объектов через запятую, несмотря на то, что они передавались на разных строках, вывод будет в одну строку, с использованием пробела как разделителя. + +``` +print(""" Здесь может выводиться +большой текст, +занимающий несколько строк""") + + Здесь может выводиться +большой текст, +занимающий несколько строк +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") + +Здесь может выводиться большой текст, занимающий несколько строк +``` + +### 2.3 Вывод с использованием метода write объекта sys.stdout + +Объект stdout - поток стандартного вывода. Объект находится в модуле sys. +При использовании метода write необходимо учитывать, что после вывода не происходит переноса на следующую строку, поэтому необходимо в конце строки добавить '\n'. +Также метод в конце строки возвращает целое число - кол-во символов в строке (\n - 1 символ) + +``` +import sys +sys.stdout.write('Функция write') +Функция write13 +sys.stdout.write('Функция write\n') +Функция write +14 +``` + +## 3 Ввод данных с клавиатуры + +Для ввода с клавиатуры используется функция input. Полученный объект имеет строковый тип данных. + +``` +psw=input('Введите пароль:') +Введите пароль:1111 +psw +'1111' +type(psw) + +``` + +Пример 1. Ввод с контролем значения. + +``` +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break + +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 +``` + +Пример 2. Ввод и обработка выражения + +``` +import math +print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` + +## 4 Ввод-вывод при работе с файлами + +### 4.1 Функции для работы с путем к файлу + +Используя функцию os.getcwd(), можно получить путь к текущему рабочему каталогу. +При обычном эхо-выводе отображаются двойные обратные слэши, при использовании print() - одинарные. + +``` +import os +os.getcwd() +'C:\\Users\\Necroa\\Desktop\\ПОАС\\python-labs\\TEMA6' +Devyatova=os.getcwd(); print(Devyatova) +C:\Users\Necroa\Desktop\ПОАС\python-labs\TEMA6 +``` + +Была использована функция os.chdir() для смены рабочего каталога. + +``` +os.chdir('C:\\Users\\Necroa\\Desktop\\ПОАС\\python-labs\\TEMA5') +os.getcwd() +'C:\\Users\\Necroa\\Desktop\\ПОАС\\python-labs\\TEMA5' +``` + +Функция os.mkdir() создаёт новый каталог. + +``` +os.mkdir('alice') +os.chdir('alice') +os.getcwd() +'C:\\Users\\Necroa\\Desktop\\ПОАС\\python-labs\\TEMA6\\alice' +``` + +Функция os.listdir() возвращает список каталогов и файлов, находящихся внутри данного каталога. + +``` +os.chdir('../') +os.listdir() +['.gitkeep', 'alice', 'report.md'] +``` + +Удаление каталога через os.rmdir(). + +``` +os.rmdir('alice') +os.listdir() +['.gitkeep', 'report.md'] +``` +os.path.isdir() позволяет проверить наличие каталога. Для несуществующих каталогов, ровно как и для любых файлов (которые не являются в свою очередь каталогами), возвращает False. + +``` +os.path.isdir('report.md') +False +os.chdir('../') +os.path.isdir('TEMA6') +True +``` + +Был получен путь до файла, имя которого передаётся в качестве аргумента в os.path.abspath(). Затем из абсолютного пути был извлечен путь до каталога, в котором находится файл, затем имя самого файла, после чего был получен кортеж с путём до каталога и именем файла, находящегося внутри него. + +``` +fil=os.path.abspath('report.md'); print(fil) +C:\Users\Necroa\Desktop\ПОАС\python-labs\TEMA6\report.md +drkt=os.path.dirname(fil); print(drkt) +C:\Users\Necroa\Desktop\ПОАС\python-labs\TEMA6 +bsn=os.path.basename(fil); print(bsn) +report.md +os.path.split(fil) +('C:\\Users\\Necroa\\Desktop\\ПОАС\\python-labs\\TEMA6', 'report.md') +``` + +Было проверено, существует ли путь, передаваемый в виде символьной строки. + +``` +os.path.exists(fil) +True +filf=drkt+'\\alice'; print(filf) +C:\Users\Necroa\Desktop\ПОАС\python-labs\TEMA6\alice +os.path.exists(filf) +False +``` + +Проверка на наличие файла с известным расположением. + +``` +os.path.isfile(fil) +True +os.path.isfile(os.path.dirname(fil)+'fil1.txt') +False +``` + +### 4.2 Общая схема работы с файлом + +Для обмена данными с файлом необходимо выполнить следующие операции: +1. Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); +2. Выполнение одной или нескольких операций обмена данными с файлом; +3. Закрытие файла. + +### 4.3 Открытие файла для записи или чтения данных – функция open + +Был создан файловый объект fp класса _io.TextIOWrapper для работы с текстовыми данными. +В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования. +Файл по такой инструкции открывается только для записи в файл. Если требуются другие операции с открываемым файлом, то для второго аргумента mode могут быть заданы следующие значения: +w – запись с созданием нового файла или перезапись существующего файла, +w+ - чтение и запись/перезапись файла, +r – только чтение (это значение - по умолчанию), +r+ - чтение и/или запись в существующий файл, +a – запись в конец существующего файла или, если его нет, запись с созданием файла, +a+ - то же, но с возможностью чтения из файла. + +``` +fp=open(file=drkt+'\\zapis1.txt',mode='w') +type(fp); dir(fp) + +['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines'] +``` + +Вообще говоря, аргументы функции при указании их имен могут располагаться в любом порядке. +Если же имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать, а вводить в соответствующем порядке. +Также если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла. + +``` +fp=open(drkt+'\\zapis1.txt','w') +fp=open('zapis1.txt','w') +``` + +Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ b. + +``` +fp1=open(drkt+'\\zapis2.bin',mode='wb+') +``` + +### 4.4 Закрытие файла + +``` +fp.close() +``` + +### 4.5 Запись информации в файл с помощью метода write + +Был создан список и записан несколькими срезами в файл. Метод write возвращает число записанных в файл символов. + +``` +sps=list(range(1,13)) +fp2=open('zapis3.txt','w') +fp2.write(str(sps[:4])+'\n') +13 +fp2.write(str(sps[4:8])+'\n') +13 +fp2.write(str(sps[8:])+'\n') +16 +fp2.close() +``` + +Содержимое файла zapis3.txt: + +``` +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] +``` + +Пример со списком, содержащим внутри себя списки. Пример неудачной построчной записи элементов в файл: + +``` +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp3=open('zapis4.txt','w') +for i in range(len(sps3)): + stroka4=sps3[i][0]+' '+str(sps3[i][1]) + fp3.write(stroka4) + +11 +11 +12 +fp3.close() +``` + +``` +Иванов И. 1Петров П. 2Сидоров С. 3 +``` + +Поэтому добавляем '\n': + +``` +gh=open('zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` + +``` +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 +``` + +Либо с представлением цикла в одной строке: + +``` +gh=open('zapis5.txt','w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` + +``` +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 +``` + +### 4.6 Один из способов чтения информации из текстового файла + +``` +sps1=[] +fp=open('zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') + stroka=stroka.replace('[','') + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') + +fp.close() +sps1 +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +sps +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + +Полученный при чтении файла список sps1 содержит элементы строкового типа (необходим целочисленный, как в sps). Преобразуем элементы списка: + +``` +sps3=list(map(int, sps1)) +sps3 +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + +### 4.7 Чтение информации из файла с помощью метода read + +В методе read в качестве аргумента можно передавать количество символов, которые нужно прочитать. Если число не указано, то чтение ведется от маркера и до конца файла. + +``` +fp=open('zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +stroka1; stroka2 +'[1, 2, 3, 4]' +'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n' +``` + +### 4.8 Чтение информации с помощью методов readline и readlines + +``` +fp=open('zapis3.txt') +s1=fp.readline() +s2=fp.readlines() +fp.close() +s1; s2 +'[1, 2, 3, 4]\n' +['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +``` + +### 4.9 Ввод-вывод объектов с использованием функций из модуля pickle + +В модуле pickle содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти. + +``` +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +fp=open('zapis6.mnz','wb') +pickle.dump(mnoz1,fp) +fp.close() +``` + +Содержимое файла zapis6.mnz: + +``` +Ђ•# Џ”(Њbook”Њtable”Њpen”ЊiPhone”ђ. +``` + +При прочтении данных из файла было получено то же самое множество, что и созданное ранее (учитывая, что все элементы в множестве должны быть уникальны). + +``` +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) +fp.close() +mnoz2 +{'book', 'table', 'pen', 'iPhone'} +mnoz1 == mnoz2 +True +``` + +Были записаны и прочитаны два разных объекта: множество и ранее созданный список. +При считывании каждое обращение к load считывает один объект, в том порядке, в котором объекты записывались в файл. +Было проверено, что полученные при чтении файла объекты совпадают с теми, что были использованы при записи в файл. + +``` +fp=open('zapis7.2ob','wb') +pickle.dump(mnoz1,fp) +pickle.dump(sps3,fp) +fp.close() +fp=open('zapis7.2ob','rb') +obj1=pickle.load(fp) +obj2=pickle.load(fp) +fp.close() +obj1; obj2 +{'book', 'table', 'pen', 'iPhone'} +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +obj1 == mnoz1; obj2 == sps3 +True +True +``` + +## 5 Перенаправление потоков ввода и вывода данных + +Поток вывода был перенаправлен в файл, потом снова восстановлен для вывода на экран. + +``` +import sys +vr_out=sys.stdout +fc=open('Stroka.txt','w') +sys.stdout=fc +print('запись строки в файл') +sys.stdout=vr_out +print('запись строки в файл') +запись строки в файл +fc.close() +``` + +Содержимое файла Stroka.txt: + +``` +запись строки в файл +``` + +Подобным образом можно перенаправить и поток ввода. + +``` +tmp_in = sys.stdin +fd = open("Stroka.txt", "r") +sys.stdin = fd +sys.stdin +<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'> +while True: + try: + line = input () + print(line) + except EOFError: + break + +запись строки в файл +fd.close() +sys.stdin=tmp_in +``` + +## 6 Завершение работы \ No newline at end of file diff --git a/TEMA6/task.md b/TEMA6/task.md new file mode 100644 index 0000000..8e1b99c --- /dev/null +++ b/TEMA6/task.md @@ -0,0 +1,68 @@ +# Общее контрольное задание по теме 6 + +Девятова Мария, А-03-23 + +## Задание + +Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции: +1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. +3. Записывается кортеж в бинарный файл. +4. Записывается в этот же файл список и закрывается файл. +5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. +6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение. +7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. + +## Выполнение + +Инструкции для выполнения задания присутствуют в файле [task.py](task.py) + +1. Создание кортежа +``` +import random +tup1=[] +for i in range(125): tup1.append(str(random.randint(6, 56))) +tup1=tuple(tup1); tup1 +('46', '43', '25', '14', '47', '19', '41', '28', '26', '24', '24', '10', '30', '37', '45', '19', '6', '28', '47', '21', '51', '30', '29', '12', '23', '10', '11', '41', '22', '53', '15', '24', '41', '30', '52', '33', '31', '35', '41', '38', '9', '21', '49', '44', '22', '7', '13', '49', '55', '46', '36', '25', '29', '14', '31', '37', '39', '14', '9', '47', '15', '10', '29', '27', '39', '55', '25', '34', '47', '11', '22', '29', '37', '8', '32', '51', '14', '47', '51', '44', '38', '46', '51', '47', '50', '15', '47', '17', '47', '32', '33', '13', '28', '27', '43', '16', '33', '29', '28', '52', '47', '26', '54', '16', '37', '21', '22', '28', '27', '8', '46', '6', '51', '14', '54', '6', '20', '8', '38', '22', '29', '40', '31', '25', '16') +``` + +2-4. Создание списка, запись кортежа и списка в бинарный файл, чтение обоих объектов из файла + +``` +sps1=['Девятова', 'Ефимова', 'Беженарь', 'Антонов', 'Гордиевских'] +import pickle +fp=open('fil.mnz', 'wb') +pickle.dump(tup1, fp) +pickle.dump(sps1, fp) +fp.close() +fp=open('fil.mnz', 'rb') +tup2=pickle.load(fp) +sps2=pickle.load(fp) +fp.close() +``` + +5. Проверка на совпадение объектов + +``` +print('Кортежи совпадают') if tup1 == tup2 else print('Кортежи не совпадают') +Кортежи совпадают +print('Списки совпадают') if sps1 == sps2 else print('Списки не совпадают') +Списки совпадают +``` + +6. Разделение кортежа на списки по 5 чисел, представленных в строковом виде. Для контроля выведены некоторые из созданных объектов + +``` +for i in range(0, len(tup1), 5): + exec('spisk' + str(i//5+1) + '=' + str(list(tup1[i:i+5]))) + + +spisk1 +['46', '43', '25', '14', '47'] +spisk25 +['29', '40', '31', '25', '16'] +spisk2 +['19', '41', '28', '26', '24'] +spisk3 +['24', '10', '30', '37', '45'] +``` \ No newline at end of file diff --git a/TEMA6/task.py b/TEMA6/task.py new file mode 100644 index 0000000..17f6740 --- /dev/null +++ b/TEMA6/task.py @@ -0,0 +1,25 @@ +import random +tup1=[] +for i in range(125): + tup1.append(str(random.randint(6, 56))) +tup1=tuple(tup1) +print(tup1) + +sps1=['Девятова', 'Ефимова', 'Беженарь', 'Антонов', 'Гордиевских'] + +import pickle +fp=open('fil.mnz', 'wb') +pickle.dump(tup1, fp) +pickle.dump(sps1, fp) +fp.close() + +fp=open('fil.mnz', 'rb') +tup2=pickle.load(fp) +sps2=pickle.load(fp) +fp.close() + +print('Кортежи совпадают') if tup1 == tup2 else print('Кортежи не совпадают') +print('Списки совпадают') if sps1 == sps2 else print('Списки не совпадают') + +for i in range(0, len(tup1), 5): + exec('spisk' + str(i//5+1) + '=' + str(list(tup1[i:i+5])))