From 4b9a876e404e2b1c59c586391400530e7440742d Mon Sep 17 00:00:00 2001 From: Lykova Liza Date: Sun, 7 Dec 2025 14:12:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA7/report.txt | 526 +++++++++++++++++++++++++++++++++++++++++++++++ TEMA7/ris1.png | Bin 0 -> 15309 bytes 2 files changed, 526 insertions(+) create mode 100644 TEMA7/report.txt create mode 100644 TEMA7/ris1.png 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 0000000000000000000000000000000000000000..0e4f388df9c768e6cf8ad267a4eaa7d144bfcdbc GIT binary patch literal 15309 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 Y{>@DP7T1ssVmG9#Wpuq%^X}vS2Do#=b^rhX literal 0 HcmV?d00001