diff --git a/TEMA6/1.png b/TEMA6/1.png new file mode 100644 index 0000000..08567d9 Binary files /dev/null and b/TEMA6/1.png differ diff --git a/TEMA6/2.png b/TEMA6/2.png new file mode 100644 index 0000000..cbe0b64 Binary files /dev/null and b/TEMA6/2.png differ diff --git a/TEMA6/3.png b/TEMA6/3.png new file mode 100644 index 0000000..4519afa Binary files /dev/null and b/TEMA6/3.png differ diff --git a/TEMA6/4.png b/TEMA6/4.png new file mode 100644 index 0000000..47a9ec8 Binary files /dev/null and b/TEMA6/4.png differ diff --git a/TEMA6/5.png b/TEMA6/5.png new file mode 100644 index 0000000..7ff47fb Binary files /dev/null and b/TEMA6/5.png differ diff --git a/TEMA6/6.png b/TEMA6/6.png new file mode 100644 index 0000000..4f4289a Binary files /dev/null and b/TEMA6/6.png differ diff --git a/TEMA6/7.png b/TEMA6/7.png new file mode 100644 index 0000000..1acab58 Binary files /dev/null and b/TEMA6/7.png differ diff --git a/TEMA6/8.png b/TEMA6/8.png new file mode 100644 index 0000000..a1c7b8a Binary files /dev/null and b/TEMA6/8.png differ diff --git a/TEMA6/9.png b/TEMA6/9.png new file mode 100644 index 0000000..a877312 Binary files /dev/null and b/TEMA6/9.png differ diff --git a/TEMA6/IKZ.md b/TEMA6/IKZ.md new file mode 100644 index 0000000..298741b --- /dev/null +++ b/TEMA6/IKZ.md @@ -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}") +``` \ No newline at end of file diff --git a/TEMA6/IKZ.py b/TEMA6/IKZ.py new file mode 100644 index 0000000..67e2d37 --- /dev/null +++ b/TEMA6/IKZ.py @@ -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}") diff --git a/TEMA6/task.md b/TEMA6/task.md new file mode 100644 index 0000000..eae500c --- /dev/null +++ b/TEMA6/task.md @@ -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) + +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) + +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 +``` \ 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/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..edd0c45 --- /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..ecde2d7 --- /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..ad10085 Binary files /dev/null and b/TEMA6/zapis6.mnz differ diff --git a/TEMA6/zapis6.txt b/TEMA6/zapis6.txt new file mode 100644 index 0000000..ecde2d7 --- /dev/null +++ b/TEMA6/zapis6.txt @@ -0,0 +1,3 @@ + . 1 + . 2 + . 3 diff --git a/TEMA6/zapis7.2ob b/TEMA6/zapis7.2ob new file mode 100644 index 0000000..833483f Binary files /dev/null and b/TEMA6/zapis7.2ob differ