From f64dc46950c4bc52171ba66730a30db94c4f6393 Mon Sep 17 00:00:00 2001 From: Ksenia Date: Mon, 1 Dec 2025 00:37:24 +0300 Subject: [PATCH] report --- TEMA8/MM0.py | 2 + TEMA8/MM1.py | 22 ++ TEMA8/MM2.py | 24 ++ TEMA8/report.md | 578 ++++++++++++++++++++++++++++++++++++++++++++++++ TEMA8/report.py | 50 +++++ 5 files changed, 676 insertions(+) create mode 100644 TEMA8/MM0.py create mode 100644 TEMA8/MM1.py create mode 100644 TEMA8/MM2.py create mode 100644 TEMA8/report.md create mode 100644 TEMA8/report.py 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..50134d0 --- /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): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt \ No newline at end of file diff --git a/TEMA8/MM2.py b/TEMA8/MM2.py new file mode 100644 index 0000000..9432ed2 --- /dev/null +++ b/TEMA8/MM2.py @@ -0,0 +1,24 @@ +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/report.md b/TEMA8/report.md new file mode 100644 index 0000000..c7bcc5a --- /dev/null +++ b/TEMA8/report.md @@ -0,0 +1,578 @@ +# Отчет по Теме 8 + +Зеленкина Ксения, А-02-23 + +## 1. Начало работы. +Запустила интерактивную оболочку IDLE и открыла окно текстового редактора, куда буду фиксировать мои дальнейшие действия. +Начинём сеанс работы с IDLE со следующих инструкций: + +```py +import os,sys,imp #Импорт трёх важных вспомогательных модулей +os.chdir('<Путь к рабочему каталогу>') #Делаем рабочий каталог текущим +os.getcwd() #Контролируем корректность установки текущего каталога +``` + +_В новых версиях Python вместо модуля imp используется importlib._ + +## 2. Создание и использование модулей в среде Python. +Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле . В языке Python модули также являются объектами класса __module__. +#### 2.1. Запуск модуля на выполнение путем его импорта. + +С помощью текстового редактора оболочки IDLE создайте в своем текущем каталоге файл с именем Mod1.py и запишите в него программу со следующим содержанием: + +_Код:_ +```py +perm1=input('Mod1:Введите значение = ') +print('Mod1:Значение perm1=',perm1) +``` + +Обратим внимание на заголовок окна редактора с текстом модуля: пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «*». + +Запустим модуль по следующей инструкции: +_Код:_ +```py +import Mod1 +``` + +_Вывод:_ +```py +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +``` + +Определим класс модуля __Mod1__. +_Код:_ +```py +type(Mod1) +``` +_Вывод:_ +```py + +``` + +Получим список атрибутов. +_Код:_ +```py +dir(Mod1) +``` +_Вывод:_ +```py +['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1'] +``` + +Получим доступ к значению созданного в модуле объекта __perm1__ – атрибута модуля __Mod1__ - с помощью инструкции: +_Код:_ +```py +Mod1.perm1 +``` +_Вывод:_ +```py +'5' +``` + +Попробуем повторно выполнить модуль с помощью инструкции импорта: +_Код:_ +```py +import Mod1 +``` +_Вывод:_ +```py +(пусто) +``` + +Запуск программы не происходит! + +Для повторного выполнения ранее импортированного модуля следует применить функцию __reload__ из модуля __imp__/__implib__: +_Код:_ +```py +importlib.reload(Mod1) +``` +_Вывод:_ +```py +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +``` +Проверим, что это значение стало значением объекта __perm1__. +_Код:_ +```py +Mod1.perm1 +``` +_Вывод:_ +```py +'3' +``` +#### 2.2 Атрибут sys.modules +Импортированные модули заносятся в словарь – значение атрибута __sys.modules__. Их можно увидеть по инструкции +_Код:_ +```py +print(sorted(sys.modules.keys())) +``` +_Вывод:_ +```py +['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha2', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] +``` +Видим в словаре __Mod1__. Для обеспечения возможности повторного импорта и, следовательно, выполнения программы из модуля, его надо удалить из этого словаря: + +_Код:_ +```py +sys.modules.pop('Mod1') +``` +Еще раз отобразим словарь м убедимся, что модуль __Mod1__ из него исчез. +_Код:_ +```py +print(sorted(sys.modules.keys())) +``` + +_Вывод:_ +```py +['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha2', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] +``` +__Mod1__ нет в словарь. + +Повторим импорт и проверим, что записанная в нем программа будет снова выполнена: +_Код:_ +```py +import Mod1 +``` +_Вывод:_ +```py +Mod1:Введите значение = 4 +Mod1:Значение perm1= 4 +``` + +_Код:_ +```py +Mod1.perm1 +``` +_Вывод:_ +```py +'4' +``` +Данная программа снова выполнилась. Снова удалим __Mod1__ из словаря: + +_Код:_ +```py +sys.modules.pop('Mod1') +'Mod1' in sys.modules +``` + +_Вывод:_ +```py +False +``` +#### 2.3. Запуск модуля на выполнение с помощью функции exec(). +Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции. +__Внимание:__ объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы! + +_Пример._ +_Код:_ +```py +exec(open('Mod1.py').read()) +``` + +Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля. +Попробуем запустить модуль на выполнение 3 раза, каждый раз задавая разные значения в ответ на запрос программы. + +_Код:_ +```py +exec(open('Mod1.py').read()) +``` +_Вывод:_ +Mod1:Введите значение = 2 +Mod1:Значение perm1= 2 +``` +_Код:_ +```py +exec(open('Mod1.py').read()) +``` +_Вывод:_ +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 +``` +_Код:_ +```py +exec(open('Mod1.py').read()) +``` +_Вывод:_ +Mod1:Введите значение = 20 +Mod1:Значение perm1= 20 +``` +Выводим на экран значение объекта perm1. + perm1 +_Код:_ +```py +perm1 +``` +_Вывод:_ +'20' +``` + +#### 2.4 Использование инструкции from … import … +В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов. +__Пример 1.__ +_Код:_ +```py +from Mod1 import perm1 +``` +_Вывод:_ +```py +Mod1:Введите значение = 30 +Mod1:Значение perm1= 30 +``` + +Проверим, появился ли в памяти объект __Mod1__. + _Код:_ + ```py +print(sorted(sys.modules.keys())) + ``` + _Вывод:_ + ```py +['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha2', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] + ``` +_Код:_ +```py +perm1 +``` +_Вывод:_ +'30' +``` + +Проверьте, появился ли в памяти объект Mod1? - ДА +Вызвалась ли на выполнение программа из этого модуля? - ДА +Какое значение имеет объект perm1 и почему? - Имеет значение '30'. perm1 имеет значение '30', потому что мы его ввели при выполнении модуля во время импорта. + +__Пример 1.__ +С помощью текстового редактора создадим еще один модуль __Mod2__, содержащий две функции: +``py +def alpha(): + print('****ALPHA****') + t=input('Значение t=') + return t + +def beta(q): + import math + expi=q*math.pi + return math.exp(expi) +``` +Сохраним модуль в текущем каталоге в файле __Mod2.py__. +Импортируйте из этого модуля только функцию __beta__ с помощью инструкции: + +_Код:_ +```py +from Mod2 import beta +``` +Теперь можно использовать эту функцию: +_Код:_ +```py +g=beta(2) +``` +_Вывод:_ +```py +****BETA**** +``` + +Выведим на экран значение объекта __g__. +_Код:_ +```py +g +``` +_Вывод:_ +535.4916555247646 +``` +Проверим, появился ли в памяти объект __Mod2__. +_Код:_ +```py +print(sorted(sys.modules.keys())) +``` +_Вывод:_ +```py +['Mod1', 'Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha2', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] +``` +Объект __Mod2__ появился. + + Убедимся, что функция __alpha__ не была импортирована, попробовав запустить ее на выполнение: +_Код:_ +```py +alpha() +``` +_Вывод:_ +```py +Traceback (most recent call last): + File "", line 1, in + alpha() +NameError: name 'alpha' is not defined +``` + +_Код:_ +```py +from Mod2 import alpha as al +al() +``` +_Вывод:_ +```py +****ALPHA**** +Значение t=7 +'7' +``` + +Удалим импортированные объекты: +_Код:_ +```py +del al,beta +``` + +_Код:_ +```py +from Mod2 import alpha as al, beta as bt +bt(2) +al() +``` +_Вывод:_ +```py +****BETA**** +535.4916555247646 +****ALPHA**** +Значение t=8 +'8' +``` + +Вновь удалим импортированные объекты: +_Код:_ +```py +del al,bt +``` +Теперь сделаем импорт всего содержимого модуля __Mod2__ инструкцией. +_Код:_ +```py +from Mod2 import * +tt=alpha() +uu=beta(float(tt)) +``` + +_Вывод:_ +```py +****ALPHA**** +Значение t=30 +>> uu=beta(float(tt)) +****BETA**** +>> uu +8.536711709556478e+40 +``` + + +## 3. Создание многомодульных программ. +#### 3.1. Пример простой многомодульной программы. +С помощью редактора создадим ещё один модуль: +```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) +``` + +Перед проверкой такой программы удалите из словаря sys.modules имена всех этих модулей. + +```py +sys.modules.pop('Mod1') + +sys.modules.pop('Mod2') + +``` + +Запустим программу на выполнение инструкцией: +_Код:_ +```py +import Mod0 +``` + +_Вывод:_ +```py +Mod1:Введите значение = 7 +Mod1:Значение perm1= 7 +perm1= 7 +****ALPHA**** +Значение t=3 +tt= 3 +****BETA**** +qq= 12391.647807916694 +``` + +Отобразим в командном окне значения объектов, созданных во время выполнения программы: +_Код:_ +```py +import Mod0Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 +``` + +_Вывод:_ +```py +'3' +12391.647807916694 +'7' +``` + +#### 3.2. Еще пример. +Создадим модуль __MM1__, включив в него (скопировать из текста _темы 7_) разработанные при вы-полнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенера-тор и нелинейное звено типа «зона нечувствительности». Затем создадим модуль __ММ2__, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, им-порт модуля __ММ1__ и реализацию модели при расчете выходного сигнала: + +_Код в 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): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt +``` + +_Код в MM2:_ +```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) +``` + +Cоздадим главную программу – модуль __ММ0__, запускающую на выполнение модуль __ММ2__ и выводящую полученный выходной сигнал. +_Код в MM0:_ +```py +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +import MM2 +print('y=',MM2.vyhod) +``` + +Запустим модуль: +_Код:_ +```py +import MM0 +``` +_Вывод:_ +```py +k1,T,k2,Xm,A,F,N=2.0,0.5,0.1,0.3,1.0,10,50 +y= [0, 0.4837136697232975, 1.9085317587281618, 3.252580419663127, 3.6116668632828017, 2.337163316303042, -0.017205672773565883, -3.9735974048495555, -7.694183730612065, -9.785915404851563, -9.20619313821322, -5.684780136463871, 0, 6.0648659051821046, 11.557535237484812, 14.327930282057972, 13.456796190056922, 9.053217875186638, 2.2250624360017253, -4.663598684084722, -10.92690153687042, -14.501117759249846, -14.721127718256962, -11.820251893705713, -6.747408907477821, -0.7946360160839683, 4.213684642786436, 8.621001586440592, 11.43851708016392, 12.64532483189202, 12.372900361759408, 10.7013921058286, 7.581031992524821, 2.9269169944267426, -2.5530669165299082, -9.51164521262539, -16.238582611807068, -21.167523715780103, -22.634796225912915, -19.405844689307024, -11.200325508823996, 0.3811399571845728, 14.28146387608062, 26.81054542912841, 34.78344511767276, 35.77611116596963, 28.84817084233142, 14.909243930400418, -2.7945777016815705, -21.65639219491944] +``` +Колебания с каждым разом становятся все сильнее и сильнее. + + +#### 3.3. Области действия объектов в модулях. +В ранее созданных модулях вводятся и используются следующие объекты: +__Mod1: perm1__ +__Mod2:__ функции __alpha, beta;__ переменные __t, expi__ +__Mod0:__ переменные __tt,qq__ + +Проведите следующие эксперименты: +- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha. +- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi. +- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране. +- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq. + +_Код:_ +```py +>> import Mod1 +#Модуль 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) +# Новые строчки: +perm1 = Mod1.perm1*3 +print("perm1*3= ", perm1) +``` + +_Вывод:_ +```py +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +perm1= 5 +****ALPHA**** +Значение t=3 +tt= 3 +****BETA**** +qq= 12391.647807916694 +perm1*3= 555 +``` + +При импорте __Mod1__ выполнился его код с вводом значения 5, затем функция __alpha__ вернула tt=3, которая передалась в __beta__ для вычисления __qq__=12391.6, а умножение __perm1__ создало новую переменную со значением 15 в модуле __Mod0__, не изменяя оригинальный __perm1__=5 в модуле __Mod1__. + +_Код:_ +```py +import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>> Mod1.perm1 +'5' +>> Mod1.perm1 = Mod1.perm1 * 2 +>> Mod1.perm1 +'55' +>> from Mod2 import alpha as al +>> al() +****ALPHA**** +Значение t=9 +'9' +qq= 573502.6262733063 +>> perm1 = perm1*2 +>> tt +'44' +>> tt = tt * 2 +'4444' +>> qq + 573502.6262733063 +>> qq = qq * 2 + 1147005.2525466126 + +>> perm1 = 8 +>> perm1 = perm1 * 8 +>> perm1 +64 +``` + +Переменные из разных модулей и основного кода не связаны между собой. Переменная __Mod1.perm1__ из модуля и __perm1__ в основном коде - это совершенно разные переменные. + +__Mod1.perm1__ была строкой "5". +__tt__ тоже была строка "44" +__qq__ было числом. +__perm1__ в основном коде создалась тоже как число. + +# Завершение работы diff --git a/TEMA8/report.py b/TEMA8/report.py new file mode 100644 index 0000000..67cee55 --- /dev/null +++ b/TEMA8/report.py @@ -0,0 +1,50 @@ + # 1 +import os,sys,importlib #Импорт трёх важных вспомогательных модулей(imp - устарел) +os.chdir('C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA8') #Делаем рабочий каталог текущим +os.getcwd() #Контролируем корректность установки текущего каталога + +#Записываем значение "5" +import Mod1 +print(type(Mod1)) +print(dir(Mod1)) +print(Mod1.perm1) + +#Записываем значение "3" +import Mod1 +importlib.reload(Mod1) +print(Mod1.perm1) + +# 2 +print(sorted(sys.modules.keys())) +sys.modules.pop('Mod1') +print(sorted(sys.modules.keys())) +exec(open('Mod1.py').read()) +exec(open('Mod1.py').read()) +exec(open('Mod1.py').read()) +print(perm1) + +from Mod1 import perm1 +print(sorted(sys.modules.keys())) +print(perm1) + +from Mod2 import beta +g=beta(2) +print(g) +print(sorted(sys.modules.keys())) +print(alpha()) + +from Mod2 import alpha as al +print(al()) +del al,beta + +from Mod2 import * +tt=alpha() +uu=beta(float(tt)) + +#3 +sys.modules.pop('Mod1') +sys.modules.pop('Mod2') +import Mod0 + +import Mod0Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 + \ No newline at end of file