Этот коммит содержится в:
2025-11-21 06:29:43 +03:00
родитель 24304cc956
Коммит 1fb2abd14e
51 изменённых файлов: 940 добавлений и 162 удалений

1
TEMA6/Stroka.txt Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
запись строки в файл

Двоичные данные
TEMA6/data_file.dat Обычный файл

Двоичный файл не отображается.

Двоичные данные
TEMA6/image.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 59 KiB

Двоичные данные
TEMA6/images/3.1.2.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 48 KiB

Двоичные данные
TEMA6/images/3.1.3.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 56 KiB

Двоичные данные
TEMA6/images/4.1.2.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 102 KiB

Двоичные данные
TEMA6/images/4.1.4.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 125 KiB

Двоичные данные
TEMA6/images/6.1.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.1 KiB

Двоичные данные
TEMA6/images/7.1.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 59 KiB

Просмотреть файл

@@ -103,231 +103,673 @@ sys.stdout.write('Функция write\n')
Функция write Функция write
``` ```
## 2. Цикл по перечислению – управляющая инструкция for. ## 2. Ввод данных с клавиатуры.
***Общее правило написания:*** ### 2.1. Для ввода используйте уже знакомую функцию input.
for <Объект-переменная цикла> in <объект>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
< отступы ><Блок инструкций 2 – если в цикле не сработал break>]
>Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break.
Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием.
### 2.1. Простой цикл.
```python ```python
temperatura=5 psw=input('Введите пароль:')
for i in range(3,18,3): print(psw)
temperatura+=i print(type(psw))
print(temperatura)
``` ```
Ответ программы: Ответ программы:
```shell ```shell
50 Введите пароль:123
123
<class 'str'>
``` ```
### 2.2. Более сложный цикл. ### 2.2. Ввод с контролем значения.
*Пусть вводится число, которое должно находиться в интервале значений от 17.5 до 23.8.*
```python ```python
sps=[2,15,14,8] while True:
for k in sps: znach=float(input('Задайте коэф.усиления = '))
if len(sps)<=10:sps.append(sps[0]) if znach<17.5 or znach>23.8:
else: break print('Ошибка!')
print("После первого цикла:",sps) else:
sps=[2,15,14,8] break
for k in sps[:]:
if len(sps)<=10:sps.append(sps[0])
else: break
print("После второго цикла:",sps)
``` ```
Ответ программы: Ответ программы:
```shell ```shell
После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2] Задайте коэф.усиления = 15.4
После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2] Ошибка!
Задайте коэф.усиления = 21.6
``` ```
>Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным). ### 2.3. Ввод и обработка выражения, подлежащего расчету.
### 2.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.
```python ```python
import random as rn import math
sps5=[] print(eval(input('введите выражение для расчета = ')))
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
``` ```
Ответ программы (1 попытка): Ответ программы:
```shell ```shell
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
``` ```
Ответ программы (2 попытка): ## 3. Ввод-вывод при работе с файлами.
```shell
484
```
Ответ программы (3 попытка): ***Работа с файлом требует указания источника данных - полного имени файла с путем доступа к его расположению. Обычно наибольшие затруднения вызывает корректная локализация этого пути.***
```shell
450
```
Ответ программы (4 попытка): ### 3.1. Функции для работы с путем к файлу.
```shell
``` >Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой.Эти функции собраны в модуле os. Поэтому при работе с файлами надо импортировать этот модуль командой
import os
Ответ программы (5 попытка): Как и в других системах, в среде Python в любой момент времени подразумевается некоторый рабочий каталог. Какой рабочий каталог установлен в текущий момент времени? Это можно узнать с помощью функции
```shell os.getcwd (cwd = current working directory).
359 os.getcwd()
``` Сохраните этот путь в переменной с именем, совпадающим с вашей фамилией в латинской транскрипции. Отобразите её значение с помощью функции print.
>Объяснение поведения программы:
Почему вывод значения ss бывает не всегда:
else относится к циклу for, а не к if
Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается.
### 2.4. Пример с символьной строкой.
```python ```python
stroka='Это – автоматизированная система' import os
stroka1="" TerekhovFV=os.getcwd()
for ss in stroka: print(TerekhovFV)
stroka1+=" "+ss ```
Ответ программы:
```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())
```
Ответ программы:
```shell
/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')
```
Ответ программы:
![Удалена директория test_directory](images/3.1.3.png)
**rmdir работает только с пустыми директориями! Для удаления непустых директорий нужно использовать shutil.rmtree().**
*Фунция os.listdir(path) - возвращает список файлов и директорий:*
```python
import os
print(os.listdir())
print(type(os.listdir()))
```
Ответ программы:
```shell
['TEMA4', 'TEMA3', 'TEMA2', 'TEMA5', 'README.md', '.gitignore', 'TEMA9', 'TEMA0', 'TEMA7', 'TEMA6', 'TEMA1', 'TEMA8', '.git']
<class 'list'>
```
*Фунция 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')))
```
Ответ программы:
```shell
False
True
<class 'bool'>
```
*С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему:*
```python
import os
fil=os.path.abspath("report.md")
print(fil)
```
Ответ программы:
```shell
/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)
```
Ответ программы:
```shell
/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs
```
*Выделить имя файла/конечной директории из этой строки с отбрасыванием пути можно с помощью функции os.path.basename:*
```python
import os
fil=os.path.abspath("report.md")
drkt=os.path.dirname(fil)
print(os.path.basename(drkt))
```
Ответ программы:
```shell
python-labs
```
*Функция os.path.split разделяет путь к файлу или директории на корневую часть пути и имя файла или имя директории. Возвращает кортеж, содержащий два элемента:*
```python
import os
fil=os.path.abspath("report.md")
drkt=os.path.dirname(fil)
print(os.path.split(drkt))
print(type(os.path.split(drkt)))
```
Ответ программы:
```shell
('/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs', 'python-labs')
<class 'tuple'>
```
*С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции. Возвращаемое значение: True или False.*
```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"))
```
Ответ программы:
```shell
True
False
```
*Проверьте наличие файла с известным расположением с помощью функции os.path.isfile, аргументом которой должна быть символьная строка с путем и именем интересующего файла. Возвращаемое значение: True или False.*
```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"))
```
Ответ программы:
```shell
True
False
```
## 4. Общая схема работы с файлом.
*Для обмена данными с файлом необходимо выполнить следующие операции:*
* Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
* Выполнение одной или нескольких операций обмена данными с файлом;
* Закрытие файла.
### 4.1. Открытие файла для записи или чтения данных – функция open.
*При открытии файла необходимо указать имя файлы (с путем, если он не в рабочем каталоге) и цель работы с ним. Для открытия используется функция open.*
```python
help(open)
```
Ответ программы:
```shell
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')
```
Ответ программы:
![Создан файл zapis1.txt](images/4.1.2.png)
*Здесь fp – это файловый объект, который в других языках программирования обычно называют файловой переменной. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла. В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования (w=write – для записи).*
*Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла:*
```python
fp=open('zapis1.txt','w')
```
*Тип и список атрибутов переменной fp:*
```python
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))
```
Ответ программы:
```shell
<class '_io.TextIOWrapper'>
['_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+')
```
Ответ программы:
![Создан файл zapis2.bin](images/4.1.4.png)
***В бинарный файл можно без преобразования записывать объекты любого типа.***
*Если файл – символьный, то его тип обозначается «t», но это – значение по умолчанию и его можно не указывать. В символьный файл можно записывать только объекты типа str. Объекты других типов надо перед записью преобразовать к этому типу.*
### 4.2. Закрытие файла.
*Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. Это делается с помощью метода close, применяемого к объекту – файловой переменной.*
```python
fp.close()
```
### 4.3. Запись информации в файл с помощью метода write.
***Метод write относится к объекту – файловой переменной.***
```python
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]
```
```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(stroka1)
print(stroka2)
``` ```
Ответ программы: Ответ программы:
```shell ```shell
Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а 1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
``` ```
### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом. ### 5.3. Чтение информации с помощью методов readline и readlines.
*Эти методы позволяют прочитать из файла, начиная с текущего положения маркера, соответственно, одну строку символов (совокупность байт) или все строки (все байты).*
```python ```python
import math import os
import pylab dirr=os.path.dirname(os.path.abspath("report.md"))
fp=open(dirr + '/TEMA6/zapis3.txt')
sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] stroka1=fp.readline()
stroka2=fp.readlines()
pylab.plot(sps2) fp.close()
pylab.title('Синусоидальный сигнал') print(stroka1)
pylab.xlabel('Отсчеты') print(stroka2)
pylab.ylabel('Амплитуда')
pylab.grid(True)
pylab.show()
```
Ответ программы:
![График](Graf_2.5.png)
## 3. Цикл «пока истинно условие» – управляющая инструкция while.
***Общее правило написания:***
while <Условие>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
<отступы><Блок инструкций 2 – если в цикле не сработал break>]
>Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия.
### 3.1. Цикл со счётчиком.
```python
rashod=300
while rashod:
print("Расход=",rashod)
rashod-=50
``` ```
Ответ программы: Ответ программы:
```shell ```shell
Расход= 300 [1, 2, 3, 4]
Расход= 250
Расход= 200 ['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
Расход= 150
Расход= 100
Расход= 50
``` ```
Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False. ## 6. Ввод-вывод объектов с использованием функций из модуля pickle.
### 3.2. Пример с символьной строкой. *В модуле pickle содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти.*
### 6.1. Запись.
```python ```python
import math import os
stroka='Расчет процесса в объекте регулирования' import pickle
i=0 mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
sps2=[] fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','wb') # Бинарный файл – на запись
while i<len(stroka): pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
r=1-2/(1+math.exp(0.1*i)) fp.close()
sps2.append(r)
print('Значение в момент',i,"=",r)
i+=1
``` ```
Ответ программы: Ответ программы:
![График 3.2](Graf_3.2.png) ![Создан файл zapis6.mnz](images/6.1.png)
### 6.2. Чтение.
### 3.3. Определение, является ли число простым (делится только на самого себя или 1).
```python ```python
# Проверка одного числа import os
chislo = 267 import pickle
kandidat = chislo // 2 fp=open(os.path.dirname(os.path.abspath("report.md")) + '/TEMA6/zapis6.mnz','rb')
while kandidat > 1: mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
if chislo % kandidat == 0: fp.close()
print(chislo, ' имеет множитель ', kandidat) print(mnoz2)
break
kandidat -= 1
else:
print(chislo, ' является простым!')
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=' ')
``` ```
Ответ программы: Ответ программы:
```shell ```shell
267 имеет множитель 89 {'iPhone', 'table', 'pen', 'book'}
Простые числа в диапазоне от 250 до 300:
251 257 263 269 271 277 281 283 293
``` ```
### 3.4. Continue. **Объясните, почему он не совпадает с тем, что было задано при создании mnoz1. Инструкцией проверьте два объекта: mnoz1 и mnoz2 на совпадение.**
>Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку.
Пример: Вывод четных чисел от 1 до 10 с использованием continue.
```python ```python
for i in range(1, 11): import os
if i % 2 != 0: import pickle
continue
print(i, end=' ') 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)
``` ```
Ответ программы: Ответ программы:
```shell ```shell
2 4 6 8 10 {'book', 'iPhone', 'table', 'pen'}
{'book', 'iPhone', 'table', 'pen'}
True
False
``` ```
**Почему порядок элементов отличается от исходного?**
* Множество (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
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
запись строки в файл
```

84
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']
```

3
TEMA6/task2.1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
psw=input('Введите пароль:')
print(psw)
print(type(psw))

6
TEMA6/task2.2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,6 @@
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break

2
TEMA6/task2.3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
import math
print(eval(input('введите выражение для расчета = ')))

5
TEMA6/task3.1.1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,5 @@
import os
TerekhovFV=os.getcwd()
print(TerekhovFV)
os.chdir('/Users/fedorterekhov/Library')
print(os.getcwd())

5
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"))

5
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"))

2
TEMA6/task3.1.2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
import os
os.mkdir('TEMA6/test_directory')

2
TEMA6/task3.1.3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
import os
os.rmdir('TEMA6/test_directory')

3
TEMA6/task3.1.4.py Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
import os
print(os.listdir())
print(type(os.listdir()))

4
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')))

3
TEMA6/task3.1.6.py Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
import os
fil=os.path.abspath("report.md")
print(fil)

4
TEMA6/task3.1.7.py Обычный файл
Просмотреть файл

@@ -0,0 +1,4 @@
import os
fil=os.path.abspath("report.md")
drkt=os.path.dirname(fil)
print(drkt)

4
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))

5
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)))

1
TEMA6/task4.1.1.py Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
help(open)

4
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')

6
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))

4
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+')

9
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()

9
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()

8
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()

7
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()

11
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)

12
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)

8
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)

8
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)

6
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()

6
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)

16
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)

15
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)

9
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()

11
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

41
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}")

0
TEMA6/zapis1.txt Обычный файл
Просмотреть файл

0
TEMA6/zapis2.bin Обычный файл
Просмотреть файл

3
TEMA6/zapis3.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

1
TEMA6/zapis4.txt Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
Иванов И. 1Петров П. 2Сидоров С. 3

3
TEMA6/zapis5.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
Иванов И. 1
Петров П. 2
Сидоров С. 3

Двоичные данные
TEMA6/zapis6.mnz Обычный файл

Двоичный файл не отображается.

Двоичные данные
TEMA6/zapis7.2ob Обычный файл

Двоичный файл не отображается.