diff --git a/TEMA7/report.txt b/TEMA7/report.txt new file mode 100644 index 0000000..90651db --- /dev/null +++ b/TEMA7/report.txt @@ -0,0 +1,526 @@ +# Отчет по теме 7 + +Лыкова Елизавета, А-01-23 + +## 1. Запуск IDLE, привязка католога, создание файла отчета. + +```py +import os +os.chdir("C:\\Users\\Home\\Desktop\\python-labs\\TEMA7") +``` + +## 2. Создание пользовательской функции. + +## 2. 1 Функция без аругментов. + +```py +def uspeh(): + '''Подтверждение успеха операции''' + print('Выполнено успешно!') + + +type(uspeh) + +dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh'] +help(uspeh) +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции +``` + +## 2.2 Функция с аргументами. + +```py +def sravnenie(a,b): + '''Сравнение a и b''' + if a > b: + print(a, 'больше', b) + elif a < b: + print(a, 'меньше',b) + else: + print(a,'равно',b) + + +n,m = 16,5; sravnenie(n,m) +16 больше 5 +sravnenie('a','b') +a меньше b +``` + +## 2.3 Функция с return. + +```py +def logistfun(b,a): + '''Вычисление логистической функции''' + import math + return a/(1+math.exp(-b)) + +v,w = 1, 0.7; z = logistfun(w,v) +z +0.6681877721681662 +``` + +## 2.4. Сложение для разных типов аргументов. + +```py +def slozh(a1,a2,a3,a4): + '''Сложение значений четырех аргументов''' + return a1 + a2 + a3 + a4 + +slozh(1,2,3,4) +10 +slozh('1','2','3','4') +'1234' +b1 = [1,2]; b2 = [-1,-1]; b3= [0,2]; b4 = [-1,-1] +q = slozh(b1,b2,b3,b4) +q +[1, 2, -1, -1, 0, 2, -1, -1] +k1 = (0, 1); k2 = (2,3); k3 = (4,5); k4 = (6,7) +qk = slozh(k1,k2,k3,k4) +qk +(0, 1, 2, 3, 4, 5, 6, 7) +s1 = {'aaa':1,'bbb':2}; s2 = {'ccc':3,'ddd':4}; s3 = {'eee':5,'fff':6}; s4 = {'ggg':7,'hhh':8} +qs = slozh(s1,s2,s3,s4) +Traceback (most recent call last): + File "", line 1, in + qs = slozh(s1,s2,s3,s4) + File "", line 3, in slozh + return a1 + a2 + a3 + a4 +TypeError: unsupported operand type(s) for +: 'dict' and 'dict' +m1 = {'a','b'}; m2 = {'c','d'}; m3 = {'e','f'}; m4 = {'g','h'} +qm = slozh(m1,m2,m3,m4) +Traceback (most recent call last): + File "", line 1, in + qm = slozh(m1,m2,m3,m4) + File "", line 3, in slozh + return a1 + a2 + a3 + a4 +TypeError: unsupported operand type(s) for +: 'set' and 'set' +``` + +## 2.5 На вход функции поступает сигнал x, а на выходе получает сигнал y. + +```py +def inerz(x,T,ypred): + ''' Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства''' + y = (x + T*ypred)/(T+1) + return y + +sps = [0]+[1]*100 +spsy=[] +TT = 20 +yy = 0 +for xx in sps: + yy = inerz(xx,TT,yy) + spsy.append(yy) + + +import pylab as plt +plt.plot(spsy,label = 'Выходной сигнал') +[] +plt.show() +``` + +!(рисуночек)[ris1.png] + +## 3. Функции как объекты. + +## 3.1 Получение списка атрибутов объекта-функции. + +```py +dir(inerz) +['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] +inerz.__doc__ +'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства' +help(inerz) +Help on function inerz in module __main__: + +inerz(x, T, ypred) + Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства +``` + +## 3.2 Сохранение ссылки на объект-функцию в другой переменной. + +```py +fnkt = sravnenie +v = 16 +fnkt(v,23) +16 меньше 23 +``` + +## 3.3 Возможность альтернативного определения функции в программе. + +```py +typ_fun = 8 +if typ_fun == 1: + def func(): + print('Функция1') +else: + def func(): + print('Функция2') + + +func() +Функция2 +``` + +Программа выводит сообщение "Функция 2", потому что переменная typ_fun не равна 1, и выполняется блок else, в котором функция func определена как выводящая "Функция 2". + +## 4. Аргументы функции. + +## 4.1 Функция в качестве аргумента другой функции. + +```py +def fun_arg(fff,a,b,c): + '''fff-имя функции, используемой + в качестве аргумента функции fun_arg''' + return a + fff(c,b) + +zz = fun_arg(logistfun,-3,1,0.7) +zz +-2.3318122278318336 +``` + +## 4.2 Обязательные и необязательные аргументы. + +```py +def logistfun(a,b=1): + '''Вычисление логистической функции''' + import math + return b/(1+math.exp(-a)) + +logistfun(0.7) +0.6681877721681662 +logistfun(0.7,2) +1.3363755443363323 +``` + +## 4.3 Функция с произвольным положением элементов. + +```py +logistfun(b = 0.5, a = 0.8) +0.34498724056380625 +``` + +## 4.4 Аргументы функции, содержащиеся в списке или кортеже. + +```py +b1234 = [b1,b2,b3,b4] +qq = slozh(*b1234) +qq +[1, 2, -1, -1, 0, 2, -1, -1] +``` + +## 4.5 Аргументы функции, содержащиеся в словаре. + +```py +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq = slozh(**dic4) +qqq +10 +``` + +## 4.6 Смешанные ссылки. + +```py +e1=(-1,6);dd2={'a3':3,'a4':9} +qqqq=slozh(*e1,**dd2) +qqqq +17 +``` + +## 4.7 Переменное число аргументов у функции. + +```py +def func4(*kort7): + '''Произвольное число аргументов в составе кортежа''' + smm = 0 + for elt in kort7: + smm += elt + return smm + +func4(-1,2) +1 +func4(-1,2,0,3,6) +10 +``` + +## 4.8 Комбинация аргументов. + +```py +def func4(a,b=7,*kort7): + '''Кортеж - сборка аргументов - должен быть последним!''' + smm = 0 + for elt in kort7: + smm += elt + return a*smm + b + +func4(-1,2,0,3,6) +-7 +def func4(a,b=7,**dicc): + '''Словарь - сборка аргументов - должен быть последним!''' + smm = 0 + smm = sum(dicc.values()) + return a*smm + b + +func4(-1,2,x=3,y=4,z=5) +-10 +``` + +## 4.9 Изменение значений объектов, используемых в качестве аргументов функции. + +```py +a = 90 +def func3(b): + b = 5*b + 67 + + +func3(a) +a +90 +sps1 = [1,2,3,4] +def dunc2(sps): + sps[1] = 99 + + +dunc2(sps1) +print(sps1) +[1, 99, 3, 4] +kort = (1,2,3,4) +dunc(kort) +Traceback (most recent call last): + File "", line 1, in + dunc(kort) +NameError: name 'dunc' is not defined. Did you mean: 'func'? +``` + +## 5. Специальные типы пользовательских функций. + +## 5.1 Анонимные функции. + +```py +anfun1 = lambda: 1.5 + math.log10(17.23) +anfun1() +2.7362852774480286 +anfun2 = lambda a,b: a+math.log10(b) +anfun2(17,234) +19.369215857410143 +anfun3 = lambda a,b = 234: a+math.log10(b) +anfun3(100) +102.36921585741014 +``` + +## 5.2 Функции генераторы. + +```py +def func5(diap,shag): + '''Итератор, возвращающий значения + из диапазона от 1 до diap с шагом shag''' + for j in range(1,diap+1,shag): + yield j + + +for mm in func5(7,3): + print(mm) + + +1 +4 +7 + +alp=func5(7,3) +print(alp.__next__()) +1 +print(alp.__next__()) +4 +print(alp.__next__()) +7 +print(alp.__next__()) +Traceback (most recent call last): + File "", line 1, in + print(alp.__next__()) +StopIteration +``` + +Функции - генераторы генерируют значения по одному, не храня всё в памяти. +Генератор можно использовать только один раз - после прохождения всех значений он "опустошается" и больше не производит элементов. + +## 6. Локализация объектов в функциях. + +## 6.1 Локализация объектов. + +```py +glb = 10 +def func7(arg): + locl = 15 + glb = 8 + return locl*arg + +res = func7(glb) +res +150 +glb +10 +``` + +Глобальное значение glb не изменилось. + +``` +def func8(arg): + locl=15 + print(glb) + glb=8 + return locl*arg + +res = func8(glb) +Traceback (most recent call last): + File "", line 1, in + res = func8(glb) + File "", line 3, in func8 + print(glb) +UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value +``` + +Локальная переменная была инициализирована только после той строки, где функция её выводит. + +```py +glb = 11 +def func7(arg): + locl = 15 + global glb + print(glb) + glb = 8 + return locl*arg + +res = func7(glb) +11 +glb +8 +``` + +## 6.2 Выявление локализации объекта. + +```py +globals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +locals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +``` + +Различий нет, поскольку эти методы возвращают обхекты на уровне вызова этиъ функций. + +```py +def func8(arg): + locl = 15 + glb = 8 + print(globals().keys()) + print(locals().keys()) + return locl*arg + +hh = func8(glb) +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +dict_keys(['arg', 'locl', 'glb']) +def func8(arg): + locl = 15 + glb = 8 + print(globals().keys()) + print(locals().keys()) + return locl*arg + +hh = func8(glb) +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +dict_keys(['arg', 'locl', 'glb']) +'glb' in globals().keys() +True +``` + +## 6.3 Локализация при использовании вложенных функций. + +```py +def func9(arg2,arg3): + def func9_1(arg1): + locl = 15 + glbl = 8 + print('glob_func9_1:',globals().keys()) + print('locl_func9_1:',locals().keys()) + return locl*arg1 + locl = 5 + glb = func9_1(locl) + print('loc_func9:',locals().keys()) + print('glob_func9:',globals().keys()) + return arg2+arg3*glb + +kk = func9(10,1) +glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9', 'locl']) +locl_func9_1: dict_keys(['arg1', 'locl', 'glbl']) +loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'locl', 'glb']) +glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9', 'locl']) +``` + +## 6.4 + +``py +znach = input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=4,2,8,6,9,0.5,1000 +k1=float(znach[0]) +T=float(znach[1]) +k2=float(znach[2]) +Xm=float(znach[3]) +A=float(znach[4]) +F=float(znach[5]) +N=int(znach[6]) +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) + +vhod +[0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, -1.3716044150450356e-14, -4.3117471020172244e-14, -1.567547902908612e-14, 1.1766512962000004e-14, -1.7634913907721887e-14, ...] +``` + +Создание функций, реализующих компоненты системы. + +```py +def realdvig(xtt,kk1,TT,yti1,ytin1): + yp=kk1*xtt #усилитель + yti1=yp+yti1 #Интегратор + ytin1=(yti1+TT*ytin1)/(TT+1) + return [yti1,ytin1] + +def tahogen(xtt,kk2,yti2): + yp=kk2*xtt + yti2=yp+yti2 + return yti2 + +def nechus(xtt,gran): + if xtt(-gran): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt +``` + +Соединение компонент. + +```py +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1) + yi2=tahogen(yin1,k2,yi2) + yt=nechus(yin1,Xm) + vyhod.append(yt) + +print('y=',vyhod) +y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...] +``` \ No newline at end of file diff --git a/TEMA7/ris1.png b/TEMA7/ris1.png new file mode 100644 index 0000000..0e4f388 Binary files /dev/null and b/TEMA7/ris1.png differ