diff --git a/TEMA6/Stroka.txt b/TEMA6/Stroka.txt new file mode 100644 index 0000000..a804c17 --- /dev/null +++ b/TEMA6/Stroka.txt @@ -0,0 +1 @@ +запись строки в файл diff --git a/TEMA6/data_file.dat b/TEMA6/data_file.dat new file mode 100644 index 0000000..fef970d Binary files /dev/null and b/TEMA6/data_file.dat differ diff --git a/TEMA6/image.png b/TEMA6/image.png new file mode 100644 index 0000000..cf6a05b Binary files /dev/null and b/TEMA6/image.png differ diff --git a/TEMA6/images/3.1.2.png b/TEMA6/images/3.1.2.png new file mode 100644 index 0000000..db1bdc0 Binary files /dev/null and b/TEMA6/images/3.1.2.png differ diff --git a/TEMA6/images/3.1.3.png b/TEMA6/images/3.1.3.png new file mode 100644 index 0000000..e0a1541 Binary files /dev/null and b/TEMA6/images/3.1.3.png differ diff --git a/TEMA6/images/4.1.2.png b/TEMA6/images/4.1.2.png new file mode 100644 index 0000000..ed48b19 Binary files /dev/null and b/TEMA6/images/4.1.2.png differ diff --git a/TEMA6/images/4.1.4.png b/TEMA6/images/4.1.4.png new file mode 100644 index 0000000..2f82a18 Binary files /dev/null and b/TEMA6/images/4.1.4.png differ diff --git a/TEMA6/images/6.1.png b/TEMA6/images/6.1.png new file mode 100644 index 0000000..7a06d07 Binary files /dev/null and b/TEMA6/images/6.1.png differ diff --git a/TEMA6/images/7.1.png b/TEMA6/images/7.1.png new file mode 100644 index 0000000..cf6a05b Binary files /dev/null and b/TEMA6/images/7.1.png differ diff --git a/TEMA6/report.md b/TEMA6/report.md index 07da5fe..1975c45 100644 --- a/TEMA6/report.md +++ b/TEMA6/report.md @@ -103,231 +103,673 @@ sys.stdout.write('Функция write\n') Функция write ``` -## 2. Цикл по перечислению – управляющая инструкция for. +## 2. Ввод данных с клавиатуры. -***Общее правило написания:*** -for <Объект-переменная цикла> in <объект>: -<отступы><Блок инструкций 1 – тело цикла> -[else: -< отступы ><Блок инструкций 2 – если в цикле не сработал break>] +### 2.1. Для ввода используйте уже знакомую функцию input. ->Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break. -Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием. +```python +psw=input('Введите пароль:') +print(psw) +print(type(psw)) +``` + +Ответ программы: +```shell +Введите пароль:123 +123 + +``` + +### 2.2. Ввод с контролем значения. -### 2.1. Простой цикл. +*Пусть вводится число, которое должно находиться в интервале значений от 17.5 до 23.8.* ```python -temperatura=5 -for i in range(3,18,3): - temperatura+=i -print(temperatura) +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break ``` Ответ программы: ```shell -50 +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 ``` -### 2.2. Более сложный цикл. +### 2.3. Ввод и обработка выражения, подлежащего расчету. ```python -sps=[2,15,14,8] -for k in sps: - if len(sps)<=10:sps.append(sps[0]) - else: break -print("После первого цикла:",sps) -sps=[2,15,14,8] -for k in sps[:]: - if len(sps)<=10:sps.append(sps[0]) - else: break -print("После второго цикла:",sps) +import math +print(eval(input('введите выражение для расчета = '))) ``` Ответ программы: ```shell -После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2] -После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2] +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 ``` ->Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным). +## 3. Ввод-вывод при работе с файлами. + +***Работа с файлом требует указания источника данных - полного имени файла с путем доступа к его расположению. Обычно наибольшие затруднения вызывает корректная локализация этого пути.*** + +### 3.1. Функции для работы с путем к файлу. -### 2.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране. +>Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой.Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой + import os +Как и в других системах, в среде Python в любой момент времени подразумевается некоторый рабочий каталог. Какой рабочий каталог установлен в текущий момент времени? Это можно узнать с помощью функции +os.getcwd (cwd = current working directory). + os.getcwd() +Сохраните этот путь в переменной с именем, совпадающим с вашей фамилией в латинской транскрипции. Отобразите её значение с помощью функции print. ```python -import random as rn -sps5=[] -for i in range(10): - sps5.append(rn.randint(1,100)) - ss=sum(sps5) - if ss>500: break -else: - print(ss) +import os +TerekhovFV=os.getcwd() +print(TerekhovFV) ``` -Ответ программы (1 попытка): +Ответ программы: ```shell +/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs +``` + +*Изменить расположение рабочего каталога можно обращением к уже многократно применявшейся функции os.chdir, аргументом которой будет символьная строка с указанием пути к каталогу, назначаемому в качестве рабочего.* +```python +import os +TerekhovFV=os.getcwd() +print(TerekhovFV) +os.chdir('/Users/fedorterekhov/Library') +print(os.getcwd()) ``` -Ответ программы (2 попытка): +Ответ программы: ```shell -484 +/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs +/Users/fedorterekhov/Library +``` + +*Фунция os.mkdir(path) - создает новую директорию:* + +```python +import os +os.mkdir('TEMA6/test_directory') +``` + +Ответ программы: +![Создана директория test_directory](images/3.1.2.png) + +*Фунция os.rmdir(path) - удаляет пустую директорию:* + +```python +import os +os.rmdir('TEMA6/test_directory') ``` -Ответ программы (3 попытка): +Ответ программы: +![Удалена директория test_directory](images/3.1.3.png) + +**rmdir работает только с пустыми директориями! Для удаления непустых директорий нужно использовать shutil.rmtree().** + +*Фунция os.listdir(path) - возвращает список файлов и директорий:* + +```python +import os +print(os.listdir()) +print(type(os.listdir())) +``` + +Ответ программы: ```shell -450 +['TEMA4', 'TEMA3', 'TEMA2', 'TEMA5', 'README.md', '.gitignore', 'TEMA9', 'TEMA0', 'TEMA7', 'TEMA6', 'TEMA1', 'TEMA8', '.git'] + +``` + +*Фунция os.path.isdir(path) - проверяет, является ли путь директорией:* + +```python +import os +print(os.path.isdir('TEMA6/test_directory')) +print(os.path.isdir('TEMA6/images')) +print(type(os.path.isdir('TEMA6/test_directory'))) ``` -Ответ программы (4 попытка): +Ответ программы: ```shell +False +True + +``` + +*С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему:* +```python +import os +fil=os.path.abspath("report.md") +print(fil) ``` -Ответ программы (5 попытка): +Ответ программы: ```shell -359 +/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/report.md +``` + +*Выделить путь доступа к файлу из строки, содержащей и этот путь, и имя файла можно с помощью функции os.path.dirname:* + +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(drkt) ``` ->Объяснение поведения программы: -Почему вывод значения ss бывает не всегда: -else относится к циклу for, а не к if -Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается. +Ответ программы: +```shell +/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs +``` -### 2.4. Пример с символьной строкой. +*Выделить имя файла/конечной директории из этой строки с отбрасыванием пути можно с помощью функции os.path.basename:* ```python -stroka='Это – автоматизированная система' -stroka1="" -for ss in stroka: - stroka1+=" "+ss -print(stroka1) +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.basename(drkt)) ``` Ответ программы: ```shell - Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а +python-labs ``` -### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом. +*Функция os.path.split разделяет путь к файлу или директории на корневую часть пути и имя файла или имя директории. Возвращает кортеж, содержащий два элемента:* ```python -import math -import pylab +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.split(drkt)) +print(type(os.path.split(drkt))) +``` -sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] +Ответ программы: +```shell +('/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs', 'python-labs') + +``` + +*С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции. Возвращаемое значение: True или False.* -pylab.plot(sps2) -pylab.title('Синусоидальный сигнал') -pylab.xlabel('Отсчеты') -pylab.ylabel('Амплитуда') -pylab.grid(True) -pylab.show() +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.exists(drkt + "/TEMA6")) +print(os.path.exists(drkt + "/TEMA66")) ``` Ответ программы: -![График](Graf_2.5.png) +```shell +True +False +``` -## 3. Цикл «пока истинно условие» – управляющая инструкция while. +*Проверьте наличие файла с известным расположением с помощью функции os.path.isfile, аргументом которой должна быть символьная строка с путем и именем интересующего файла. Возвращаемое значение: True или False.* -***Общее правило написания:*** -while <Условие>: -<отступы><Блок инструкций 1 – тело цикла> -[else: -<отступы><Блок инструкций 2 – если в цикле не сработал break>] ->Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия. +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.isfile(drkt + "/TEMA6/report.md")) +print(os.path.isfile(drkt + "/TEMA6/report1.md")) +``` -### 3.1. Цикл со счётчиком. +Ответ программы: +```shell +True +False +``` + +## 4. Общая схема работы с файлом. + +*Для обмена данными с файлом необходимо выполнить следующие операции:* +* Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); +* Выполнение одной или нескольких операций обмена данными с файлом; +* Закрытие файла. + +### 4.1. Открытие файла для записи или чтения данных – функция open. + +*При открытии файла необходимо указать имя файлы (с путем, если он не в рабочем каталоге) и цель работы с ним. Для открытия используется функция open.* ```python -rashod=300 -while rashod: - print("Расход=",rashod) - rashod-=50 +help(open) ``` Ответ программы: + ```shell -Расход= 300 -Расход= 250 -Расход= 200 -Расход= 150 -Расход= 100 -Расход= 50 +Help on built-in function open in module io: + +open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) + Open file and return a stream. Raise OSError upon failure. + + file is either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened or an integer file descriptor of the file to be + wrapped. (If a file descriptor is given, it is closed when the + returned I/O object is closed, unless closefd is set to False.) + + mode is an optional string that specifies the mode in which the file + is opened. It defaults to 'r' which means open for reading in text + mode. Other common values are 'w' for writing (truncating the file if + it already exists), 'x' for creating and writing to a new file, and + 'a' for appending (which on some Unix systems, means that all writes + append to the end of the file regardless of the current seek position). + In text mode, if encoding is not specified the encoding used is platform + dependent: locale.getpreferredencoding(False) is called to get the + current locale encoding. (For reading and writing raw bytes use binary + mode and leave encoding unspecified.) The available modes are: + + ========= =============================================================== + Character Meaning + --------- --------------------------------------------------------------- + 'r' open for reading (default) + 'w' open for writing, truncating the file first + 'x' create a new file and open it for writing + 'a' open for writing, appending to the end of the file if it exists + 'b' binary mode + 't' text mode (default) + '+' open a disk file for updating (reading and writing) + 'U' universal newline mode (deprecated) + ========= =============================================================== + + The default mode is 'rt' (open for reading text). For binary random + access, the mode 'w+b' opens and truncates the file to 0 bytes, while + 'r+b' opens the file without truncation. The 'x' mode implies 'w' and + raises an `FileExistsError` if the file already exists. +``` + +*Откройте файл zapis1.txt для записи данных с помощью инструкции* + +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w') ``` -Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False. +Ответ программы: +![Создан файл zapis1.txt](images/4.1.2.png) + +*Здесь fp – это файловый объект, который в других языках программирования обычно называют файловой переменной. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла. В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования (w=write – для записи).* -### 3.2. Пример с символьной строкой. +*Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла:* ```python -import math -stroka='Расчет процесса в объекте регулирования' -i=0 -sps2=[] -while i +['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__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'] +``` + +Если требуются другие операции с открываемым файлом, то для второго аргумента «mode=…» могут быть заданы следующие значения: + w – запись с созданием нового файла или перезапись существующего файла, + w+ - чтение и запись/перезапись файла, +r – только чтение (это значение - по умолчанию), + r+ - чтение и/или запись в существующий файл, + a – запись в конец существующего файла или, если его нет, запись с созданием файла, + a+ - то же, что и в «a», но с возможностью чтения из файла. +В зависимости от значения этого аргумента тип создаваемой файловой переменной может быть разным. + +*Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b».* + +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp1=open(drkt+'/TEMA6/zapis2.bin',mode='wb+') ``` Ответ программы: -![График 3.2](Graf_3.2.png) +![Создан файл zapis2.bin](images/4.1.4.png) +***В бинарный файл можно без преобразования записывать объекты любого типа.*** -### 3.3. Определение, является ли число простым (делится только на самого себя или 1). +*Если файл – символьный, то его тип обозначается «t», но это – значение по умолчанию и его можно не указывать. В символьный файл можно записывать только объекты типа str. Объекты других типов надо перед записью преобразовать к этому типу.* + +### 4.2. Закрытие файла. + +*Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. Это делается с помощью метода close, применяемого к объекту – файловой переменной.* + +```python +fp.close() +``` + +### 4.3. Запись информации в файл с помощью метода write. + +***Метод write относится к объекту – файловой переменной.*** ```python -# Проверка одного числа -chislo = 267 -kandidat = chislo // 2 -while kandidat > 1: - if chislo % kandidat == 0: - print(chislo, ' имеет множитель ', kandidat) - break - kandidat -= 1 -else: - print(chislo, ' является простым!') +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps=list(range(1,13)) +fp=open(file=drkt+'/TEMA6/zapis3.txt',mode='w') +fp.write(str(sps[:4])+'\n') +fp.write(str(sps[4:8])+'\n') +fp.write(str(sps[8:])+'\n') +fp.close() +``` + +Файл zapis3.txt: +``` +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] -print("\nПростые числа в диапазоне от 250 до 300:") +``` -# Проверка всех чисел в диапазоне от 250 до 300 -for chislo in range(250, 301): - kandidat = chislo // 2 - while kandidat > 1: - if chislo % kandidat == 0: - break - kandidat -= 1 - else: - print(chislo, end=' ') +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp3=open(drkt + '/TEMA6/zapis4.txt','w') +for i in range(len(sps3)): + stroka4=sps3[i][0]+' '+str(sps3[i][1]) + fp3.write(stroka4) +fp3.close() +``` + +Файл zapis4.txt: +``` +Иванов И. 1Петров П. 2Сидоров С. 3 +``` + +```python +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +gh=open(drkt+'/TEMA6/zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') +gh.close() +``` + +Файл zapis5.txt: +``` +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 + +``` + +## 5. Способы чтения информации. + +*Информация в текстовом файле размещена последовательно, по строкам, с завершением каждой строки символом ‘\n’ (конец строки). При чтении из файла из него извлекается часть информации, начиная с некоторого символа. Обычно, для удобства, считают, что перед этим символом стоит невидимый маркер (указатель), который при открытии файла устанавливается перед первым символом. После чтения части информации маркер перемещается и ставится перед символом, следующим за прочитанной частью информации.* + +### 5.1. Первый способ чтения. + +```python +import os +sps1=[] +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') + stroka=stroka.replace('[','') + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') +fp.close() +print(sps1) +``` + +Ответ программы: +```shell +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +``` + +*В функции открытия файла использован только один аргумент, остальные – со значениями «по умолчанию».* + +*Перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки.* + +*Подумайте, как сделать так, чтобы список, полученный при чтении из файла, совпал с исходным.* + +```python +import os +sps1=[] +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') + stroka=stroka.replace('[','') + stroka=stroka.replace(' ','') + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') +fp.close() +print(sps1) +``` + +Ответ программы: +```shell +['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] +``` + +### 5.2. Чтение информации из файла с помощью метода read. + +*Метод read, как и write, относится к объекту – файловой переменной. В качестве аргумента этого метода может задаваться целое число – количество символов или, если открыт бинарный файл, - количество байт, которое должно быть прочитано, соответственно, из текстового или бинарного файла, начиная с текущего положения маркера. Если указанное число превышает количество оставшихся символов (байт) в файле, то считываются все оставшиеся символы (байты). Если это число не указано, то считываются вся информация от маркера до конца файла. Метод возвращает строку с символами или совокупность байт, прочитанных из файла.* + +```python +import os +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +print(stroka1) +print(stroka2) +``` + +Ответ программы: +```shell +1, 2, 3, 4] + +[5, 6, 7, 8] +[9, 10, 11, 12] + +``` + +### 5.3. Чтение информации с помощью методов readline и readlines. + +*Эти методы позволяют прочитать из файла, начиная с текущего положения маркера, соответственно, одну строку символов (совокупность байт) или все строки (все байты).* + +```python +import os +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +stroka1=fp.readline() +stroka2=fp.readlines() +fp.close() +print(stroka1) +print(stroka2) +``` + +Ответ программы: +```shell +[1, 2, 3, 4] + +['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +``` + +## 6. Ввод-вывод объектов с использованием функций из модуля pickle. + +*В модуле pickle содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти.* + +### 6.1. Запись. + +```python +import os +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() ``` Ответ программы: +![Создан файл zapis6.mnz](images/6.1.png) +### 6.2. Чтение. + +```python +import os +import pickle +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2) +``` + +Ответ программы: ```shell -267 имеет множитель 89 +{'iPhone', 'table', 'pen', 'book'} +``` + +**Объясните, почему он не совпадает с тем, что было задано при создании mnoz1. Инструкцией проверьте два объекта: mnoz1 и mnoz2 на совпадение.** + +```python +import os +import pickle -Простые числа в диапазоне от 250 до 300: -251 257 263 269 271 277 281 283 293 +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() +print(mnoz1) + +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2, '\n') + +print(mnoz1==mnoz2) +print(mnoz1 is mnoz2) ``` -### 3.4. Continue. +Ответ программы: +```shell +{'book', 'iPhone', 'table', 'pen'} +{'book', 'iPhone', 'table', 'pen'} + +True +False +``` ->Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку. +**Почему порядок элементов отличается от исходного?** -Пример: Вывод четных чисел от 1 до 10 с использованием continue. +* Множество (set) в Python - неупорядоченная коллекция +* Элементы хранятся в порядке, оптимизированном для быстрого поиска +* Порядок зависит от хэш-значений элементов и может меняться между запусками +* Исходный порядок {'pen','book','iPhone','table'} не сохраняется + +**Почему удалились дубликаты?** + +* Множество автоматически удаляет повторяющиеся элементы +* Исходно было: {'pen','book','pen','iPhone','table','book'} +* Стало: {'pen','book','iPhone','table'} (4 элемента вместо 6) + +**Проверка совпадения:** + +* mnoz1 == mnoz2: True - объекты содержат одинаковые элементы +* mnoz1 is mnoz2: False - это разные объекты в памяти + +### 6.3. Запись и чтение. + +*Теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3. При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались.* + +```python +import os +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','wb') +pickle.dump(mnoz1,fp) +pickle.dump(sps3,fp) +fp.close() +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','rb') +obj1=pickle.load(fp) #Первое обращение к load читает первый объект +obj2=pickle.load(fp) #Второе – читает второй +fp.close() +print(obj1) +print(obj2) +``` + +Ответ программы: +```shell +{'book', 'pen', 'iPhone', 'table'} +[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] +``` + +## 7. Перенаправление потоков ввода и вывода данных. ```python -for i in range(1, 11): - if i % 2 != 0: - continue - print(i, end=' ') +import os +import sys +vr_out=sys.stdout #Запоминаем текущий поток вывода +fc=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt','w') #Откроем файл вывода +sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл +print('запись строки в файл') #Вывод теперь будет не на экран, а в файл +sys.stdout=vr_out #Восстановление текущего потока +print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился +fc.close() ``` Ответ программы: +![Создан файл Stroka.txt со строкой](images/7.1.png) +Также на экран выведено сообщение: +```shell +запись строки на экран +``` + +*Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла.* +```python +import os +import sys +tmp_in = sys.stdin #Запоминаем текущий поток ввода +fd = open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt', "r") #Открываем файл для ввода (чтения) +sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры +while True: + try: + line = input () #Считываем из файла строку + print(line) # Отображаем считанное + except EOFError: + break +``` + +Ответ программы: ```shell -2 4 6 8 10 +запись строки в файл ``` + diff --git a/TEMA6/task.md b/TEMA6/task.md new file mode 100644 index 0000000..71e9ebc --- /dev/null +++ b/TEMA6/task.md @@ -0,0 +1,84 @@ +# Общее контрольное задание. + +***Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:*** +* Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +* Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. +* Записывается кортеж в бинарный файл. +* Записывается в этот же файл список и закрывается файл. +* Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. +* Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение. +* Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. + +```python +import random +import pickle +import os + +# 1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк +numbers_tuple = tuple(str(random.randint(6, 56)) for _ in range(125)) + +# 2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников +surnames_list = ["Терехов", "Жалнин", "Соловьёва", "Лыкова", "Бушманов"] + +# 3. Записывается кортеж в бинарный файл +# 4. Записывается в этот же файл список и закрывается файл +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp = open(drkt + '/TEMA6/data_file.dat', 'wb') +pickle.dump(numbers_tuple, fp) +pickle.dump(surnames_list, fp) +fp.close() + +# 5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта +fp = open(drkt + '/TEMA6/data_file.dat', 'rb') +loaded_tuple = pickle.load(fp) +loaded_list = pickle.load(fp) +fp.close() + +# 6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение +if numbers_tuple == loaded_tuple and surnames_list == loaded_list: + print("Объекты совпадают") +else: + print("Объекты не совпадают") + +# 7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами +lists_dict = {} +for i in range(0, len(loaded_tuple), 5): + chunk = list(loaded_tuple[i:i+5]) + list_name = f"list_{i//5 + 1}" + lists_dict[list_name] = chunk + +# Вывод созданных списков +for list_name, chunk in lists_dict.items(): + print(f"{list_name} = {chunk}") +``` + +Ответ программы: +```shell +Объекты совпадают +list_1 = ['12', '9', '52', '39', '51'] +list_2 = ['6', '50', '26', '43', '14'] +list_3 = ['52', '20', '55', '18', '17'] +list_4 = ['54', '20', '48', '56', '14'] +list_5 = ['40', '17', '41', '7', '19'] +list_6 = ['17', '40', '55', '11', '27'] +list_7 = ['48', '38', '12', '26', '16'] +list_8 = ['39', '21', '17', '41', '49'] +list_9 = ['24', '16', '18', '6', '16'] +list_10 = ['21', '10', '13', '33', '23'] +list_11 = ['6', '31', '48', '6', '29'] +list_12 = ['17', '34', '33', '40', '25'] +list_13 = ['51', '6', '53', '36', '20'] +list_14 = ['33', '17', '23', '51', '51'] +list_15 = ['17', '44', '40', '17', '26'] +list_16 = ['52', '54', '14', '32', '38'] +list_17 = ['6', '10', '16', '45', '14'] +list_18 = ['26', '40', '14', '29', '43'] +list_19 = ['24', '49', '24', '36', '28'] +list_20 = ['6', '17', '8', '7', '44'] +list_21 = ['14', '22', '42', '24', '56'] +list_22 = ['50', '6', '54', '27', '35'] +list_23 = ['24', '13', '34', '9', '28'] +list_24 = ['44', '34', '31', '16', '23'] +list_25 = ['44', '10', '44', '23', '47'] +``` \ No newline at end of file diff --git a/TEMA6/task2.1.py b/TEMA6/task2.1.py new file mode 100644 index 0000000..55ab574 --- /dev/null +++ b/TEMA6/task2.1.py @@ -0,0 +1,3 @@ +psw=input('Введите пароль:') +print(psw) +print(type(psw)) \ No newline at end of file diff --git a/TEMA6/task2.2.py b/TEMA6/task2.2.py new file mode 100644 index 0000000..048e165 --- /dev/null +++ b/TEMA6/task2.2.py @@ -0,0 +1,6 @@ +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break \ No newline at end of file diff --git a/TEMA6/task2.3.py b/TEMA6/task2.3.py new file mode 100644 index 0000000..8e71395 --- /dev/null +++ b/TEMA6/task2.3.py @@ -0,0 +1,2 @@ +import math +print(eval(input('введите выражение для расчета = '))) \ No newline at end of file diff --git a/TEMA6/task3.1.1.py b/TEMA6/task3.1.1.py new file mode 100644 index 0000000..7a36298 --- /dev/null +++ b/TEMA6/task3.1.1.py @@ -0,0 +1,5 @@ +import os +TerekhovFV=os.getcwd() +print(TerekhovFV) +os.chdir('/Users/fedorterekhov/Library') +print(os.getcwd()) diff --git a/TEMA6/task3.1.10.py b/TEMA6/task3.1.10.py new file mode 100644 index 0000000..efd0d75 --- /dev/null +++ b/TEMA6/task3.1.10.py @@ -0,0 +1,5 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.exists(drkt + "/TEMA6")) +print(os.path.exists(drkt + "/TEMA66")) \ No newline at end of file diff --git a/TEMA6/task3.1.11.py b/TEMA6/task3.1.11.py new file mode 100644 index 0000000..7fc4107 --- /dev/null +++ b/TEMA6/task3.1.11.py @@ -0,0 +1,5 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.isfile(drkt + "/TEMA6/report.md")) +print(os.path.isfile(drkt + "/TEMA6/report1.md")) \ No newline at end of file diff --git a/TEMA6/task3.1.2.py b/TEMA6/task3.1.2.py new file mode 100644 index 0000000..6f69050 --- /dev/null +++ b/TEMA6/task3.1.2.py @@ -0,0 +1,2 @@ +import os +os.mkdir('TEMA6/test_directory') \ No newline at end of file diff --git a/TEMA6/task3.1.3.py b/TEMA6/task3.1.3.py new file mode 100644 index 0000000..41fff04 --- /dev/null +++ b/TEMA6/task3.1.3.py @@ -0,0 +1,2 @@ +import os +os.rmdir('TEMA6/test_directory') \ No newline at end of file diff --git a/TEMA6/task3.1.4.py b/TEMA6/task3.1.4.py new file mode 100644 index 0000000..a807a33 --- /dev/null +++ b/TEMA6/task3.1.4.py @@ -0,0 +1,3 @@ +import os +print(os.listdir()) +print(type(os.listdir())) \ No newline at end of file diff --git a/TEMA6/task3.1.5.py b/TEMA6/task3.1.5.py new file mode 100644 index 0000000..06e298d --- /dev/null +++ b/TEMA6/task3.1.5.py @@ -0,0 +1,4 @@ +import os +print(os.path.isdir('TEMA6/test_directory')) +print(os.path.isdir('TEMA6/images')) +print(type(os.path.isdir('TEMA6/test_directory'))) \ No newline at end of file diff --git a/TEMA6/task3.1.6.py b/TEMA6/task3.1.6.py new file mode 100644 index 0000000..a5632a2 --- /dev/null +++ b/TEMA6/task3.1.6.py @@ -0,0 +1,3 @@ +import os +fil=os.path.abspath("report.md") +print(fil) diff --git a/TEMA6/task3.1.7.py b/TEMA6/task3.1.7.py new file mode 100644 index 0000000..c01ef58 --- /dev/null +++ b/TEMA6/task3.1.7.py @@ -0,0 +1,4 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(drkt) \ No newline at end of file diff --git a/TEMA6/task3.1.8.py b/TEMA6/task3.1.8.py new file mode 100644 index 0000000..10100e3 --- /dev/null +++ b/TEMA6/task3.1.8.py @@ -0,0 +1,4 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.basename(drkt)) \ No newline at end of file diff --git a/TEMA6/task3.1.9.py b/TEMA6/task3.1.9.py new file mode 100644 index 0000000..194f23d --- /dev/null +++ b/TEMA6/task3.1.9.py @@ -0,0 +1,5 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +print(os.path.split(drkt)) +print(type(os.path.split(drkt))) \ No newline at end of file diff --git a/TEMA6/task4.1.1.py b/TEMA6/task4.1.1.py new file mode 100644 index 0000000..7e96f83 --- /dev/null +++ b/TEMA6/task4.1.1.py @@ -0,0 +1 @@ +help(open) \ No newline at end of file diff --git a/TEMA6/task4.1.2.py b/TEMA6/task4.1.2.py new file mode 100644 index 0000000..2c100dd --- /dev/null +++ b/TEMA6/task4.1.2.py @@ -0,0 +1,4 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w') \ No newline at end of file diff --git a/TEMA6/task4.1.3.py b/TEMA6/task4.1.3.py new file mode 100644 index 0000000..bece67a --- /dev/null +++ b/TEMA6/task4.1.3.py @@ -0,0 +1,6 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp=open(file=drkt+'/TEMA6/zapis1.txt',mode='w') +print(type(fp)) +print(dir(fp)) \ No newline at end of file diff --git a/TEMA6/task4.1.4.py b/TEMA6/task4.1.4.py new file mode 100644 index 0000000..dd5efeb --- /dev/null +++ b/TEMA6/task4.1.4.py @@ -0,0 +1,4 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp1=open(drkt+'/TEMA6/zapis2.bin',mode='wb+') \ No newline at end of file diff --git a/TEMA6/task4.3.5.py b/TEMA6/task4.3.5.py new file mode 100644 index 0000000..b82891d --- /dev/null +++ b/TEMA6/task4.3.5.py @@ -0,0 +1,9 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps=list(range(1,13)) +fp=open(file=drkt+'/TEMA6/zapis3.txt',mode='w') +fp.write(str(sps[:4])+'\n') +fp.write(str(sps[4:8])+'\n') +fp.write(str(sps[8:])+'\n') +fp.close() \ No newline at end of file diff --git a/TEMA6/task4.3.6.py b/TEMA6/task4.3.6.py new file mode 100644 index 0000000..d4c8ea1 --- /dev/null +++ b/TEMA6/task4.3.6.py @@ -0,0 +1,9 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp3=open(drkt + '/TEMA6/zapis4.txt','w') +for i in range(len(sps3)): + stroka4=sps3[i][0]+' '+str(sps3[i][1]) + fp3.write(stroka4) +fp3.close() diff --git a/TEMA6/task4.3.7.py b/TEMA6/task4.3.7.py new file mode 100644 index 0000000..ed56193 --- /dev/null +++ b/TEMA6/task4.3.7.py @@ -0,0 +1,8 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +gh=open(drkt+'/TEMA6/zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') +gh.close() \ No newline at end of file diff --git a/TEMA6/task4.3.8.py b/TEMA6/task4.3.8.py new file mode 100644 index 0000000..39bf04c --- /dev/null +++ b/TEMA6/task4.3.8.py @@ -0,0 +1,7 @@ +import os +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +gh=open(drkt+'/TEMA6/zapis5.txt','w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') +gh.close() \ No newline at end of file diff --git a/TEMA6/task5.1.1.py b/TEMA6/task5.1.1.py new file mode 100644 index 0000000..a1e02fc --- /dev/null +++ b/TEMA6/task5.1.1.py @@ -0,0 +1,11 @@ +import os +sps1=[] +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') + stroka=stroka.replace('[','') + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') +fp.close() +print(sps1) \ No newline at end of file diff --git a/TEMA6/task5.1.2.py b/TEMA6/task5.1.2.py new file mode 100644 index 0000000..0609e31 --- /dev/null +++ b/TEMA6/task5.1.2.py @@ -0,0 +1,12 @@ +import os +sps1=[] +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') + stroka=stroka.replace('[','') + stroka=stroka.replace(' ','') + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') +fp.close() +print(sps1) \ No newline at end of file diff --git a/TEMA6/task5.2.py b/TEMA6/task5.2.py new file mode 100644 index 0000000..c5a0c70 --- /dev/null +++ b/TEMA6/task5.2.py @@ -0,0 +1,8 @@ +import os +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +print(stroka1) +print(stroka2) \ No newline at end of file diff --git a/TEMA6/task5.3.py b/TEMA6/task5.3.py new file mode 100644 index 0000000..d20e9e9 --- /dev/null +++ b/TEMA6/task5.3.py @@ -0,0 +1,8 @@ +import os +dirr=os.path.dirname(os.path.abspath("report.md")) +fp=open(dirr + '/TEMA6/zapis3.txt') +stroka1=fp.readline() +stroka2=fp.readlines() +fp.close() +print(stroka1) +print(stroka2) \ No newline at end of file diff --git a/TEMA6/task6.1.py b/TEMA6/task6.1.py new file mode 100644 index 0000000..7ab651f --- /dev/null +++ b/TEMA6/task6.1.py @@ -0,0 +1,6 @@ +import os +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() \ No newline at end of file diff --git a/TEMA6/task6.2.1.py b/TEMA6/task6.2.1.py new file mode 100644 index 0000000..710e9cf --- /dev/null +++ b/TEMA6/task6.2.1.py @@ -0,0 +1,6 @@ +import os +import pickle +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2) \ No newline at end of file diff --git a/TEMA6/task6.2.2.py b/TEMA6/task6.2.2.py new file mode 100644 index 0000000..0df9e24 --- /dev/null +++ b/TEMA6/task6.2.2.py @@ -0,0 +1,16 @@ +import os +import pickle + +mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество» +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись +pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл +fp.close() +print(mnoz1) + +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла +fp.close() +print(mnoz2, '\n') + +print(mnoz1==mnoz2) +print(mnoz1 is mnoz2) \ No newline at end of file diff --git a/TEMA6/task6.3.py b/TEMA6/task6.3.py new file mode 100644 index 0000000..a15dfce --- /dev/null +++ b/TEMA6/task6.3.py @@ -0,0 +1,15 @@ +import os +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb') +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','wb') +pickle.dump(mnoz1,fp) +pickle.dump(sps3,fp) +fp.close() +fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis7.2ob','rb') +obj1=pickle.load(fp) #Первое обращение к load читает первый объект +obj2=pickle.load(fp) #Второе – читает второй +fp.close() +print(obj1) +print(obj2) \ No newline at end of file diff --git a/TEMA6/task7.1.py b/TEMA6/task7.1.py new file mode 100644 index 0000000..6330eb3 --- /dev/null +++ b/TEMA6/task7.1.py @@ -0,0 +1,9 @@ +import os +import sys +vr_out=sys.stdout #Запоминаем текущий поток вывода +fc=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt','w') #Откроем файл вывода +sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл +print('запись строки в файл') #Вывод теперь будет не на экран, а в файл +sys.stdout=vr_out #Восстановление текущего потока +print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился +fc.close() \ No newline at end of file diff --git a/TEMA6/task7.2.py b/TEMA6/task7.2.py new file mode 100644 index 0000000..fe0d6bc --- /dev/null +++ b/TEMA6/task7.2.py @@ -0,0 +1,11 @@ +import os +import sys +tmp_in = sys.stdin #Запоминаем текущий поток ввода +fd = open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/Stroka.txt', "r") #Открываем файл для ввода (чтения) +sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры +while True: + try: + line = input () #Считываем из файла строку + print(line) # Отображаем считанное + except EOFError: + break \ No newline at end of file diff --git a/TEMA6/taskO.py b/TEMA6/taskO.py new file mode 100644 index 0000000..62f694d --- /dev/null +++ b/TEMA6/taskO.py @@ -0,0 +1,41 @@ +import random +import pickle +import os + +# 1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк +numbers_tuple = tuple(str(random.randint(6, 56)) for _ in range(125)) + +# 2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников +surnames_list = ["Терехов", "Жалнин", "Соловьёва", "Лыкова", "Бушманов"] + +# 3. Записывается кортеж в бинарный файл +# 4. Записывается в этот же файл список и закрывается файл +fil=os.path.abspath("report.md") +drkt=os.path.dirname(fil) +fp = open(drkt + '/TEMA6/data_file.dat', 'wb') +pickle.dump(numbers_tuple, fp) +pickle.dump(surnames_list, fp) +fp.close() + +# 5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта +fp = open(drkt + '/TEMA6/data_file.dat', 'rb') +loaded_tuple = pickle.load(fp) +loaded_list = pickle.load(fp) +fp.close() + +# 6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение +if numbers_tuple == loaded_tuple and surnames_list == loaded_list: + print("Объекты совпадают") +else: + print("Объекты не совпадают") + +# 7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами +lists_dict = {} +for i in range(0, len(loaded_tuple), 5): + chunk = list(loaded_tuple[i:i+5]) + list_name = f"list_{i//5 + 1}" + lists_dict[list_name] = chunk + +# Вывод созданных списков +for list_name, chunk in lists_dict.items(): + print(f"{list_name} = {chunk}") \ No newline at end of file diff --git a/TEMA6/zapis1.txt b/TEMA6/zapis1.txt new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis2.bin b/TEMA6/zapis2.bin new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis3.txt b/TEMA6/zapis3.txt new file mode 100644 index 0000000..8132aa8 --- /dev/null +++ b/TEMA6/zapis3.txt @@ -0,0 +1,3 @@ +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] diff --git a/TEMA6/zapis4.txt b/TEMA6/zapis4.txt new file mode 100644 index 0000000..b2ba8ec --- /dev/null +++ b/TEMA6/zapis4.txt @@ -0,0 +1 @@ +Иванов И. 1Петров П. 2Сидоров С. 3 \ No newline at end of file diff --git a/TEMA6/zapis5.txt b/TEMA6/zapis5.txt new file mode 100644 index 0000000..f84efdc --- /dev/null +++ b/TEMA6/zapis5.txt @@ -0,0 +1,3 @@ +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 diff --git a/TEMA6/zapis6.mnz b/TEMA6/zapis6.mnz new file mode 100644 index 0000000..cd522d0 Binary files /dev/null and b/TEMA6/zapis6.mnz differ diff --git a/TEMA6/zapis7.2ob b/TEMA6/zapis7.2ob new file mode 100644 index 0000000..80974e7 Binary files /dev/null and b/TEMA6/zapis7.2ob differ