KhatiukhinYS 1 месяц назад
Родитель eacca83cea
Сommit b76b2b2f44

Двоичные данные
TEMA6/1.png

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

После

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

Двоичные данные
TEMA6/2.png

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

После

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

Двоичные данные
TEMA6/3.png

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

После

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

Двоичные данные
TEMA6/4.png

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

После

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

Двоичные данные
TEMA6/5.png

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

После

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

Двоичные данные
TEMA6/6.png

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

После

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

Двоичные данные
TEMA6/7.png

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

После

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

Двоичные данные
TEMA6/8.png

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

После

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

Двоичные данные
TEMA6/9.png

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

После

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

@ -0,0 +1,55 @@
M2_8
1)       Создайте множество с 40 элементами - случайными  числами, равномерно распределенными на интервале от -20 до +10. Числа должны быть округлены до двух знаков после точки.
2)       Запросите у пользователя и введите имя бинарного файла для сохранения множества. Если во введенном имени есть пробелы, замените их на пустые строки.
3)       Запишите множество в бинарный файл с указанным именем.
4)       Удалите из памяти созданное множество.
5)       Прочитайте множество из файла и рассчитайте по его элементам среднее значение. Отобразите его на экране по шаблону: " По <число элементов> среднее = <рассчитанное значение>". Выводимое среднее округлить до двух знаков после точки.
```py
import random
import os
import pickle
import math
os.chdir('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6')
random.seed(5)
#1)
mnoz = set()
for i in range(40):
num = round(random.uniform(-20, 10), 2)
mnoz.add(num)
print(f"Создано множество: {mnoz}")
#2)
fl_name = input('Введите имя бинарного файла: ')
fl_name = fl_name.replace(" ", "")
print(f"Имя Вашего файла: '{fl_name}'")
#3)
fp = open(fl_name, 'wb')
pickle.dump(mnoz, fp)
fp.close()
print(f"Множество записано в Ваш файл: '{fl_name}'")
#4)
del mnoz
print("Множество удалено из памяти")
#5)
try:
fp = open(fl_name, 'rb')
load = pickle.load(fp)
fp.close()
except FileNotFoundError:
print(f"Файл '{file_name}' не найден")
sm = sum(load) / len(load)
sm = round(sm,2)
print(f"По {len(load)} элементам среднее = {sm}")
```

@ -0,0 +1,42 @@
import random
import os
import pickle
import math
os.chdir('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6')
random.seed(5)
#1)
mnoz = set()
for i in range(40):
num = round(random.uniform(-20, 10), 2)
mnoz.add(num)
print(f"Создано множество: {mnoz}")
#2)
fl_name = input('Введите имя бинарного файла: ')
fl_name = fl_name.replace(" ", "")
print(f"Имя Вашего файла: '{fl_name}'")
#3)
fp = open(fl_name, 'wb')
pickle.dump(mnoz, fp)
fp.close()
print(f"Множество записано в Ваш файл: '{fl_name}'")
#4)
del mnoz
print("Множество удалено из памяти")
#5)
try:
fp = open(fl_name, 'rb')
load = pickle.load(fp)
fp.close()
except FileNotFoundError:
print(f"Файл '{file_name}' не найден")
sm = sum(load) / len(load)
sm = round(sm,2)
print(f"По {len(load)} элементам среднее = {sm}")

@ -0,0 +1,320 @@
# Отчет по теме 6
Хатюхин Евгений, А-02-23
# 1 Запустил IDLE
# 2 Изучил вывод данных на экран дисплея
## 2.1 Изучил эхо-вывод
```py
stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'
```
## 2.2 Изучение вывода данных с помощью печати
```py
fff=234.5;gg='Значение температуры = '
print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
print(gg, fff, sep='/')
Значение температуры = /234.5
print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
print()
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
## 2.3 Изучение вывода данных с помощью функции write
```py
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
# 3 Изучение ввода данных с клавиатуры
```py
psw=input('Введите пароль:')
Введите пароль:12345
psw
'12345'
type(psw)
<class 'str'>
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
# 4 Изучение различных способов чтения данных из файла и записи в файл
## 4.1 Изучение модуля os для работы с путями к файлам
mkdir - создает папку в рабочем каталоге (в приложенном фото видно, что в каталоге появилась папка);  
![[Pasted image 20251108152648.png]]
rmdir - удаляет из каталога пустую папку;
![[Pasted image 20251108152738.png]]
listdir - возвращает список имен файлов/папок в указанном каталоге (или если аргумент не указан, то в текущем каталоге);
path.isdir - возвращает true, если папка является существующей в каталоге.
```py
import os
os.getcwd()
'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313'
a = str(os.getcwd())
a
'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313'
os.chdir('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6')
os.getcwd()
'C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6'
os.mkdir("new1")
os.rmdir("new1")
os.listdir()
['.gitkeep', 'task.md']
os.path.isdir("new1")
False
os.path.isdir("task")
False
os.path.isdir("tema")
False
os.path.isdir("report")
False
os.path.isdir("abc")
True
fil=os.path.abspath("report.md")
fil
'C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6\\report.md'
drkt=os.path.dirname(fil)
drkt
'C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6'
name = os.path.basename(fil)
name
'report.md'
head, tail = os.path.split(fil)
head
'C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6'
tail
'report.md'
os.path.exists('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6')
True
os.path.exists('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA8')
True
os.path.exists('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA20')
False
os.path.isfile(fil)
False
os.path.isfile(head+tail)
False
os.path.isfile(head+'task.md')
False
fil=os.path.abspath("task.md")
os.path.isfile(fil)
True
```
## 4.2 Изучение обобщенного процесса работы с файлами
Для обмена данными с файлом необходимо выполнить следующие операции:
- Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
- Выполнение одной или нескольких операций обмена данными с файлом;
- Закрытие файла.
## 4.3 Изучение функции open для открытия файлов с разной целью
```py
fp=open(file=drkt+'\\zapis1.txt',mode='w')
fp=open(drkt+'\\zapis1.txt','w')
fp=open('zapis1.txt','w')
type(fp)
<class '_io.TextIOWrapper'>
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']
```
## 4.4 Изучение закрытия файла
```py
fp.close()
```
## 4.5 Изучение функции write для записи данных в текст
```py
sps=list(range(1,13))
sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
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()
```
![[Pasted image 20251108154730.png]]
```py
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
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()
```
![[Pasted image 20251108154854.png]]
```py
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
gh=open('zapis6.txt','w')
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
```
![[Pasted image 20251108155051.png]]
![[Pasted image 20251108155102.png]]
## 4.6 Изучение одного из способов чтения данных из файла с помощью цикла for
```py
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']
sps2=[]
for i in sps1:
sps2.append(int(i))
sps2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
## 4.7 Изучение способа чтения данных из файла с помощью функции read
```py
fp=open('zapis3.txt')
stroka1=fp.read(12)
stroka2=fp.read()
fp.close()
stroka1
'[1, 2, 3, 4]'
stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
```
## 4.8 Изучение чтения данных из файла по строкам
```py
fp=open('zapis3.txt')
s1 = fp.readline()
s2 = fp.readline()
s1
'[1, 2, 3, 4]\n'
s2
'[5, 6, 7, 8]\n'
fp.close()
fp=open('zapis3.txt')
s3 = fp.readlines()
s3
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
## 4.9 Изучение работы с бинарными файлами с помощью модуля pickle
```py
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
fp.close()
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
fp.close()
mnoz2 #Результат не такой как при вводе множества mnoz1, так как множество не имеет повторений и порядка элементов, поэтому автоматически множество обьединило повторяющиеся слова.
{'pen', 'book', 'iPhone', 'table'}
mnoz1 == mnoz2
True
```
![[Pasted image 20251110134630.png]]
```py
fp=open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
pickle.dump(sps3,fp)
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
pickle.dump(sps3,fp)
fp.close()
fp=open('zapis7.2ob','rb')
obj1=pickle.load(fp)
obj2=pickle.load(fp)
fp.close()
obj1
{'pen', 'book', 'iPhone', 'table'}
obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
# 5 Перенаправление потоков ввода и вывода данных
```py
import sys
vr_out=sys.stdout
fc=open('Stroka.txt','w')
sys.stdout=fc
print('запись строки в файл')
sys.stdout=vr_out
print('запись строки на экран')
запись строки на экран
fc.close()
```
![[Pasted image 20251110142228.png]]
```py
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
```

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

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

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

Двоичные данные
TEMA6/zapis6.mnz

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

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

Двоичные данные
TEMA6/zapis7.2ob

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить