Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
10.08.2021
Размер:
204.67 Кб
Скачать

Python, ПОАС, ОКЗ, ИКЗ 23 и протокол по теме 9

Общее контрольное задание

Файл new_class.py: class Sotrudnik:

def __init__(self,fio,otdel,dolzhnost,oklad): self.fio=fio

self.otdel=otdel

self.dolzhnost=dolzhnost

self.oklad=oklad

self._blag=[] #список для документов о поощрениях

#Метод увеличения оклада сотрудника: def uvelOklad(self,summa):

self.oklad+=summa

#Метод перевода сотрудника из одного отдела в другой: def perevod(self,new_otdel):

self.otdel=new_otdel

#Метод изменения должности сотрудника: def smenDolzh(self,new_dolzh):

self.dolzhnost=new_dolzh

#Метод объявления благодарности сотруднику: def blagod(self,doc):

"doc - название документа с благодарностью." self._blag.append(doc)

#Свойство, содержащее список поощрений сотрудника: @property

def blag_list(self): return self._blag

Результаты ОКЗ

>>> from new_class import Sotrudnik

#Создание 2 экземпляров класса, задание значений атрибутов и свойства:

>>>sotr1=Sotrudnik('Иванов И.И.','№ 123','Заместитель начальника управления',40000); sotr1.blagod('№ 1.1.1')

>>>sotr2=Sotrudnik('Сидоров Б.А.','№ 124','Бухгалтер',35000); sotr2.blagod('№ 1.1.1')

#Отображение значений:

>>>print(sotr1.fio); print(sotr1.otdel); print(sotr1.dolzhnost); print(sotr1.oklad); print(sotr1.blag_list)

Иванов И.И.

№ 123

Заместитель начальника управления

40000 ['№ 1.1.1']

>>>print(sotr2.fio); print(sotr2.otdel); print(sotr2.dolzhnost); print(sotr2.oklad); print(sotr2.blag_list)

Сидоров Б.А.

№ 124

Бухгалтер

35000 ['№ 1.1.1']

#Операция перевода в новый отдел с экземпляром sotr1:

1

>>>sotr1.perevod('№ 12')

>>>print(sotr1.otdel) № 12

#Операция изменения должности с экземпляром sotr1:

>>>sotr1.smenDolzh('Начальник управления')

>>>print(sotr1.dolzhnost)

Начальник управления

#Операция изменения оклада с экземпляром sotr1:

>>>sotr1.uvelOklad(5000)

>>>print(sotr1.oklad)

45000

#Операция объявления благодарности с экземпляром sotr1:

>>>sotr1.uvelOklad(5000)

>>>print(sotr1.blag_list)

['№ 1.1.1', '№ 1.1.2']

#Операция перевода в новый отдел с экземпляром sotr2:

>>>sotr2.perevod('№ 1')

>>>print(sotr2.otdel)

№ 1

#Операция изменения должности с экземпляром sotr2:

>>>sotr2.smenDolzh('Главный бухгалтер')

>>>print(sotr2.dolzhnost)

Главный бухгалтер

#Операция изменения оклада с экземпляром sotr2:

>>>sotr2.uvelOklad(25000)

>>>print(sotr2.oklad)

60000

#Операции объявления благодарности с экземпляром sotr2:

>>>sotr2.blagod('№ 1.1.2')

>>>sotr2.blagod('№ 1.1.3')

>>>print(sotr2.blag_list)

['№ 1.1.1', '№ 1.1.2', '№ 1.1.3']

Индивидуальное контрольное задание № 23

Файл main_SAU.py:

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

Файл M0.py: import M2 print('y =',M2.y)

2

Файл M1.py: def usilit(k,x):

"Усилитель с параметрами:\nk - коэффициент усиления,\nx - сигнал на входе усилителя." return k*x

def koleb(T1,T2,x,yt1,yt2):

"Колебательное звено с параметрами:\nT1, T2 - постоянные времени,\nx - сигнал на входе звена,\nyt1, yt2 - значения сигнала на выходе звена в 2 предыдущих момента времени."

return (x+2*T2*(T1-T2)*yt1-T2*T2*yt2)/(1+2*T1*T2+T2*T2)

def zap(x_sp,t,tau):

"Звено запаздывания с параметрами:\nx_sp - последовательность значений сигнала на входе звена,\nt

-текущий момент времени,\ntau - время запаздывания." if t<tau:

y=0

else: y=x_sp[t-tau]

return y

Файл M2.py:

#Ввод параметров схемы и входного сигнала: Tu=int(input('Введите продолжительность импульса Tu: ')) Tc=int(input('Введите период импульса Tc: ')) n=int(input('Введите число импульсов входного сигнала: ')) k=float(input('Введите коэффициент усиления k усилителя: '))

T1=float(input('Введите постоянную времени Т1 колебательного звена: ')) T2=float(input('Введите постоянную времени Т2 колебательного звена: ')) tau=int(input('Введите время запаздывания tau для звена запаздывания: '))

#Генерирование входного сигнала: x=[]

for i in range(n):

for ii in range(Tu):

x.append(1) #входной сигнал с амплитудой 1 for ii in range(Tc-Tu):

x.append(0)

#Получение выходного сигнала: yhistory=[0,0]; y1history=[]; y=[] import M1

for i in range(len(x)):

y1=M1.usilit(k,x[i]) #сигнал на выходе усилительного звена y1history.append(y1)

y21=M1.koleb(T1,T2,y1,yhistory[0],yhistory[1]) #сигнал на выходе колебательного звена yhistory[1]=yhistory[0]

yhistory[0]=y21

y22=M1.zap(y1history,i,tau) #сигнал на выходе звена запаздывания y.append(y21+y22)

#Запоминание значений входного и выходного сигнала в файл signal.txt в первый и второй столбец соответственно:

fp=open('signal.txt','w') for i in range(len(x)):

fp.write(str(x[i])+','+str(y[i])+'\n')

3

fp.close()

#Протокол по Теме 9

#Пункт 2.1

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

>>>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 есть атрибуты otobrazh, zad_zn.

>>>z3.zad_zn('Совсем новое')

>>>z3.otobrazh()

значение= Совсем новое

#При выводе значения сработал метод класса Class2.

>>> z1.otobrazh()

Новое значение атрибута у экз.1

#Представленное значение отличается от выводимого по предыдущей инструкции: для вывода значения данного data объекта z1 используется метод из Class1, а для z3 - метод из Class2.

>>>del z1,z2,z3

#Пункт 3

>>>from Mod3 import Class1

>>>z4=Class1()

>>>z4.otobrazh()

Traceback (most recent call last):

File "<pyshell#22>", line 1, in <module> z4.otobrazh()

File "d:\Family\Tema9\Mod3.py", line 5, in otobrazh print(self.data)

AttributeError: 'Class1' object has no attribute 'data'

#Ошибка возникла, так как значение данного data у экземпляра z4 не было задано, а метод otobrazh выводит именно это значение.

4

>>>from Mod3 import Class1

>>>z4=Class1()

>>>z4.data='значение данного data у экз.4'

>>>z4.otobrazh()

значение данного data у экз.4

>>>del z4

>>>import Mod3

>>>z4=Mod3.Class2()

>>>z4.zad_zn('Класс из модуля')

>>>z4.otobrazh()

значение= Класс из модуля

#По сравнению с случаем, когда z4 является экземпляром класса Class1, в данном случае z4 - экземпляр класса Class2, метод otobrazh класса Class2 отличается от метода otobrazh класса Class1 тем, что выводит 'значение=' перед выводом значения data экземпляра.

>>>Mod3.otobrazh('Объект')

значение объекта= Объект

#По сравнению с случаем, когда z4 является экземпляром класса Class1, в данном случае объектаэкземпляра какого-либо класса не создается, но выполняется функция otobrazh с фактическим аргументом 'Объект'. По инструкции print выводятся слова 'значение объекта=' и значение аргумента функции.

#Пункт 4

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

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

#У класса появился новый атрибут fio.

>>>z7=Class3(123)

>>>dir(z7)

5

['__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']

#Список атрибутов экземпляра z7 не совпадает со списком атрибутов класса Class3: у экземпляра есть все атрибуты класса и атрибут data.

>>>dir(z7)==dir(Class3) False

#Список атрибутов экземпляра z7 не совпадает со списком атрибутов класса Class3.

>>>print(z7.fio)

Иванов И.И.

#Значение атрибута fio у экземпляра z7 совпадает со значением атрибута fio класса Class3.

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

#В списке атрибутов экземпляра z3 появился атрибут rozden.

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

#В списке атрибутов класса Class3 нет атрибута rozden.

#Пункт 6

>>>Class3.__bases__ (<class '__main__.Class2'>,)

#Родительский класс класса Class3 - Class2.

>>>Class2.__bases__

(<class '__main__.Class1'>,)

#Родительский класс класса Class2 - Class1.

>>>Class1.__bases__ (<class 'object'>,)

#Родительский класс класса Class1 - object.

>>>Class3.__mro__

(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)

>>> ZeroDivisionError.__mro__

(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)

#Пункт 7

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

6

12

>>>exempl.svojstvo=45

>>>print(exempl.svojstvo)

45

>>>del exempl.svojstvo

>>>exempl.svojstvo

Traceback (most recent call last):

File "<pyshell#63>", line 1, in <module> exempl.svojstvo

File "<pyshell#57>", line 5, in chten return sam.__prm

AttributeError: 'Class4' object has no attribute '_Class4__prm'

#При попытке чтения значения свойства выводится сообщение об ошибке, так как по инструкции del значение свойства было удалено.

#Пункт 8

#Для выходного сигнала, полученного по исходным значениям параметров [2.5,4,1.3,0.8], характерен апериодический переходной процесс. График сигнала представлен на рисунке sau11.png.

#Для значений параметров [0,0,0,0] выходной сигнал нулевой (рисунок sau12.png).

#Для выходного сигнала, полученного по значениям параметров [1,1,1,1], характерен расходящийся переходной процесс (рисунок sau13.png).

#Для выходного сигнала, полученного по значениям параметров [1,12,1,1], характерен монотонный переходной процесс (рисунок sau14.png).

#Для выходного сигнала, полученного по значениям параметров [60,1,10,1], характерен колебательный переходной процесс (рисунок sau15.png).

Sau11:

Sau12:

7

Sau13:

Sau14:

Sau15:

8

Соседние файлы в папке Лабораторные_Python