From f306323f805df67102cd35e49f7160445a3bc015 Mon Sep 17 00:00:00 2001 From: MakhnovGA Date: Fri, 19 Dec 2025 11:56:29 +0300 Subject: [PATCH] done lab9 --- TEMA9/Mod3.py | 12 +++ TEMA9/Module1.py | 20 ++++ TEMA9/Module2.py | 31 ++++++ TEMA9/Res33.txt | 1 + TEMA9/SAU.py | 21 ++++ TEMA9/binarfile.bin | Bin 0 -> 54 bytes TEMA9/image-1.png | Bin 0 -> 29348 bytes TEMA9/image.png | Bin 0 -> 26816 bytes TEMA9/main_SAU.py | 18 ++++ TEMA9/report.md | 221 +++++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 80 ++++++++++++++++ TEMA9/task_module.py | 53 +++++++++++ TEMA9/test.md | 93 ++++++++++++++++++ 13 files changed, 550 insertions(+) create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/Module1.py create mode 100644 TEMA9/Module2.py create mode 100644 TEMA9/Res33.txt create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/binarfile.bin create mode 100644 TEMA9/image-1.png create mode 100644 TEMA9/image.png create mode 100644 TEMA9/main_SAU.py create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md create mode 100644 TEMA9/task_module.py create mode 100644 TEMA9/test.md diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..c08d248 --- /dev/null +++ b/TEMA9/Mod3.py @@ -0,0 +1,12 @@ +class Class1: + def zad_zn(self,znach): + self.data=znach + def otobrazh(self): + print(self.data) + +class Class2(Class1): + def otobrazh(self): + print('значение=',self.data) + +def otobrazh(objekt): + print('значение объекта=',objekt) \ No newline at end of file diff --git a/TEMA9/Module1.py b/TEMA9/Module1.py new file mode 100644 index 0000000..9abb019 --- /dev/null +++ b/TEMA9/Module1.py @@ -0,0 +1,20 @@ +def anomal_object_list(tupl: tuple, T1: float,T2: float): + new_tupl = [] + for i in range(len(tupl)): + if T2 < tupl[i] < T1: + new_tupl.append(i) + new_tupl = tuple(new_tupl) + return new_tupl + +def anomal_object_change(general_tuple: tuple, anomal_list: list): + X1 = [] + for i in range(len(general_tuple)): + if general_tuple[i] not in anomal_list: + X1.append(general_tuple[i]) + else: + if i == 0 or i == len(general_tuple)-1: + X1.append(sum(general_tuple)/len(general_tuple)) + else: + X1.append((general_tuple[i-1]+general_tuple[i+1])/2) + X1 = tuple(X1) + return X1 \ No newline at end of file diff --git a/TEMA9/Module2.py b/TEMA9/Module2.py new file mode 100644 index 0000000..ffd468b --- /dev/null +++ b/TEMA9/Module2.py @@ -0,0 +1,31 @@ +from Module1 import anomal_object_change, anomal_object_list +import os, pickle +os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9') + +running = True +while running: + name = input("Введите имя файла: ") + try: + with open(name, "rb") as f: + file_tuple = pickle.load(f) + print(file_tuple) + try: + T1 = float(input("Введите значение T1: ")) + T2 = float(input("Введите значение T2: ")) + anomal_tuple = anomal_object_list(file_tuple, T1, T2) + if len(anomal_tuple) != 0: + anomal_tuple = [file_tuple[i] for i in anomal_tuple] + print("Список аномальных значений: ", anomal_tuple) + rebuild_list = anomal_object_change(file_tuple, anomal_tuple) + print("Новый список: ", rebuild_list) + with open("Res33.txt", "w+") as new_file: + new_file.write(str(rebuild_list)) + print("Новый лист записан!") + running = False + else: + print('Лист анмоальных значений пуст!') + except ValueError or TypeError: + print("Неверно введеные значения T1 или T2") + #running = False + except FileNotFoundError: + print("Неверный вывод файла, повторите заново") diff --git a/TEMA9/Res33.txt b/TEMA9/Res33.txt new file mode 100644 index 0000000..fe2f22e --- /dev/null +++ b/TEMA9/Res33.txt @@ -0,0 +1 @@ +(1, 2, 3, 4, 12, 89, 1231, 3, 41, 23, 45, 1342, 12, 12, 1, 5, 2, 4, 3.0, 2, 3, 24) \ No newline at end of file diff --git a/TEMA9/SAU.py b/TEMA9/SAU.py new file mode 100644 index 0000000..78d35db --- /dev/null +++ b/TEMA9/SAU.py @@ -0,0 +1,21 @@ +class SAU: + def __init__(self,zn_param): + self.param=zn_param + self.ypr=[0,0] + + def zdn_zn(self,upr): + self.x=upr + + def model(self): + def inerz(x,T,yy): + return (x+T*yy)/(T+1) + + y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2 + y1=self.param[0]*y0 #Усилитель1 + y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1 + y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2 + self.ypr[0]=y2 + self.ypr[1]=y3 + + def otobraz(self): + print('y=',self.ypr[1]) \ No newline at end of file diff --git a/TEMA9/binarfile.bin b/TEMA9/binarfile.bin new file mode 100644 index 0000000000000000000000000000000000000000..8973c32fe4bf905c433f203571f7efc28609b990 GIT binary patch literal 54 zcmZo*jxA)+@MiR8@@DpC@#gW4^gYi4WNLbgd+Ykzu>wVSfU>MWc@}SWuqugEJpecP B3cvsW literal 0 HcmV?d00001 diff --git a/TEMA9/image-1.png b/TEMA9/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7d3c64ae79bc4d6673d7c19e28fde82615a3d8 GIT binary patch literal 29348 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 class Class1: +... def zad_zn(self,znach): +... self.data=znach +... def otobrazh(self): +... print(self.data) +... +>>> z1 = Class1() +>>> z2 = Class1() +>>> z1.zad_zn('экз.класса 1') +>>> z2.zad_zn(-632.453) +>>> z1.otobrazh() +экз.класса 1 +>>> z2.otobrazh() +-632.453 +>>> z1.data='Новое значение атрибута у экз.1' +>>> z1.otobrazh() +Новое значение атрибута у экз.1 +``` +### 2.2. Создание класса-наследника +```py +>>> class Class2(Class1): +... def otobrazh(self): +... print('значение=',self.data) +... +>>> z3=Class2() +>>> dir(z3) +['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', +'__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn'] +>>> z3.zad_zn('Совсем новое') +>>> z3.otobrazh() +значение= Совсем новое +``` +Сработал метод класса-наследника (Class2) +```py +>>> z1.otobrazh() +Новое значение атрибута у экз.1 +>>> del z1,z2,z3 +``` +Значение z1 не изменилось. + +## 3. Использование классов, содержащихся в модулях +[Созданный файл Mod3](Mod3.py) +```py +>>> import os +>>> os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9') +>>> from Mod3 import Class1 +>>> z4 = Class1() +>>> z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + File "C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA9\Mod3.py", line 5, in otobrazh + print(self.data) +AttributeError: 'Class1' object has no attribute 'data' +Объясните, почему при выполнении последней инструкции возникла ошибка? +``` +Ошибка возникла, так как мы не вызывали функцию zad_zn(), т.е. мы пытаемся напечатать несущществующий объект +```py +>>> z4.data='значение данного data у экз.4' +>>> z4.otobrazh() +значение данного data у экз.4 +>>> del z4 +>>> import Mod3 +>>> z4=Mod3.Class2() +>>> z4.zad_zn('Класс из модуля') +>>> z4.otobrazh() +значение= Класс из модуля +>>> Mod3.otobrazh('Объект') +значение объекта= Объект +``` +Для z4 мы задали значение через метод zad_zn(), после чего он сохранился внутри класса переменной. При выводе z4.otobrazh() выводится то значение, которое сохранено внутри класса переменной. Mod3.otobrazh() - это метод класса Class2, и при исполнении инструкции Mod3.otobrazh('Объект') он запустит функцию otobrazh внутри класса и выполнит её, выведя "значение объекта= Объект" + +## 4. Использование специальных методов + +```py +>>> class Class3(Class2): +... def __init__(self,znach): +... self.data=znach +... def __add__(self,drug_zn): +... return Class3(self.data+drug_zn) +... def zad_dr_zn(self,povtor): +... self.data*=povtor +... +>>> z5=Class3('abc') +>>> z6=z5+'def' +>>> z6.otobrazh() +значение= abcdef +>>> z6.zad_dr_zn(3) +>>> z6.otobrazh() +значение= abcdefabcdefabcdef +``` +## 5. Присоединение атрибутов к классу. + +```py +>>> dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +>>> Class3.fio='Иванов И.И.' +>>> dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +>>> z7=Class3(123) +>>> dir(z7) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +>>> dir(z7)==dir(Class3) +False +``` +Не совпадает. В dir(z7), по сравнению с dir(Class3), указаны также атрибуты, относящиеся непосредственно к объекту. +```py +>>> z7.rozden='1987' +>>> dir(z7) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn'] +>>> dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +``` +## 6. Выявление родительских классов +```py +>>> Class3.__bases__ +(,) +>>> Class2.__bases__ +(,) +>>> Class1.__bases__ +(,) +>>> Class3.__mro__ +(, , , ) +>>> ZeroDivisionError.__mro__ +(, , , , ) +``` + +## 7. Создание свойства класса. + +```py +>>> class Class4: +... def __init__(sam,znach): +... sam.__prm=znach +... def chten(sam): +... return sam.__prm +... def zapis(sam,znch): +... sam.__prm=znch +... def stiran(sam): +... del sam.__prm +... svojstvo=property(chten,zapis,stiran) +... +>>> exempl=Class4(12) +>>> exempl.svojstvo +12 +>>> exempl.svojstvo=45 +>>> print(exempl.svojstvo) +45 +>>> del exempl.svojstvo +>>> exempl.svojstvo +Traceback (most recent call last): + File "", line 1, in + File "", line 5, in chten +AttributeError: 'Class4' object has no attribute '_Class4__prm' +``` +Мы удалили атрибут, из-за чего и появляется такой вывод + +## 8. Пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. +Создали [модуль с классом](SAU.py) и [программу для тестирования класса](main_SAU.py) + +```py +Для значений prm=[2.5,4,1.3,0.8]: + +>>>y= 0.0 +y= 0.2173913043478261 +y= 0.4763705103969754 +y= 0.686594887811293 +y= 0.8199324616478645 +y= 0.8837201137353929 +y= 0.8994188484874774 +y= 0.8892777072047301 +y= 0.870097963179993 +y= 0.8518346102696789 +y= 0.8387499784485772 +y= 0.8314204114211459 +y= 0.8286051955249649 +y= 0.8285656555914835 +y= 0.8297915186846528 +y= 0.8312697736438287 +y= 0.8324765218921963 +y= 0.8332456979978418 +y= 0.8336163607592184 +y= 0.8337101315489143 +y= 0.833654237067147 +``` +![alt text](image.png) + +```py +Для значений prm=[5,7,3.2,0.12] + +>>>y= 0.0 +y= 0.1488095238095238 +y= 0.3897392290249433 +y= 0.6806095454054638 +y= 0.9909226351160266 +y= 1.2994207599175436 +y= 1.5920185212177194 +y= 1.8600828134550884 +y= 2.099026493353568 +y= 2.3071781612214326 +y= 2.4848898368847023 +y= 2.633845723665706 +y= 2.7565379470594364 +y= 2.855878574700046 +y= 2.93492096576045 +y= 2.996667275716888 +y= 3.043942564463233 +y= 3.0793193015101665 +y= 3.1050790642314476 +y= 3.123200855367947 +y= 3.1353677230128536 +``` +![alt text](image-1.png) \ No newline at end of file diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..baa1e4f --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,80 @@ +# Общее контрольное задание по теме 9 + +Махнов Георгий, А-01-23 + +## Задание + +Создайте и запишите в модуль класс, содержащий следующие компоненты: +- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; +- метод для обеспечения операции повышения оклада сотрудника на заданное значение; +- метод для обеспечения перевода сотрудника из одного отдела в другой; +- метод для изменения должности сотрудника; +- свойство, содержащее перечень (список) поощрений сотрудника. +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобра-зите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. +  +## Выполнение + +```py + +class Workposition: + def __init__(self, fio = "Иванов И.И.", otdel = "Моделирование", dolznost = "Младший помощник", oklad = 20000): + self.fio = fio + self.otdel = otdel + self.dolznost = dolznost + self.oklad = oklad + self.__rewards = [] + + def raise_money(self, amount_on = int): + if amount_on > 0: + print("YAY") + self.oklad += amount_on + else: + print("Сумма увеличения должна быть больше 0!") + def position_place(self, new_place = str): + self.otdel = new_place + + def position_post(self, new_post = str): + self.dolznost = new_post + + + @property + def reward(self): + return self.__rewards + + def get_reward(self, get_reward=str): + self.__rewards.append(f"Поощрение сотрудника: {get_reward}") + + + + + +employee1 = Workposition("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 120000) + +employee2 = Workposition("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 150000) + +print(employee1.fio, employee2.fio) + +employee2.position_place("МГТУ") +print(employee2.otdel) + +print(f"До повышения: {employee1.oklad}") +employee1.raise_money(20000) +print(f"После повышения: {employee1.oklad}") + +employee2.position_post("Глава кафедры") +print(employee2.dolznost) + + + +employee2.get_reward("Лучший результат в сфере обучения студентов по кафедре") +print(employee2.reward) + + +>>>Толчеев В.О. Бобряков А.В. +МГТУ +До повышения: 150000 +YAY +После повышения: 170000 +Глава кафедры +['Лучший результат в сфере обучения студентов по кафедре'] +``` \ No newline at end of file diff --git a/TEMA9/task_module.py b/TEMA9/task_module.py new file mode 100644 index 0000000..30cd427 --- /dev/null +++ b/TEMA9/task_module.py @@ -0,0 +1,53 @@ +class Workposition: + def __init__(self, fio = "Иванов И.И.", otdel = "Моделирование", dolznost = "Младший помощник", oklad = 20000): + self.fio = fio + self.otdel = otdel + self.dolznost = dolznost + self.oklad = oklad + self.__rewards = [] + + def raise_money(self, amount_on = int): + if amount_on > 0: + print("YAY") + self.oklad += amount_on + else: + print("Сумма увеличения должна быть больше 0!") + def position_place(self, new_place = str): + self.otdel = new_place + + def position_post(self, new_post = str): + self.dolznost = new_post + + + @property + def reward(self): + return self.__rewards + + def get_reward(self, get_reward=str): + self.__rewards.append(f"Поощрение сотрудника: {get_reward}") + + + + + +employee1 = Workposition("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 120000) + +employee2 = Workposition("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 150000) + +print(employee1.fio, employee2.fio) + +employee2.position_place("МГТУ") +print(employee2.otdel) + +print(f"До повышения: {employee1.oklad}") +employee1.raise_money(20000) +print(f"После повышения: {employee1.oklad}") + +employee2.position_post("Глава кафедры") +print(employee2.dolznost) + + + +employee2.get_reward("Лучший результат в сфере обучения студентов по кафедре") +print(employee2.reward) + diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..e4ac9ee --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,93 @@ +# Индивидуальное контрольное задание по модулю 3 + +Махнов Георгий, А-01-23 + +## Задание 8 +M3_8 +1) Создайте модуль М1, содержащий две функции: + +-функция 1: аргументы - кортеж Х с последовательностью отсчетов некоторого сигнала и два числовых параметра Т1 и Т2; в функции должен создаваться список с индексами "аномальных" отсчетов сигнала, удовлетворяющих неравенствам X < T1 или X > T2; + +- функция 2: аргументы - кортеж Х с отсчетами сигнала и список "аномальных" значений; в функции должен создаваться новый кортеж Х1, в котором элементы, не являющиеся "аномальными", совпадают с соответствующими элементами из Х, а "аномальные" значения заменяются по правилу: если это первый или последний элемент, то он заменяется на среднее значение по кортежу Х, а остальные - заменяются на полусумму соседних по индексу элементов. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя бинарного файла с данными (кортежем); проверяется наличие файла и при отсутствии - повторение запроса; + +- запрашиваются и вводятся граничные значения Т1 и Т2 с проверкой Т1,T2; + +- из указанного файла считывается кортеж Х с сигналом; + +- с применением функции 1 создается список с индексами "аномальных" отсчетов; результат отображается на экране; + +- если список "аномальных отсчетов не пустой, то с применением функции 2 создается кортеж Х1 с "исправленным" сигналом, отображается на экране и записывается в текстовый файл Res33.txt; в ином случае выдается сообщение об отсутствии "аномальных" отсчетов. + +## Выполнение + +Модуль 1 + +```py +def anomal_object_list(tupl: tuple, T1: float,T2: float): + new_tupl = [] + for i in range(len(tupl)): + if T2 < tupl[i] < T1: + new_tupl.append(i) + new_tupl = tuple(new_tupl) + return new_tupl + +def anomal_object_change(general_tuple: tuple, anomal_list: list): + X1 = [] + for i in range(len(general_tuple)): + if general_tuple[i] not in anomal_list: + X1.append(general_tuple[i]) + else: + if i == 0 or i == len(general_tuple)-1: + X1.append(sum(general_tuple)/len(general_tuple)) + else: + X1.append((general_tuple[i-1]+general_tuple[i+1])/2) + X1 = tuple(X1) + return X1 +``` + +Модуль 2 + +```py +from Module1 import anomal_object_change, anomal_object_list +import os, pickle +os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9') + +running = True +while running: + name = input("Введите имя файла: ") + try: + with open(name, "rb") as f: + file_tuple = pickle.load(f) + try: + T1 = float(input("Введите значение T1: ")) + T2 = float(input("Введите значение T2: ")) + anomal_tuple = anomal_object_list(file_tuple, T1, T2) + if len(anomal_tuple) != 0: + anomal_tuple = [file_tuple[i] for i in anomal_tuple] + print("Список аномальных значений: ", anomal_tuple) + rebuild_list = anomal_object_change(file_tuple, anomal_tuple) + print("Новый список: ", rebuild_list) + with open("Res33.txt", "w+") as new_file: + new_file.write(str(rebuild_list)) + print("Новый лист записан!") + running = False + else: + print('Лист анмоальных значений пуст!') + except ValueError or TypeError: + print("Неверно введеные значения T1 или T2") + #running = False + except FileNotFoundError: + print("Неверный вывод файла, повторите заново") + + +>>> Введите имя файла: binarfile.bin +Введите значение T1: 12 +Введите значение T2: 5 +Список аномальных значений: [7] +Новый список: (1, 2, 3, 4, 12, 89, 1231, 3, 41, 23, 45, 1342, 12, 12, 1, 5, 2, 4, 3.0, 2, 3, 24) +Новый лист записан! +``` \ No newline at end of file