From 832863a16909792a0f0b29c7a0e57fd411cf2ff5 Mon Sep 17 00:00:00 2001 From: Solovyova_ED Date: Sun, 7 Dec 2025 14:37:19 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'TEMA8/report.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA8/report.md | 501 ++++++++++++------------------------------------ 1 file changed, 120 insertions(+), 381 deletions(-) diff --git a/TEMA8/report.md b/TEMA8/report.md index e1c98da..8467c52 100644 --- a/TEMA8/report.md +++ b/TEMA8/report.md @@ -1,570 +1,309 @@ -\# Отчёт по Теме 8 +# Отчёт по Теме 8 Соловьёва Екатерина, А-01-23 - - -\## 1. Запуск интерактивной оболочки IDLE. +## 1. Запуск интерактивной оболочки IDLE. Следует начинать сеанс работы с IDLE со следующих инструкций: ```py +import sys, importlib #Импорт трёх важных вспомогательных модулей +import os -  import sys, importlib #Импорт трёх важных вспомогательных модулей - -  import os - -  os.chdir("C:\\\\Users\\\\Ekaterina\\\\OneDrive\\\\Desktop\\\\Solovyova\\\\python-labs\\\\TEMA8") - -  os.getcwd() #Контролируем корректность установки текущего каталога - -  'C:\\\\Users\\\\Ekaterina\\\\OneDrive\\\\Desktop\\\\Solovyova\\\\python-labs\\\\TEMA8' - +os.chdir("C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8") +os.getcwd() #Контролируем корректность установки текущего каталога +'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8' ``` +Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ и по другим соображениям. При этом возникают 2 проблемы: -Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ и по другим соображениям. При этом возникают 2 проблемы: - -\- передача управления от одного модуля к другому в процессе выполнения программы; +* передача управления от одного модуля к другому в процессе выполнения программы; -\- передача данных между модулями. +* передача данных между модулями. Поэтому техника структурирования программ на любом языке программирования предусматривает изучение способов решения этих проблем. - - - -\## 2. Создание и использование модулей в среде Python. - +## 2. Создание и использование модулей в среде Python. Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле. В языке Python модули также являются объектами класса module. - - - -\## 2.1. Запуск модуля на выполнение путем его импорта. - +## 2.1. Запуск модуля на выполнение путем его импорта. Cодержимое модуля становится доступным для исполнения после выполнения процедуры импорта. После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями. В Python импорт является одним из важных способов решения проблемы передачи управления между модулями. Файл с именем Mod1.py содержит: - ```py - perm1=input('Mod1:Введите значение = ') - print('Mod1:Значение perm1=',perm1) - -``` - - - +`` Пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «\*» (звёздочка). - Теперь вспомним возможность запуска модуля из командной строки оболочки IDLE. Для этого введите в ней инструкцию ```py - -  import Mod1 - -  Mod1:Введите значение = 5 - -  Mod1:Значение perm1= 5 - + import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 ``` +При этом управление передается от модуля с именем main (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог. -При этом управление передается от модуля с именем \_\_main\_\_ (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог. - -После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами. - +После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами. ```py - type(Mod1) - - - dir(Mod1) - -\['\_\_builtins\_\_', '\_\_cached\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', 'perm1'] - +['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1'] ``` Доступ к значению созданного в модуле объекта perm1 – атрибута модуля Mod1: - ```py - -  Mod1.perm1 - -  '5' - +Mod1.perm1 +'5' import Mod1 - - - - - ``` - Повторно выполнить модуль с помощью инструкции импорта не выходит. Для повторного выполнения ранее импортированного модуля следует применить функцию reload из модуля imp: - ```py - -  importlib.reload(Mod1) - -  Mod1:Введите значение = 3 - -  Mod1:Значение perm1= 3 - -  - -  Mod1.perm1 - -  '3' - +importlib.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +Mod1.perm1 +'3' ``` - -\## 2.2. Словарь импортированных модулей - +## 2.2. Словарь импортированных модулей ```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', '\_suggestions', '\_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'] - +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', '_suggestions', '_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'] ``` - - Для обеспечения возможности повторного импорта и, следовательно, выполнения программы из модуля, его надо удалить из этого словаря: - ```py - -  sys.modules.pop('Mod1') - + sys.modules.pop('Mod1') ``` - - Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря. +Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря. ```py - 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', '\_suggestions', '\_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'] - - +['__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', '_suggestions', '_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 - Mod1.perm1 - '5' - sys.modules.pop('Mod1') - - - + ``` - - -\## 2.3. Запуск модуля на выполнение с помощью функции exec(). - +## 2.3. Запуск модуля на выполнение с помощью функции exec(). Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции. - Внимание: объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы! - ```py - -  exec(open('Mod1.py', encoding='utf-8').read()) - -  Mod1:Введите значение = 1 - -  Mod1:Значение perm1= 1 - -  exec(open('Mod1.py', encoding='utf-8').read()) - -  Mod1:Введите значение = 2 - -  Mod1:Значение perm1= 2 - -  exec(open('Mod1.py', encoding='utf-8').read()) - -  Mod1:Введите значение = 3 - -  Mod1:Значение perm1= 3 - +exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 1 +Mod1:Значение perm1= 1 +exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 2 +Mod1:Значение perm1= 2 +exec(open('Mod1.py', encoding='utf-8').read()) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 ``` - Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля. - - -\## 2.4. Использование инструкции from … import … - +## 2.4. Использование инструкции from … import … В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов. - ```py - -  from Mod1 import perm1 - -  Mod1:Введите значение = 4 - -  Mod1:Значение perm1= 4 - -  'Mod1' in dir() - -  True - -  perm1 - -  '4' - +from Mod1 import perm1 +Mod1:Введите значение = 4 +Mod1:Значение perm1= 4 +'Mod1' in dir() +True +perm1 +'4' ``` - Пример 2. Mod2, содержащий две функции - ```py - def alpha(): - -  print('\*\*\*\*ALPHA\*\*\*\*') - -  t=input('Значение t=') - -  return t - - + print('****ALPHA****') + t=input('Значение t=') + return t def beta(q): - -  import math - -  expi=q\*math.pi - -  return math.exp(expi) - -```py - - + import math + expi=q*math.pi + return math.exp(expi) +``` ```py - g=beta(2) - -\*\*\*\*BETA\*\*\*\* - +****BETA**** g - -535.4916555247646Выведите - - +535.4916555247646 print(sorted(sys.modules.keys())) - -\['Mod2', '\_\_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', '\_suggestions', '\_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'] - +['Mod2', '__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', '_suggestions', '_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'] ``` - ```py - -  alpha() #Функция alpha не была импортирована - +alpha() #Функция alpha не была импортирована Traceback (most recent call last): - -  File "", line 1, in - + File "", line 1, in NameError: name 'alpha' is not defined from Mod2 import alpha as al - del al,beta from Mod2 import alpha as al, beta as bt - del al,beta - - -from Mod2 import \* - +from Mod2 import * tt = alpha() - - -from Mod2 import \* - +from Mod2 import * tt=alpha() - -\*\*\*\*ALPHA\*\*\*\* - +****ALPHA**** Значение t=0.12 - uu=beta(float(tt)) - -\*\*\*\*BETA\*\*\*\* - +****BETA**** uu - 1.4578913609506803 - ``` -\## 3. Создание многомодульных программ. - -\## 3.1. Пример простой многомодульной программы. - +## 3. Создание многомодульных программ. +## 3.1. Пример простой многомодульной программы. Модуль Mod0 - ```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) - ``` Этот модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0. - ```py - import Mod0 - Mod1:Введите значение = 1 - Mod1:Значение perm1= 1 - perm1= 1 - -\*\*\*\*ALPHA\*\*\*\* - +****ALPHA**** Значение t=2 - tt= 2 - -\*\*\*\*BETA\*\*\*\* - +****BETA**** qq= 535.4916555247646 - Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 - '2' - 535.4916555247646 - '1' - ``` - - - -\## 3.2. Еще пример. +## 3.2. Еще пример. Создайте модуль MM1, включив в него (скопировать из текста темы 7) разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создайте модуль ММ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]) - - +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=\[] - +vhod=[] for i in range(N): - -  vhod.append(A\*math.sin((2\*i\*math.pi)/F)) - - + vhod.append(A*math.sin((2*i*math.pi)/F)) import MM1 as mod - yi1=0;yin1=0;yi2=0 - -vyhod=\[] - +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) - + 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) - +``` В ответ на запрос программы введите некоторые, подходящие по смыслу значения параметров задачи и проанализируйте полученный выходной сигнал. - - -\## 3.3. Области действия объектов в модулях. +## 3.3. Области действия объектов в модулях. В ранее созданных модулях вводятся и используются следующие объекты: Mod1: perm1 - Mod2: функции alpha, beta; переменные t, expi - Mod0: переменные tt,qq Проведите следующие эксперименты: -\- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha. - +Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha. +```py def alpha(): - -  print("Alpha called") - -  result\_beta = beta(5) # вызов beta из alpha - -  print("Beta returned:", result\_beta) - -  return "alpha\_finished" - - + print("Alpha called") + result_beta = beta(5) # вызов beta из alpha + print("Beta returned:", result_beta) + return "alpha_finished" def beta(x): - -  print("Beta called with", x) - -  if x > 0: - -  # вызов alpha из beta (осторожно, может быть бесконечная рекурсия) - -  # alpha() # раскомментировать для эксперимента - -  pass - -  return x \* 2 - - - -\- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi. - + print("Beta called with", x) + if x > 0: + # вызов alpha из beta (осторожно, может быть бесконечная рекурсия) + # alpha() # раскомментировать для эксперимента + pass + return x * 2 +```py + Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi. +```py import Mod2 - print("t =", Mod2.t) - print("expi =", Mod2.expi) - - - t = 10 - expi = 2.718 - - - -\- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране. - - - +``` +- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране. +```py import Mod1 - -Mod1.perm1 \*= 3 - +Mod1.perm1 *= 3 print("Увеличенный perm1 =", Mod1.perm1) - - Mod1:Введите значение = 2 - Mod1:Значение perm1= 2 - Увеличенный perm1 = 222 - - - - - -\- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq. - +``` +Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq. Обобщите результаты экспериментов и сделайте выводы об областях действия объектов. - - - +```py import Mod1, Mod2 - from Mod2 import alpha as al, beta - - tt = al() - qq = beta(2) - - print('tt =', tt, 'qq =', qq) - - -Mod1.perm1 \*= 3 - +Mod1.perm1 *= 3 print('Увеличенный perm1 =', Mod1.perm1) - - Mod1:Введите значение = 2 - Mod1:Значение perm1= 2 - Alpha called - Beta called with 5 - Beta returned: 10 - Beta called with 2 - -tt = alpha\_finished qq = 4 - +tt = alpha_finished qq = 4 Увеличенный perm1 = 222 - -\## 4. Окончание сеанса работы с IDLE. +``` +## 4. Окончание сеанса работы с IDLE.