From 8657f0f2b9878815faf523fc63e63f2c2bc2bb6d Mon Sep 17 00:00:00 2001 From: Katerina Date: Mon, 1 Dec 2025 01:24:52 +0300 Subject: [PATCH] t1 --- TEMA8/MM0.py | 2 + TEMA8/MM1.py | 22 +++ TEMA8/MM2.py | 23 ++++ TEMA8/image1.png | Bin 0 -> 24008 bytes TEMA8/image2.png | Bin 0 -> 39250 bytes TEMA8/report.md | 342 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 389 insertions(+) create mode 100644 TEMA8/MM0.py create mode 100644 TEMA8/MM1.py create mode 100644 TEMA8/MM2.py create mode 100644 TEMA8/image1.png create mode 100644 TEMA8/image2.png create mode 100644 TEMA8/report.md diff --git a/TEMA8/MM0.py b/TEMA8/MM0.py new file mode 100644 index 0000000..866432b --- /dev/null +++ b/TEMA8/MM0.py @@ -0,0 +1,2 @@ +import MM2 +print('y=',MM2.vyhod) diff --git a/TEMA8/MM1.py b/TEMA8/MM1.py new file mode 100644 index 0000000..e144c31 --- /dev/null +++ b/TEMA8/MM1.py @@ -0,0 +1,22 @@ +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 and xtt > (-gran): + ytt = 0 + elif xtt >= gran: + ytt = xtt - gran + elif xtt <= (-gran): + ytt = xtt + gran + return ytt diff --git a/TEMA8/MM2.py b/TEMA8/MM2.py new file mode 100644 index 0000000..cbba0a3 --- /dev/null +++ b/TEMA8/MM2.py @@ -0,0 +1,23 @@ +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +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)) + +import MM1 as mod +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1) + yi2=mod.tahogen(yin1,k2,yi2) + yt=mod.nechus(yin1,Xm) + vyhod.append(yt) diff --git a/TEMA8/image1.png b/TEMA8/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..062d510659972107facee300f66284a8a9773114 GIT binary patch literal 24008 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�i5c&L|}0);k{JB1`^z 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 import os,sys,importlib #Импорт трёх важных вспомогательных модулей +>>> os.chdir(r'C:\Users\user\python-labs\TEMA8') #Делаем рабочий каталог текущим +>>> os.getcwd() #Контролируем корректность установки текущего каталога +'C:\\Users\\user\\python-labs\\TEMA8' +``` +## Пункт 2. Создание и использование модулей в среде Python. +### 2.1. Запуск модуля на выполнение путем его импорта. +Откроем файл __Mod1__ в IDLE: +[!Скриншот модуля](image1.png) + +Запустим модуль: +```py +>>> import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> type(Mod1) + +>>> dir(Mod1) +['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1'] +>>> Mod1.perm1 +'5' +>>> import Mod1 +>>> importlib.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +Mod1.perm1 +'3' +``` + +### 2.2. Импортированные модули заносятся в словарь – значение атрибута sys.modules. + +```py +>>> print(sorted(sys.modules.keys())) +['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] +>>> sys.modules.pop('Mod1') #Удаление модуля из словаря + +>>> print(sorted(sys.modules.keys())) +['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] +>>> import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> sys.modules.pop('Mod1') + +``` +### 2.3. Запуск модуля на выполнение с помощью функции exec(). +Функция exec() выполняет код модуля напрямую, без импорта, делая все переменные модуля глобальными переменными основной программы без создания объекта-модуля. +Пример: +```py +>>> exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 6 +Mod1:Значение perm1= 6 +>>> perm1 +'6' + +>>> exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> perm1 +'5' +>>> exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 10 +Mod1:Значение perm1= 10 +>>> perm1 +'10' +``` + +### 2.4. Использование инструкции from … import … +Пример 1: +```py +>>> from Mod1 import perm1 +Mod1:Введите значение = 12 +Mod1:Значение perm1= 12 +>>> dir() +['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'importlib', 'os', 'perm1', 'sys'] +>>> perm1 +'12' +``` + +__Вывод:__ Объект Mod1 появился в памяти. Программа вызвалась из этого модуля. Значение perm1=12, потому что мы дали программе число 12 и команда from ... import ... скопировала значение переменной perm1 из модуля в нашу текущую сессию. + +Пример 2. +Открыли файл Mod2: +[! Скриншот файла 2](image2.png) + +Запустим Mod2 +```py +>>> from Mod2 import beta +>>> g=beta(2) +****BETA**** +>>> g +535.4916555247646 +>>> dir() +['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'g', 'importlib', 'os', 'perm1', 'sys'] +>>> alpha() +Traceback (most recent call last): + File "", line 1, in + alpha() +NameError: name 'alpha' is not defined +>>> from Mod2 import alpha as al #Функцию alpha из модуля импортировали под псевдонимом al +>>> al() +****ALPHA**** +Значение t=3 +'3' +>>> del al,beta +>>> from Mod2 import alpha as al, beta as bt +>>> del al,bt +>>> from Mod2 import * #Звёздочка импортирует всё содержимое модуля, а не отдельные функции +>>> tt=alpha() +****ALPHA**** +Значение t=0.12 +>>> uu=beta(float(tt)) +****BETA**** +>>> uu +1.4578913609506803 +``` +## Пункт 3. Создание многомодульных программ. +### 3.1. Пример простой многомодульной программы. +Откроем Mod0: +```py +#Модуль Mod0 +import Mod1 +print('perm1=',Mod1.perm1) +from Mod2 import alpha as al +tt=al() +print('tt=',tt) +from Mod2 import beta +qq=beta(float(tt)) +print('qq=',qq) +``` + +Перед проверкой такой программы удалим из словаря sys.modules имена всех модулей: Mod1, Mod2. +```py +sys.modules.pop('Mod1') + +sys.modules.pop('Mod2') + +``` + +Запустим программу на выполнение инструкцией: +```py +>>> import Mod0 +Mod1:Введите значение = 12 +Mod1:Значение perm1= 12 +perm1= 12 +****ALPHA**** +Значение t=4 +tt= 4 +****BETA**** +qq= 286751.31313665316 + +>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 +'4' +286751.31313665316 +'12' +``` + +### 3.2. Еще пример. +Создадим файл MM1 с кодами, разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности»: +```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 and xtt > (-gran): + ytt = 0 + elif xtt >= gran: + ytt = xtt - gran + elif xtt <= (-gran): + ytt = xtt + gran + return ytt +``` + +Затем создадим модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров зада-чи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала: + +```py +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +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)) + +import MM1 as mod +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1) + yi2=mod.tahogen(yin1,k2,yi2) + yt=mod.nechus(yin1,Xm) + vyhod.append(yt) +``` +Наконец, создадим главную программу – модуль ММ0, запускающую на выполнение модуль ММ2 и выводящую полученный выходной сигнал: +```py +import MM2 +print('y=',MM2.vyhod) +``` + +Запустим программу: +```py +import MM2 +k1,T,k2,Xm,A,F,N=0.3,20,0.86,5,300,16,22 +print('y=',MM2.vyhod) +y= [0, 0, 1.212353225782853, 9.429917973948747, 21.268129900411363, 35.9056239210475, 51.777520003236674, 66.73709892715415, 78.30639101290507, 83.98328811972654, 81.56477145000467, 69.44380077151166, 46.84157186213971, 13.94651209162366, -18.05498909428737, -67.05565883865756, -120.196876310454, -174.10326766546805, -225.1475986972788, -269.7096042744614, -304.3967322769127, -326.20428569135987] +``` + +## 3.3. Области действия объектов в модулях. +#### Работа с файлом Mod2 +Попробовали вставить в файл Mod2 в функции alpha обращение к функции beta: +```py +def alpha(): + print('****ALPHA****') + t=input('Значение t=') + k = beta(6) #<-добавили + print(k) + return t +``` +Вывод: +```py +import Mod2 +alpha() +****ALPHA**** +Значение t=6 +****BETA**** +153552935.39544657 +'6' +``` +Наоборот, из beta – к alpha +```py +def beta(q): + print('****BETA****') + import math + expi=q*math.pi + alpha() #<-добавили + return math.exp(expi) +``` +Запустили программу: +```py +beta(6) +****BETA**** +153552935.39544657 +``` + +#### Работа с файлом Mod0 +Попробуем отобразить на экране в модуле Mod0 значения объектов t и expi. +```py +import Mod1 +print('perm1=',Mod1.perm1) +from Mod2 import alpha as al +tt=al() +print('tt=',tt) +from Mod2 import beta +qq=beta(float(tt)) +print('qq=',qq) +print(t, expi) + +#Запуск: +import Mod0 +perm1= +****ALPHA**** +Значение t=6 +****BETA**** +153552935.39544657 +tt= 6 +****BETA**** +qq= 153552935.39544657 +Traceback (most recent call last): + File "", line 1, in + import Mod0 + File "C:\Users\user\python-labs\TEMA8\Mod0.py", line 9, in + print(t, expi) +NameError: name 't' is not defined +``` + +При запуске Mod0, нам выдало ошибку + +Попробуем в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране. +```py +import Mod1 +print('perm1=',Mod1.perm1) +from Mod2 import alpha as al +tt=al() +print('tt=',tt) +from Mod2 import beta +qq=beta(float(tt)) +print('qq=',qq) +perm1 = Mod1.perm1*3 +print("perm1*3= ", perm1) +``` + +Запустим программу: +```py +Mod1:Введите значение = 7 +Mod1:Значение perm1= 7 +perm1= 7 +****ALPHA**** +Значение t=4 +****BETA**** +153552935.39544657 +tt= 4 +****BETA**** +qq= 286751.31313665316 +perm1*3= 777 +``` + +Попробуем в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq. +```py +>>> perm1 = perm1*2; perm1 +'777777' +>>> tt = tt*2; tt +'44' +>>> qq = qq*2; qq +573502.6262733063 +``` + +## Пункт 4. Окончание сеанса работы с IDLE. +