Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

593 строки
27 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Отчет по Теме 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
<class 'module'>
```
Получим список атрибутов.
_Код:_
```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
<module 'Mod1' from 'C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA8\\Mod1.py'>
```
Проверим, что это значение стало значением объекта __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())
```
_Вывод:_
```py
Mod1:РведиСРµ Р·РЅР°Сение = 2
Mod1:РРЅР°Сение perm1= 2
```
_Код:_
```py
exec(open('Mod1.py').read())
```
_Вывод:_
```py
Mod1:РведиСРµ Р·РЅР°Сение = 3
Mod1:РРЅР°Сение perm1= 3
```
_Код:_
```py
exec(open('Mod1.py').read())
```
_Вывод:_
```py
Mod1:РведиСРµ Р·РЅР°Сение = 20
Mod1:РРЅР°Сение perm1= 20
```
Выводим на экран значение объекта perm1.
perm1
_Код:_
```py
perm1
```
_Вывод:_
```py
'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
```
_Вывод:_
```py
'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
```
_Вывод:_
```py
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 "<pyshell#71>", line 1, in <module>
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')
<module 'Mod1' from 'C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA8\\Mod1.py'>
sys.modules.pop('Mod2')
<module 'Mod2' from 'C:\\Users\\user\\OneDrive\\Documents\\ZelenkinaKs\\python-labs\\TEMA8\\Mod2.py'>
```
Запустим программу на выполнение инструкцией:
_Код:_
```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 and 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)
print(f't = {al.t}, expi = {beta.expi}')
# Новые строчки:
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
Traceback (most recent call last):
File "c:\Users\user\OneDrive\Documents\ZelenkinaKs\python-labs\TEMA8\report.py", line 59, in <module>
print(f't = {al.t}, expi = {beta.expi}')
^^^^
AttributeError: 'function' object has no attribute 't'
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__ в основном коде создалась тоже как число.
# Завершение работы