Изменил(а) на 'TEMA8/report.md'

main
Solovyova_ED 5 дней назад
Родитель ed2affa688
Сommit 832863a169

@ -1,570 +1,309 @@
\# Отчёт по Теме 8 # Отчёт по Теме 8
Соловьёва Екатерина, А-01-23 Соловьёва Екатерина, А-01-23
## 1. Запуск интерактивной оболочки IDLE.
\## 1. Запуск интерактивной оболочки IDLE.
Следует начинать сеанс работы с IDLE со следующих инструкций: Следует начинать сеанс работы с IDLE со следующих инструкций:
```py ```py
import sys, importlib #Импорт трёх важных вспомогательных модулей
import os
  import sys, importlib #Импорт трёх важных вспомогательных модулей os.chdir("C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8")
os.getcwd() #Контролируем корректность установки текущего каталога
  import os '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. Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле. В языке Python модули также являются объектами класса module.
## 2.1. Запуск модуля на выполнение путем его импорта.
\## 2.1. Запуск модуля на выполнение путем его импорта.
Cодержимое модуля становится доступным для исполнения после выполнения процедуры импорта. После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями. В Python импорт является одним из важных способов решения проблемы передачи управления между модулями. Cодержимое модуля становится доступным для исполнения после выполнения процедуры импорта. После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями. В Python импорт является одним из важных способов решения проблемы передачи управления между модулями.
Файл с именем Mod1.py содержит: Файл с именем Mod1.py содержит:
```py ```py
perm1=input('Mod1:Введите значение = ') perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1) print('Mod1:Значение perm1=',perm1)
``
```
Пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «\*» (звёздочка). Пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «\*» (звёздочка).
Теперь вспомним возможность запуска модуля из командной строки оболочки IDLE. Для этого введите в ней инструкцию Теперь вспомним возможность запуска модуля из командной строки оболочки IDLE. Для этого введите в ней инструкцию
```py ```py
import Mod1
  import Mod1 Mod1:Введите значение = 5
Mod1:Значение perm1= 5
  Mod1:Введите значение = 5
  Mod1:Значение perm1= 5
``` ```
При этом управление передается от модуля с именем main (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог.
При этом управление передается от модуля с именем \_\_main\_\_ (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог.
После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами. После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами.
```py ```py
type(Mod1) type(Mod1)
<class 'module'> <class 'module'>
dir(Mod1) dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
\['\_\_builtins\_\_', '\_\_cached\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', 'perm1']
``` ```
Доступ к значению созданного в модуле объекта perm1 – атрибута модуля Mod1: Доступ к значению созданного в модуле объекта perm1 – атрибута модуля Mod1:
```py ```py
Mod1.perm1
&nbsp; Mod1.perm1 '5'
&nbsp; '5'
import Mod1 import Mod1
``` ```
Повторно выполнить модуль с помощью инструкции импорта не выходит. Для повторного выполнения ранее импортированного модуля следует применить функцию reload из модуля imp: Повторно выполнить модуль с помощью инструкции импорта не выходит. Для повторного выполнения ранее импортированного модуля следует применить функцию reload из модуля imp:
```py ```py
importlib.reload(Mod1)
&nbsp; importlib.reload(Mod1) Mod1:Введите значение = 3
Mod1:Значение perm1= 3
&nbsp; Mod1:Введите значение = 3 <module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
Mod1.perm1
&nbsp; Mod1:Значение perm1= 3 '3'
&nbsp; <module 'Mod1' from 'C:\\\\Users\\\\Ekaterina\\\\OneDrive\\\\Desktop\\\\Solovyova\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
&nbsp; Mod1.perm1
&nbsp; '3'
``` ```
## 2.2. Словарь импортированных модулей
\## 2.2. Словарь импортированных модулей
```py ```py
print(sorted(sys.modules.keys()))
&nbsp; 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']
&nbsp; \['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 ```py
sys.modules.pop('Mod1')
&nbsp; sys.modules.pop('Mod1')
``` ```
Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря.
&nbsp;Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря.
```py ```py
sys.modules.pop('Mod1') sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
<module 'Mod1' from 'C:\\\\Users\\\\Ekaterina\\\\OneDrive\\\\Desktop\\\\Solovyova\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
print(sorted(sys.modules.keys())) 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 import Mod1
Mod1:Введите значение = 5 Mod1:Введите значение = 5
Mod1:Значение perm1= 5 Mod1:Значение perm1= 5
Mod1.perm1 Mod1.perm1
'5' '5'
sys.modules.pop('Mod1') sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
<module 'Mod1' from 'C:\\\\Users\\\\Ekaterina\\\\OneDrive\\\\Desktop\\\\Solovyova\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
``` ```
## 2.3. Запуск модуля на выполнение с помощью функции exec().
\## 2.3. Запуск модуля на выполнение с помощью функции exec().
Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции. Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции.
Внимание: объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы! Внимание: объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы!
```py ```py
exec(open('Mod1.py', encoding='utf-8').read())
&nbsp; exec(open('Mod1.py', encoding='utf-8').read()) Mod1:Введите значение = 1
Mod1:Значение perm1= 1
&nbsp; Mod1:Введите значение = 1 exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 2
&nbsp; Mod1:Значение perm1= 1 Mod1:Значение perm1= 2
exec(open('Mod1.py', encoding='utf-8').read())
&nbsp; exec(open('Mod1.py', encoding='utf-8').read()) Mod1:Введите значение = 3
Mod1:Значение perm1= 3
&nbsp; Mod1:Введите значение = 2
&nbsp; Mod1:Значение perm1= 2
&nbsp; exec(open('Mod1.py', encoding='utf-8').read())
&nbsp; Mod1:Введите значение = 3
&nbsp; Mod1:Значение perm1= 3
``` ```
Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля. Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля.
## 2.4. Использование инструкции from … import …
\## 2.4. Использование инструкции from … import …
В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов. В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов.
```py ```py
from Mod1 import perm1
&nbsp; from Mod1 import perm1 Mod1:Введите значение = 4
Mod1:Значение perm1= 4
&nbsp; Mod1:Введите значение = 4 'Mod1' in dir()
True
&nbsp; Mod1:Значение perm1= 4 perm1
'4'
&nbsp; 'Mod1' in dir()
&nbsp; True
&nbsp; perm1
&nbsp; '4'
``` ```
Пример 2. Пример 2.
Mod2, содержащий две функции Mod2, содержащий две функции
```py ```py
def alpha(): def alpha():
print('****ALPHA****')
&nbsp; print('\*\*\*\*ALPHA\*\*\*\*') t=input('Значение t=')
return t
&nbsp; t=input('Значение t=')
&nbsp; return t
def beta(q): def beta(q):
import math
&nbsp; import math expi=q*math.pi
return math.exp(expi)
&nbsp; expi=q\*math.pi ```
&nbsp; return math.exp(expi)
```py
```py ```py
g=beta(2) g=beta(2)
****BETA****
\*\*\*\*BETA\*\*\*\*
g g
535.4916555247646
535.4916555247646Выведите
print(sorted(sys.modules.keys())) 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 ```py
alpha() #Функция alpha не была импортирована
&nbsp; alpha() #Функция alpha не была импортирована
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 1, in <module>
&nbsp; File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined NameError: name 'alpha' is not defined
from Mod2 import alpha as al from Mod2 import alpha as al
del al,beta del al,beta
from Mod2 import alpha as al, beta as bt from Mod2 import alpha as al, beta as bt
del al,beta del al,beta
from Mod2 import *
from Mod2 import \*
tt = alpha() tt = alpha()
from Mod2 import *
from Mod2 import \*
tt=alpha() tt=alpha()
****ALPHA****
\*\*\*\*ALPHA\*\*\*\*
Значение t=0.12 Значение t=0.12
uu=beta(float(tt)) uu=beta(float(tt))
****BETA****
\*\*\*\*BETA\*\*\*\*
uu uu
1.4578913609506803 1.4578913609506803
``` ```
\## 3. Создание многомодульных программ. ## 3. Создание многомодульных программ.
## 3.1. Пример простой многомодульной программы.
\## 3.1. Пример простой многомодульной программы.
Модуль Mod0 Модуль Mod0
```py ```py
import Mod1 import Mod1
print('perm1=',Mod1.perm1) print('perm1=',Mod1.perm1)
from Mod2 import alpha as al from Mod2 import alpha as al
tt=al() tt=al()
print('tt=',tt) print('tt=',tt)
from Mod2 import beta from Mod2 import beta
qq=beta(float(tt)) qq=beta(float(tt))
print('qq=',qq) print('qq=',qq)
``` ```
Этот модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0. Этот модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0.
```py ```py
import Mod0 import Mod0
Mod1:Введите значение = 1 Mod1:Введите значение = 1
Mod1:Значение perm1= 1 Mod1:Значение perm1= 1
perm1= 1 perm1= 1
****ALPHA****
\*\*\*\*ALPHA\*\*\*\*
Значение t=2 Значение t=2
tt= 2 tt= 2
****BETA****
\*\*\*\*BETA\*\*\*\*
qq= 535.4916555247646 qq= 535.4916555247646
Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2' '2'
535.4916555247646 535.4916555247646
'1' '1'
``` ```
## 3.2. Еще пример.
\## 3.2. Еще пример.
Создайте модуль MM1, включив в него (скопировать из текста темы 7) разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создайте модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала: Создайте модуль MM1, включив в него (скопировать из текста темы 7) разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создайте модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала:
```py
znach=input('k1,T,k2,Xm,A,F,N=').split(',') znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1=float(znach[0])
k1=float(znach\[0]) T=float(znach[1])
k2=float(znach[2])
T=float(znach\[1]) Xm=float(znach[3])
A=float(znach[4])
k2=float(znach\[2]) F=float(znach[5])
N=int(znach[6])
Xm=float(znach\[3])
A=float(znach\[4])
F=float(znach\[5])
N=int(znach\[6])
import math import math
vhod=[]
vhod=\[]
for i in range(N): for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
&nbsp; vhod.append(A\*math.sin((2\*i\*math.pi)/F))
import MM1 as mod import MM1 as mod
yi1=0;yin1=0;yi2=0 yi1=0;yin1=0;yi2=0
vyhod=[]
vyhod=\[]
for xt in vhod: for xt in vhod:
xt1=xt-yi2 #отрицательная обратная связь
&nbsp; xt1=xt-yi2 #отрицательная обратная связь [yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
yi2=mod.tahogen(yin1,k2,yi2)
&nbsp; \[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1) yt=mod.nechus(yin1,Xm)
vyhod.append(yt)
&nbsp; yi2=mod.tahogen(yin1,k2,yi2) ```
&nbsp; yt=mod.nechus(yin1,Xm)
&nbsp; vyhod.append(yt)
Наконец, создайте главную программу – модуль ММ0, запускающую на выполнение модуль ММ2 и выводящую полученный выходной сигнал Наконец, создайте главную программу – модуль ММ0, запускающую на выполнение модуль ММ2 и выводящую полученный выходной сигнал
```py
import MM2 import MM2
print('y=',MM2.vyhod) print('y=',MM2.vyhod)
```
В ответ на запрос программы введите некоторые, подходящие по смыслу значения параметров задачи и проанализируйте полученный выходной сигнал. В ответ на запрос программы введите некоторые, подходящие по смыслу значения параметров задачи и проанализируйте полученный выходной сигнал.
## 3.3. Области действия объектов в модулях.
\## 3.3. Области действия объектов в модулях.
В ранее созданных модулях вводятся и используются следующие объекты: В ранее созданных модулях вводятся и используются следующие объекты:
Mod1: perm1 Mod1: perm1
Mod2: функции alpha, beta; переменные t, expi Mod2: функции alpha, beta; переменные t, expi
Mod0: переменные tt,qq Mod0: переменные tt,qq
Проведите следующие эксперименты: Проведите следующие эксперименты:
\- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha. Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha.
```py
def alpha(): def alpha():
print("Alpha called")
&nbsp; print("Alpha called") result_beta = beta(5) # вызов beta из alpha
print("Beta returned:", result_beta)
&nbsp; result\_beta = beta(5) # вызов beta из alpha return "alpha_finished"
&nbsp; print("Beta returned:", result\_beta)
&nbsp; return "alpha\_finished"
def beta(x): def beta(x):
print("Beta called with", x)
&nbsp; print("Beta called with", x) if x > 0:
# вызов alpha из beta (осторожно, может быть бесконечная рекурсия)
&nbsp; if x > 0: # alpha() # раскомментировать для эксперимента
pass
&nbsp; # вызов alpha из beta (осторожно, может быть бесконечная рекурсия) return x * 2
```py
&nbsp; # alpha() # раскомментировать для эксперимента
&nbsp; pass
&nbsp; return x \* 2
\- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi.
Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi.
```py
import Mod2 import Mod2
print("t =", Mod2.t) print("t =", Mod2.t)
print("expi =", Mod2.expi) print("expi =", Mod2.expi)
t = 10 t = 10
expi = 2.718 expi = 2.718
```
- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране.
```py
\- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране.
import Mod1 import Mod1
Mod1.perm1 *= 3
Mod1.perm1 \*= 3
print("Увеличенный perm1 =", Mod1.perm1) print("Увеличенный perm1 =", Mod1.perm1)
Mod1:Введите значение = 2 Mod1:Введите значение = 2
Mod1:Значение perm1= 2 Mod1:Значение perm1= 2
Увеличенный perm1 = 222 Увеличенный perm1 = 222
```
Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq.
\- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq.
Обобщите результаты экспериментов и сделайте выводы об областях действия объектов. Обобщите результаты экспериментов и сделайте выводы об областях действия объектов.
```py
import Mod1, Mod2 import Mod1, Mod2
from Mod2 import alpha as al, beta from Mod2 import alpha as al, beta
tt = al() tt = al()
qq = beta(2) qq = beta(2)
print('tt =', tt, 'qq =', qq) print('tt =', tt, 'qq =', qq)
Mod1.perm1 *= 3
Mod1.perm1 \*= 3
print('Увеличенный perm1 =', Mod1.perm1) print('Увеличенный perm1 =', Mod1.perm1)
Mod1:Введите значение = 2 Mod1:Введите значение = 2
Mod1:Значение perm1= 2 Mod1:Значение perm1= 2
Alpha called Alpha called
Beta called with 5 Beta called with 5
Beta returned: 10 Beta returned: 10
Beta called with 2 Beta called with 2
tt = alpha_finished qq = 4
tt = alpha\_finished qq = 4
Увеличенный perm1 = 222 Увеличенный perm1 = 222
```
\## 4. Окончание сеанса работы с IDLE. ## 4. Окончание сеанса работы с IDLE.

Загрузка…
Отмена
Сохранить