From 020d5eee1304e04931651973a53df9c1530efaae Mon Sep 17 00:00:00 2001 From: SavinSA Date: Mon, 8 Dec 2025 02:24:01 +0300 Subject: [PATCH] module9 full --- TEMA9/EMPLOYEES.py | 49 ++++++++++ TEMA9/MAIN.py | 13 +++ TEMA9/Mod3.py | 11 +++ TEMA9/SAU.py | 22 +++++ TEMA9/png1.png | Bin 0 -> 11367 bytes TEMA9/png2.png | Bin 0 -> 18857 bytes TEMA9/report.md | 230 +++++++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 131 ++++++++++++++++++++++++++ 8 files changed, 456 insertions(+) create mode 100644 TEMA9/EMPLOYEES.py create mode 100644 TEMA9/MAIN.py create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/png1.png create mode 100644 TEMA9/png2.png create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md diff --git a/TEMA9/EMPLOYEES.py b/TEMA9/EMPLOYEES.py new file mode 100644 index 0000000..c9d8b3d --- /dev/null +++ b/TEMA9/EMPLOYEES.py @@ -0,0 +1,49 @@ +class Employee: + def __init__(self, fio="null", otdel = "null", dolz = "null", oklad = 0): + self.fio = fio + self.otdel = otdel + self.dolz = dolz + self.oklad = oklad + self.__bonus = [] + + def increase_oklad(self,summa): + self.oklad += summa + print(f'Оклад {self.fio} был повышен на {summa}, новый оклад равен {self.oklad}') + + def move_otdel(self,new_otdel): + old_otdel = self.otdel + self.otdel = new_otdel + + print(f'Сотрудник {self.fio} был переведен из {old_otdel} в {new_otdel}') + + def change_dolz(self,new_dolz): + old_dolz = self.dolz + self.dolz = new_dolz + + print(f'Должность сотрудника {self.fio} была изменена с {old_dolz} на {new_dolz}') + + def give_bonus(self,bonus): + self.__bonus.append(bonus) + print(f'Сотруднику {self.fio} была выражена благодарность: {bonus}') + + @property + def bonuses(self): + return self.__bonus.copy() + + def info_out(self): + print('Информация о сотруднике:') + print(f'\n ФИО: {self.fio}') + print(f'\n Отдел: {self.otdel}') + print(f'\n Должность: {self.dolz}') + print(f'\n Оклад: {self.oklad:.2f}') + + if self.__bonus: + print('Поощрения: ') + for i, poosh in enumerate(self.__bonus, 1): + print(f" {i}. {poosh}") + + else: + print('no bonuses') + + + diff --git a/TEMA9/MAIN.py b/TEMA9/MAIN.py new file mode 100644 index 0000000..acc3868 --- /dev/null +++ b/TEMA9/MAIN.py @@ -0,0 +1,13 @@ +prm=[2.5,4,1.3,0.8] +from SAU import * +xx=[0]+[1]*20 +SAUe=SAU(prm) +yt=[] +for xt in xx: + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobraz() + yt.append(SAUe.ypr[1]) +import pylab +pylab.plot(yt) +pylab.show() diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..98c860e --- /dev/null +++ b/TEMA9/Mod3.py @@ -0,0 +1,11 @@ +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) + diff --git a/TEMA9/SAU.py b/TEMA9/SAU.py new file mode 100644 index 0000000..39cc0e4 --- /dev/null +++ b/TEMA9/SAU.py @@ -0,0 +1,22 @@ +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] + y1=self.param[0]*y0 + y2=inerz(y1,self.param[1],self.ypr[0]) + y3=inerz(y2,self.param[2],self.ypr[1]) + self.ypr[0]=y2 + self.ypr[1]=y3 + + def otobraz(self): + print('y=',self.ypr[1]) + diff --git a/TEMA9/png1.png b/TEMA9/png1.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3292104660850a3f3c3a312cc4812f2ef59e0a GIT binary patch literal 11367 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 QkZC}2kCmhfB@EvDAAWuKFaQ7m literal 0 HcmV?d00001 diff --git a/TEMA9/report.md b/TEMA9/report.md new file mode 100644 index 0000000..cd3dcbf --- /dev/null +++ b/TEMA9/report.md @@ -0,0 +1,230 @@ +# Отчет по Теме 9 + +Савин Семён, А-02-23 + +## 2.1. Создание автономного класса + +```py +>>> 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() +значение= Совсем новое +>>> z1.otobrazh() +новое значение атрибута у экз.1 +>>> del z1,z2,z3 +``` + +## 3. Использование классов, содержащихся в модулях + +![Скриншот содержания файла Mod3.py](png1.png) + +```py +>>> from Mod3 import Class1 +>>> z4 = Class1() +>>> z4.data = 'значение данного data у экз.4' +>>> z4.otobrazh() +значение данного data у экз.4 +>>> import Mod3 +>>> z4 = Mod3.Class2() +>>> z4.zad_zn('Класс из модуля') +>>> z4.otobrazh() +значение= Класс из модуля +>>> Mod3.otobrazh('Объект') +значение объекта= Объект +>>> +``` + +вызов функция выводит значение objekt, Class2 переопределяет otobrazh в Class1 + +## 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') +>>> z5.otobrazh() +значение= 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 +>>> 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__ +(,) +>>> 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 + exempl.svojstvo + File "", line 5, in chten + return sam.__prm +AttributeError: 'Class4' object has no attribute '_Class4__prm' +``` +У экземпляра удаляется атрибут, при последующем чтении метода выходит ошибка отсутствия атрибута + +## 8. Пример представления модели САУ в виде класса + +Содержание файла SAU.py + +```py +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] + y1=self.param[0]*y0 + y2=inerz(y1,self.param[1],self.ypr[0]) + y3=inerz(y2,self.param[2],self.ypr[1]) + self.ypr[0]=y2 + self.ypr[1]=y3 + + def otobraz(self): + print('y=',self.ypr[1]) +``` + +Содержание файла MAIN.py + +```py +prm=[2.5,4,1.3,0.8] +from SAU import * +xx=[0]+[1]*20 +SAUe=SAU(prm) +yt=[] +for xt in xx: + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobraz() + yt.append(SAUe.ypr[1]) +import pylab +pylab.plot(yt) +pylab.show() +``` + +Результат + +```py +================================= RESTART: C:\Users\somas\python-labs\TEMA9\MAIN.py ================================ +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 +``` + +![Скриншот графика](png2.png) \ No newline at end of file diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..7fd04cf --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,131 @@ +# Общее задание по Теме 9 + +## Задание + +Создайте и запишите в модуль класс, содержащий следующие компоненты: +- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; + +- метод для обеспечения операции повышения оклада сотрудника на заданное значение; + +- метод для обеспечения перевода сотрудника из одного отдела в другой; + +- метод для изменения должности сотрудника; + +- свойство, содержащее перечень (список) поощрений сотрудника. + +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобра-зите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. + + +## Решение + +Содержание файла EMPLOYEES.py + +```py +class Employee: + def __init__(self, fio="null", otdel = "null", dolz = "null", oklad = 0): + self.fio = fio + self.otdel = otdel + self.dolz = dolz + self.oklad = oklad + self.__bonus = [] + + def increase_oklad(self,summa): + self.oklad += summa + print(f'Оклад {self.fio} был повышен на {summa}, новый оклад равен {self.oklad}') + + def move_otdel(self,new_otdel): + old_otdel = self.otdel + self.otdel = new_otdel + + print(f'Сотрудник {self.fio} был переведен из {old_otdel} в {new_otdel}') + + def change_dolz(self,new_dolz): + old_dolz = self.dolz + self.dolz = new_dolz + + print(f'Должность сотрудника {self.fio} была изменена с {old_dolz} на {new_dolz}') + + def give_bonus(self,bonus): + self.__bonus.append(bonus) + print(f'Сотруднику {self.fio} была выражена благодарность: {bonus}') + + @property + def bonuses(self): + return self.__bonus.copy() + + def info_out(self): + print('Информация о сотруднике:') + print(f'\n ФИО: {self.fio}') + print(f'\n Отдел: {self.otdel}') + print(f'\n Должность: {self.dolz}') + print(f'\n Оклад: {self.oklad:.2f}') + + if self.__bonus: + print('Поощрения: ') + for i, poosh in enumerate(self.__bonus, 1): + print(f" {i}. {poosh}") + + else: + print('no bonuses') +``` + +Работа модуля + +```py +>>> from EMPLOYEES import Employee +>>> e1 = Employee("Иванов И.И.", "IT", "Программист", 110000) +>>> e2 = Employee("Сидоров С.Е.", "Плановый", "Эконмист", 100000) +>>> e1.info_out() +Информация о сотруднике: + + ФИО: Иванов И.И. + + Отдел: IT + + Должность: Программист + + Оклад: 110000.00 +no bonuses +>>> e2.info_out() +Информация о сотруднике: + + ФИО: Сидоров С.Е. + + Отдел: Плановый + + Должность: Эконмист + + Оклад: 100000.00 +no bonuses +>>> e1.increase_oklad(70000) +Оклад Иванов И.И. был повышен на 70000, новый оклад равен 180000 +>>> e2.move_otdel('Логистика') +Сотрудник Сидоров С.Е. был переведен из Плановый в Логистика +>>> e2.change_dolz('Аналитик') +Должность сотрудника Сидоров С.Е. была изменена с Эконмист на Аналитик +>>> e1.give_bonus('За успешную работу в качестве лидера IT команды') +Сотруднику Иванов И.И. была выражена благодарность: За успешную работу в качестве лидера IT команды +>>> e1.info_out() +Информация о сотруднике: + + ФИО: Иванов И.И. + + Отдел: IT + + Должность: Программист + + Оклад: 180000.00 +Поощрения: + 1. За успешную работу в качестве лидера IT команды +>>> e2.info_out() +Информация о сотруднике: + + ФИО: Сидоров С.Е. + + Отдел: Логистика + + Должность: Аналитик + + Оклад: 100000.00 +no bonuses +``` \ No newline at end of file