форкнуто от main/python-labs
Родитель
509150281a
Сommit
c850ee604c
@ -0,0 +1,594 @@
|
||||
# Отчет по Теме 8
|
||||
|
||||
|
||||
|
||||
Грудинин Егор, А-03-23
|
||||
|
||||
|
||||
|
||||
## 1 Создание и использование модулей в среде Python
|
||||
|
||||
Создадим модуль Mod1:
|
||||
|
||||
```py
|
||||
perm1=input('Mod1:Введите значение = ')
|
||||
print('Mod1:значение perm1',perm1)
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
>>> import Mod1
|
||||
|
||||
Mod1:Введите значение = 5
|
||||
|
||||
Mod1:Значение perm1= 5
|
||||
|
||||
>>> dir(Mod1)
|
||||
|
||||
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
|
||||
|
||||
>>> type(Mod1)
|
||||
|
||||
<class 'module'>
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'5'
|
||||
|
||||
>>> import Mod1
|
||||
|
||||
>>> import importlib
|
||||
|
||||
>>> importlib.reload(Mod1)
|
||||
|
||||
Mod1:Введите значение = 3
|
||||
|
||||
Mod1:Значение perm1= 3
|
||||
|
||||
<module 'Mod1' from 'D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod1.py'>
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'3'
|
||||
|
||||
>>> import sys
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
|
||||
>>> sys.modules.pop('Mod1')
|
||||
|
||||
<module 'Mod1' from 'D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod1.py'>
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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:Введите значение = 6
|
||||
|
||||
Mod1:Значение perm1= 6
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
\['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
|
||||
>>> sys.modules.pop('Mod1')
|
||||
|
||||
<module 'Mod1' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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']
|
||||
|
||||
>>> exec(open('Mod1.py').read())
|
||||
|
||||
Mod1:Введите значение = 2
|
||||
|
||||
Mod1:Значение perm1= 2
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'6'
|
||||
|
||||
>>> exec(open('Mod1.py').read())
|
||||
|
||||
Mod1:Введите значение = 5
|
||||
|
||||
Mod1:Значение perm1= 5
|
||||
|
||||
>>> exec(open('Mod1.py').read())
|
||||
|
||||
Mod1:Введите значение = 9
|
||||
|
||||
Mod1:Значение perm1= 9
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'6'
|
||||
|
||||
>>> dir()
|
||||
|
||||
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'importlib', 'perm1', 'sys']
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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']
|
||||
|
||||
>>> perm1 in sorted(sys.modules.keys())
|
||||
|
||||
False
|
||||
|
||||
>>> from Mod1 import perm1
|
||||
|
||||
Mod1:Введите значение = 2
|
||||
|
||||
Mod1:Значение perm1= 2
|
||||
|
||||
>>> dir()
|
||||
|
||||
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'importlib', 'perm1', 'sys']
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'6'
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
\['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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']
|
||||
|
||||
```
|
||||
|
||||
Когда модуль импортируется в Python, он кэшируется в памяти. Даже после удаления через pop, интерпретатор сохраняет созданные объекты и переменные. При повторном импорте создается новая копия модуля, но прежняя версия с её значениями продолжает существовать в памяти независимо.
|
||||
|
||||
|
||||
Теперь создадим модуль Mod2:
|
||||
|
||||
```py
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t = input('Значение t=')
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi = q * math.pi
|
||||
return math.exp(expi)
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
>>> from Mod2 import beta
|
||||
|
||||
>>> g=beta(2)
|
||||
|
||||
>>> g
|
||||
|
||||
535.4916555247646
|
||||
|
||||
>>> dir()
|
||||
|
||||
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'beta', 'g', 'importlib', 'perm1', 'sys']
|
||||
|
||||
print(sorted(sys.modules.keys()))
|
||||
|
||||
\['Mod1', 'Mod2', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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']
|
||||
|
||||
>>> alpha()
|
||||
|
||||
Traceback (most recent call last):
|
||||
|
||||
File "<pyshell#35>", line 1, in <module>
|
||||
|
||||
alpha()
|
||||
|
||||
NameError: name 'alpha' is not defined
|
||||
|
||||
>>> beta()
|
||||
|
||||
Traceback (most recent call last):
|
||||
|
||||
File "<pyshell#36>", line 1, in <module>
|
||||
|
||||
beta()
|
||||
|
||||
TypeError: beta() missing 1 required positional argument: 'q'
|
||||
|
||||
>>> from Mod2 import alpha as al
|
||||
|
||||
>>> al()
|
||||
|
||||
****ALPHA****
|
||||
|
||||
Значение t=2
|
||||
|
||||
'2'
|
||||
|
||||
>>> del al,beta
|
||||
|
||||
>>> from Mod2 import alpha as al, beta as bt
|
||||
|
||||
>>> del al,bt
|
||||
|
||||
>>> from Mod2 import \*
|
||||
|
||||
>>> tt=alpha()
|
||||
|
||||
****ALPHA****
|
||||
|
||||
Значение t=0.12
|
||||
|
||||
>>> uu=beta(float(tt))
|
||||
|
||||
>>> uu
|
||||
|
||||
1.4578913609506803
|
||||
|
||||
```
|
||||
|
||||
## 2 Создание многомодульных программ
|
||||
|
||||
```py
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
['Mod1', 'Mod2', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
|
||||
>>> sys.modules.pop('Mod1')
|
||||
|
||||
<module 'Mod1' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
|
||||
|
||||
>>> sys.modules.pop('Mod2')
|
||||
|
||||
<module 'Mod2' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod2.py'>
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
|
||||
['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', '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']
|
||||
|
||||
```
|
||||
|
||||
Создадим модуль Mod0:
|
||||
|
||||
```py
|
||||
import Mod1
|
||||
print('perm1=', Mod1.perm1)
|
||||
from Mod2 import alpha as a1
|
||||
tt = a1()
|
||||
print('tt=', tt)
|
||||
from Mod2 import beta
|
||||
qq = beta(float(tt))
|
||||
print('qq=', qq)
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
>>> import Mod0
|
||||
|
||||
Mod1:Введите значение = 1
|
||||
|
||||
Mod1:Значение perm1= 1
|
||||
|
||||
perm1= 1
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=2
|
||||
|
||||
tt= 2
|
||||
|
||||
qq= 535.4916555247646
|
||||
|
||||
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
|
||||
|
||||
'2'
|
||||
|
||||
535.4916555247646
|
||||
|
||||
'1'
|
||||
|
||||
```
|
||||
|
||||
Создадим модули MM0, MM1 и MM2 такие, что:
|
||||
|
||||
MM0:
|
||||
```py
|
||||
import MM2
|
||||
print('y=', MM2.vyhod)
|
||||
```
|
||||
|
||||
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):
|
||||
# зона нечувствит
|
||||
ytt = None
|
||||
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)
|
||||
```
|
||||
|
||||
Запуск модуля MM0:
|
||||
|
||||
```py
|
||||
|
||||
k1,T,k2,Xm,A,F,N=100, 10, 200, 5, 1, 50, 100
|
||||
|
||||
y= \[0, 0, -2062.187673241671, 3752502.2801429303, -6811818291.756302, 12365297400107.988, -2.2446367934687616e+16, 4.074624468431861e+19, -7.396548344503773e+22, 1.342674100065877e+26, -2.4373175906128126e+29, 4.4243923653693636e+32, -8.031471925583947e+35, 1.4579299475411253e+39, -2.6465382082285303e+42, 4.8041845216406776e+45, -8.720897679168846e+48, 1.5830794172859812e+52, -2.873718433161771e+55, 5.216578235381038e+58, -9.469504100271485e+61, 1.7189717830141683e+65, -3.1203999275043293e+68, 5.664372041346515e+71, -1.0282371288365432e+75, 1.866529220539488e+78, -3.3882566904288307e+81, 6.150604701981334e+84, -1.116501542132187e+88, 2.026753065730243e+91, -3.6791064180730074e+94, 6.6785758286883414e+97, -1.212342618860748e+101, 2.2007306096497498e+104, -3.994922838562404e+107, 7.25186827324016e+110, -1.3164107437767657e+114, 2.3896424769952626e+117, -4.3378491058778625e+120, 7.874372441280753e+123, -1.4294121310025034e+127, 2.5947706379059605e+130, -4.710212343459617e+133, 8.550312692910703e+136, -1.552113616450096e+140, 2.8175071075087226e+143, -5.1145394362419765e+146, 9.284276009512575e+149, -1.6853478616277227e+153, 3.059363392237472e+156, -5.5535741782845336e+159, 1.008124312135154e+163, -1.8300190041432215e+166, 3.321980747029509e+169, -6.030295892364987e+172, 1.0946622307185519e+176, -1.9871087932498902e+179, 3.607141313004942e+182, -6.547939647887588e+185, 1.1886286095251596e+189, -2.1576832520707578e+192, 3.916780211210369e+195, -7.110018214307417e+198, 1.2906611114684283e+202, -2.3428999117116665e+205, 4.252998674495826e+208, -7.72034589904807e+211, 1.401452136780036e+215, -2.5440156663544065e+218, 4.618078306638927e+221, -8.38306443167872e+224, 1.5217535216899362e+228, -2.7623953026351666e+231, 5.0144965654797075e+234, -9.102671070002446e+237, 1.652381640443558e+241, -2.999520761189287e+244, 5.444943575135833e+247, -9.8840491187859e+250, 1.7942229452788257e+254, -3.257001193211853e+257, 5.912340381387176e+260, -1.0732501068232718e+264, 1.948239981957719e+267, -3.536583880278735e+270, 6.419858774112167e+273, -1.1653784577080823e+277, 2.1154779216742002e+280, -3.840166091530762e+283, 6.9709428112924446e+286, -1.2654151544507626e+290, 2.2970716536645406e+293, -4.1698079586848016e+296, 7.569332190649337e+299, -1.374039053598805e+303, 2.494253486651031e+306, -inf, None, None, None]
|
||||
|
||||
```
|
||||
|
||||
Попробуем в Mod2 в функцию alpha вставить обращение к функции beta и наоборот:
|
||||
|
||||
Обращение к beta внутри alpha:
|
||||
```PY
|
||||
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t = input('Значение t=')
|
||||
beta(int(t))
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi = q * math.pi
|
||||
return math.exp(expi)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
Обращение к alpha внутри beta:
|
||||
```PY
|
||||
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t = input('Значение t=')
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi = q * math.pi
|
||||
alpha()
|
||||
return math.exp(expi)
|
||||
```
|
||||
|
||||
|
||||
```PY
|
||||
|
||||
>>> from Mod2 import alpha as al, beta as bt
|
||||
|
||||
>>> al()
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=2
|
||||
|
||||
'2'
|
||||
|
||||
|
||||
|
||||
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod2.py
|
||||
|
||||
>>> from Mod2 import alpha as al, beta as bt
|
||||
|
||||
>>> bt(2)
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=3
|
||||
|
||||
535.4916555247646
|
||||
|
||||
```
|
||||
|
||||
Обращение к функции beta внутри alpha происходит и выполняется, но возвращаемое значение beta не используется и не сохраняется. Аналогично, вызов alpha внутри beta выполняет ввод значения t, однако оператор return t из alpha игнорируется, так как возвращаемое значение не присваивается переменной.
|
||||
|
||||
|
||||
Теперь попробуем отобразить на экране в модуле Mod0 значения объектов t и expi:
|
||||
|
||||
```py
|
||||
# Модуль Mod0
|
||||
import Mod1
|
||||
print('perm1=', Mod1.perm1)
|
||||
from Mod2 import alpha as a1
|
||||
tt = a1()
|
||||
print('tt=', tt)
|
||||
from Mod2 import beta
|
||||
qq = beta(float(tt))
|
||||
print('qq=', qq)
|
||||
|
||||
print(beta.expi)
|
||||
print(a1.t)
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py
|
||||
|
||||
Mod1:Введите значение = 2
|
||||
|
||||
Mod1:Значение perm1= 2
|
||||
|
||||
perm1= 2
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=2
|
||||
|
||||
tt= 2
|
||||
|
||||
qq= 535.4916555247646
|
||||
|
||||
Traceback (most recent call last):
|
||||
|
||||
File "D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py", line 11, in <module>
|
||||
|
||||
print(al.t)
|
||||
|
||||
AttributeError: 'function' object has no attribute 't'
|
||||
|
||||
|
||||
|
||||
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py
|
||||
|
||||
Mod1:Введите значение = 1
|
||||
|
||||
Mod1:Значение perm1= 1
|
||||
|
||||
perm1= 1
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=1
|
||||
|
||||
tt= 1
|
||||
|
||||
qq= 23.140692632779267
|
||||
|
||||
Traceback (most recent call last):
|
||||
|
||||
File "D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py", line 12, in <module>
|
||||
|
||||
print(beta.expi)
|
||||
|
||||
AttributeError: 'function' object has no attribute 'expi'
|
||||
|
||||
```
|
||||
|
||||
Функция alpha не имеет атрибута t, так как t является локальной переменной, недоступной извне. Аналогично, переменная expi в функции beta также локальная и недоступна для обращения вне функции.
|
||||
|
||||
|
||||
Теперь попробуем в модуле Mod0 увеличить в 3 раза значение переменной perm1:
|
||||
|
||||
|
||||
|
||||
|
||||
```py
|
||||
# Модуль Mod0
|
||||
import Mod1
|
||||
print('perm1=', Mod1.perm1)
|
||||
from Mod2 import alpha as a1
|
||||
tt = a1()
|
||||
print('tt=', tt)
|
||||
from Mod2 import beta
|
||||
qq = beta(float(tt))
|
||||
print('qq=', qq)
|
||||
|
||||
Mod1.perm1 = Mod1.perm1 * 3
|
||||
print(Mod1.perm1)
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
Mod1:Введите значение = 12
|
||||
|
||||
Mod1:Значение perm1= 12
|
||||
|
||||
perm1= 12
|
||||
|
||||
\*\*\*\*ALPHA\*\*\*\*
|
||||
|
||||
Значение t=2
|
||||
|
||||
tt= 2
|
||||
|
||||
qq= 535.4916555247646
|
||||
|
||||
121212
|
||||
|
||||
```
|
||||
|
||||
Так как perm1 - строковая переменная, то результат умножения - строка, длина которой в три раза больше.
|
||||
|
||||
|
||||
|
||||
Теперь попробуем увеличить значения переменных tt, qq и perm1 в 2 раза:
|
||||
|
||||
```py
|
||||
|
||||
>>> Mod0.tt
|
||||
|
||||
'2'
|
||||
|
||||
>>> Mod0.tt = Mod0.tt\*2
|
||||
|
||||
>>> Mod0.tt
|
||||
|
||||
'22'
|
||||
|
||||
>>> import Mod1
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'3'
|
||||
|
||||
>>> Mod1.perm1 = Mod1.perm1 \* 2
|
||||
|
||||
>>> Mod1.perm1
|
||||
|
||||
'33'
|
||||
|
||||
>>> Mod0.qq
|
||||
|
||||
535.4916555247646
|
||||
|
||||
>>> Mod0.qq = Mod0.qq \* 2
|
||||
|
||||
>>> Mod0.qq
|
||||
|
||||
1070.9833110495292
|
||||
|
||||
```
|
||||
|
||||
В первых двух случаях умножение на два приводило к дублированию строки, поскольку функция alpha возвращает строковое значение t, а perm1 также является строкой. В случае с переменной qq, которая содержит результат функции beta (возвращающей вещественное число), умножение на два увеличивает численное значение, так как qq представляет собой число, а не строку.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,147 @@
|
||||
# Общее контрольное задание по теме 8
|
||||
|
||||
|
||||
|
||||
Грудинин Егор, А-03-23
|
||||
|
||||
|
||||
|
||||
## Задание
|
||||
|
||||
|
||||
|
||||
Разработайте программу, состоящую из трех модулей:
|
||||
|
||||
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
|
||||
|
||||
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
||||
|
||||
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
|
||||
|
||||
|
||||
|
||||
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Решение
|
||||
|
||||
|
||||
|
||||
### Задача 1
|
||||
|
||||
Содержание модуля M1:
|
||||
```py
|
||||
def readFile(fName):
|
||||
fp = open(fName, 'r')
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
ls = list(map(int, data.replace('\n', ' ').split(' ')))
|
||||
return ls
|
||||
```
|
||||
|
||||
Содержание файла test_task.txt:
|
||||
|
||||
```py
|
||||
1 2 3
|
||||
3 4 5
|
||||
6 7
|
||||
8
|
||||
```
|
||||
|
||||
Проверка:
|
||||
|
||||
```py
|
||||
|
||||
>>> import M1
|
||||
|
||||
>>> M1.readFile('test_task.txt')
|
||||
|
||||
[1, 2, 3, 3, 4, 5, 6, 7, 8]
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Задача 2
|
||||
|
||||
Содержание модуля M2:
|
||||
```py
|
||||
def corr(l1, l2):
|
||||
N = len(l1)
|
||||
m1 = sum(l1) / N
|
||||
m2 = sum(l2) / N
|
||||
|
||||
a1 = 0
|
||||
a2 = 0
|
||||
a3 = 0
|
||||
|
||||
for i in range(N):
|
||||
a1 += (l1[i] - m1) * (l2[i] - m2)
|
||||
a2 += (l1[i] - m1) ** 2
|
||||
a3 += (l2[i] - m2) ** 2
|
||||
|
||||
res = a1 / (((a2) * (a3)) ** 0.5)
|
||||
return res
|
||||
```
|
||||
|
||||
```py
|
||||
|
||||
>>> import M2
|
||||
|
||||
>>> M2.corr([1,2,3,4,5,6,7], [2,1,6,7,10,11,14])
|
||||
|
||||
0.9743547036924464
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Задача 3
|
||||
|
||||
Содержание модуля M3:
|
||||
```py
|
||||
|
||||
from M1 import readFile
|
||||
from M2 import corr
|
||||
|
||||
name1 = input('Введите имя первого файла: ')
|
||||
name2 = input('Введите имя второго файла: ')
|
||||
|
||||
l1 = readFile(name1)
|
||||
l2 = readFile(name2)
|
||||
|
||||
print(round(corr(l1, l2), 3))
|
||||
```
|
||||
|
||||
|
||||
Содержание файла test1.txt:
|
||||
```py
|
||||
|
||||
1 2 3 4 5 1 2 3 4 5
|
||||
```
|
||||
|
||||
|
||||
Содержание файла test2.txt:
|
||||
```py
|
||||
|
||||
2 3 6 8 10 1 2 3 4 9
|
||||
```
|
||||
|
||||
|
||||
```py
|
||||
|
||||
>>> import M3
|
||||
|
||||
Введите имя первого файла: test1.txt
|
||||
|
||||
Введите имя второго файла: test2.txt
|
||||
|
||||
0.901
|
||||
|
||||
```
|
||||
|
||||
|
После Ширина: | Высота: | Размер: 14 KiB |
|
После Ширина: | Высота: | Размер: 14 KiB |
@ -0,0 +1,296 @@
|
||||
# Отчет по теме 9
|
||||
|
||||
Грудинин Егор, А-03-23
|
||||
|
||||
## 1 Создание классов и их наследников
|
||||
|
||||
```py
|
||||
>>> class Class1: #Объявление класса
|
||||
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
|
||||
self.data=znach # self - ссылка на экземпляр класса
|
||||
def otobrazh(self): # Метод 2 класса1
|
||||
print(self.data)#Отображение данных экземпляра класса
|
||||
|
||||
|
||||
>>> z1=Class1() #Создаём 1-й экземпляр класса
|
||||
>>> z2=Class1() #Создаём 2-й экземпляр класса
|
||||
>>> z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
|
||||
>>> z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
|
||||
|
||||
>>> z1.otobrazh() # Обращение ко второму методу класса
|
||||
экз.класса 1
|
||||
>>> z2.otobrazh()
|
||||
-632.453
|
||||
>>> z1.data='Новое значение атрибута у экз.1'
|
||||
>>> z1.otobrazh()
|
||||
Новое значение атрибута у экз.1
|
||||
>>> class Class2(Class1): #Class2 - наследник класса Class1
|
||||
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
|
||||
print('значение=',self.data)#Отображение данных экземпляра
|
||||
|
||||
>>> z3=Class2()
|
||||
>>> dir(z3)
|
||||
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
|
||||
>>> z3.zad_zn('Совсем новое')
|
||||
>>> z3.otobrazh()
|
||||
значение= Совсем новое
|
||||
>>> z1.otobrazh()
|
||||
Новое значение атрибута у экз.1
|
||||
```
|
||||
При вызове z3.otobrazh выполнился метод, определенный в классе Class2, несмотря на наличие одноименного метода в родительском классе, так как метод дочернего класса переопределяет родительский.
|
||||
|
||||
## 2 Использование классов, содержащихся в модулях
|
||||
Содержимое модуля Mod3:
|
||||
```py
|
||||
class Class1: # Объявление класса Class1 в модуле
|
||||
def zad_zn(self, znach): # 1 Метод класса
|
||||
self.data = znach # self - ссылка на экземпляр класса Class1
|
||||
def otobrazh(self): # 2 Метод класса
|
||||
print(self.data) # Отображение данных экземпляра
|
||||
|
||||
class Class2(Class1): # Class2 - наследник класса Class1
|
||||
def otobrazh(self): # Метод класса Class2
|
||||
print('значение=', self.data) # Отображение данных экземпляра
|
||||
|
||||
def otobrazh(objekt): # Объявление самостоятельной функции
|
||||
print('значение объекта=', objekt)
|
||||
```
|
||||
|
||||
```py
|
||||
>>> from Mod3 import Class1
|
||||
>>> z4=Class1()
|
||||
>>> z4.otobrazh()
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#25>", line 1, in <module>
|
||||
z4.otobrazh()
|
||||
File "D:\!!!Download\Documents\учёба МЭИ\5 СЕМЕСТР\GIT\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
|
||||
print(self.data)#Отображение данных экземпляра
|
||||
AttributeError: 'Class1' object has no attribute 'data'
|
||||
```
|
||||
Ошибка возникает, так как мы не присвоили значения атрибуту data с помощью метода класса otobrazh().
|
||||
|
||||
```py
|
||||
>>> from Mod3 import Class1
|
||||
>>> z4=Class1()
|
||||
>>> z4.data='значение данного data у экз.4'
|
||||
>>> z4.otobrazh()
|
||||
значение данного data у экз.4
|
||||
>>> del z4
|
||||
>>> import Mod3
|
||||
>>> z4=Mod3.Class2()
|
||||
>>> z4.zad_zn('Класс из модуля')
|
||||
>>> z4.otobrazh()
|
||||
значение= Класс из модуля
|
||||
>>> Mod3.otobrazh('Объект')
|
||||
значение объекта= Объект
|
||||
```
|
||||
Команда z4.otobrazh() вызывает метод класса Class2, поскольку z4 является экземпляром этого класса. Инструкция Mod3.otobrazh('Объект') вызывает самостоятельную функцию, объявленную в модуле Mod3, которая не является методом классов Class1 или Class2.
|
||||
|
||||
## 3 Использование специальных методов
|
||||
```py
|
||||
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
|
||||
def __init__(self,znach): #Конструктор-вызывается при создании нового экземпляра класса
|
||||
self.data=znach
|
||||
def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
|
||||
return Class3(self.data+drug_zn)
|
||||
def zad_dr_zn(self,povtor): #А это - обычный метод
|
||||
self.data*=povtor
|
||||
|
||||
|
||||
>>> z5=Class3('abc')
|
||||
>>> z5.otobrazh()
|
||||
значение= abc
|
||||
>>> z6=z5+'def'
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdef
|
||||
>>> z6.zad_dr_zn(3)
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdefabcdefabcdef
|
||||
```
|
||||
|
||||
## 4 Присоединение атрибутов к классу
|
||||
```py
|
||||
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
|
||||
def __init__(self,znach): #Конструктор-вызывается при создании нового экземпляра класса
|
||||
self.data=znach
|
||||
def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
|
||||
return Class3(self.data+drug_zn)
|
||||
def zad_dr_zn(self,povtor): #А это - обычный метод
|
||||
self.data*=povtor
|
||||
|
||||
|
||||
>>> z5=Class3('abc')
|
||||
>>> z5.otobrazh()
|
||||
значение= abc
|
||||
>>> z6=z5+'def'
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdef
|
||||
>>> z6.zad_dr_zn(3)
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdefabcdefabcdef
|
||||
>>> dir(Class3)
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||
>>> Class3.fio='Иванов И.И.'
|
||||
>>> z7=Class3(123)
|
||||
>>> dir(Class3)
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||
|
||||
>>> dir(z7)
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||
>>> dir(z7) == dir(Class3)
|
||||
False
|
||||
>>> z7.fio
|
||||
'Иванов И.И.'
|
||||
>>> Class3.fio
|
||||
'Иванов И.И.'
|
||||
```
|
||||
Значение атрибута fio у экземпляра z7 совпадает со значением атрибута класса Class3.
|
||||
```py
|
||||
>>> z7.rozden='1987'
|
||||
>>> dir(z7)
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
|
||||
>>> dir(Class3)
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||
```
|
||||
Теперь можем заметить, что z7.rozden='1987' создает новый атрибут только у экземпляра z7, а не у самого класса Class3.
|
||||
|
||||
## 5 Выявление родительских классов
|
||||
```py
|
||||
>>> Class3.__bases__
|
||||
(<class '__main__.Class2'>,)
|
||||
>>> Class2.__bases__
|
||||
(<class '__main__.Class1'>,)
|
||||
>>> Class1.__bases__
|
||||
(<class 'object'>,)
|
||||
>>> Class3.__mro__
|
||||
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
|
||||
>>> ZeroDivisionError.__mro__
|
||||
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
|
||||
```
|
||||
|
||||
## 6 Создание свойства класса.
|
||||
```py
|
||||
>>> class Class4:
|
||||
def __init__(sam,znach):
|
||||
sam.__prm=znach
|
||||
def chten(sam):
|
||||
return sam.__prm
|
||||
def zapis(sam,znch):
|
||||
sam.__prm=znch
|
||||
def stiran(sam):
|
||||
del sam.__prm
|
||||
svojstvo=property(chten,zapis,stiran)
|
||||
|
||||
>>> exempl=Class4(12)
|
||||
>>> exempl.svojstvo
|
||||
12
|
||||
>>> exempl.svojstvo=45
|
||||
>>> print(exempl.svojstvo)
|
||||
45
|
||||
>>> del exempl.svojstvo
|
||||
>>> exempl.svojstvo
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#17>", line 1, in <module>
|
||||
exempl.svojstvo
|
||||
File "<pyshell#11>", line 5, in chten
|
||||
return sam.__prm
|
||||
AttributeError: 'Class4' object has no attribute '_Class4__prm'
|
||||
```
|
||||
Видим, что exempl.svojstvo вызывает метод chten, exempl.svojstvo=45 - метод zapis, а del exempl.svojstvo - удаление.
|
||||
|
||||
## 7 Представления в виде класса модели системы автоматического регулирования (САР)
|
||||
Содержимое модуля SAU:
|
||||
```py
|
||||
class SAU:
|
||||
def __init__(self, zn_param):
|
||||
self.param = zn_param
|
||||
self.ypr = [0, 0]
|
||||
|
||||
def zdn_zn(self, upr):
|
||||
self.x = upr
|
||||
|
||||
def model(self):
|
||||
def inerz(x, T, yy):
|
||||
return (x + T * yy) / (T + 1)
|
||||
|
||||
y0 = self.x - self.ypr[1] * self.param[3] # Обр.связь с усилителем 2
|
||||
y1 = self.param[0] * y0 # Усилитель1
|
||||
y2 = inerz(y1, self.param[1], self.ypr[0]) # Инерционное звено1
|
||||
y3 = inerz(y2, self.param[2], self.ypr[1]) # Инерционное звено2
|
||||
self.ypr[0] = y2
|
||||
self.ypr[1] = y3
|
||||
|
||||
def otobraz(self):
|
||||
print('y=', self.ypr[1])
|
||||
```
|
||||
|
||||
Содержимое модуля main_SAU.py:
|
||||
```py
|
||||
prm = [4, 1.3, 0.3] # Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||
from SAU import *
|
||||
xx = [0] + [1] * 20 # Входной сигнал - «ступенька»
|
||||
SAUe = SAU(prm) # Создаём экземпляр класса
|
||||
yt = []
|
||||
for xt in xx: # Прохождение входного сигнала
|
||||
SAUe.zdn_zn(xt)
|
||||
SAUe.model()
|
||||
SAUe.otobraz()
|
||||
yt.append(SAUe.ypr[1])
|
||||
import pylab
|
||||
pylab.plot(yt)
|
||||
pylab.show()
|
||||
```
|
||||
|
||||
|
||||
Результат вызова программы main_SAU.py:
|
||||
```py
|
||||
y= 0.0
|
||||
y= 0.2173913043478261
|
||||
y= 0.4763705103969754
|
||||
y= 0.686594887811293
|
||||
y= 0.8199324616478645
|
||||
y= 0.8837201137353929
|
||||
y= 0.8994188484874774
|
||||
y= 0.8892777072047301
|
||||
y= 0.870097963179993
|
||||
y= 0.8518346102696789
|
||||
y= 0.8387499784485772
|
||||
y= 0.8314204114211459
|
||||
y= 0.8286051955249649
|
||||
y= 0.8285656555914835
|
||||
y= 0.8297915186846528
|
||||
y= 0.8312697736438287
|
||||
y= 0.8324765218921963
|
||||
y= 0.8332456979978418
|
||||
y= 0.8336163607592184
|
||||
y= 0.8337101315489143
|
||||
y= 0.833654237067147
|
||||
```
|
||||

|
||||
|
||||
|
||||
Результат вызова программы main_SAU.py при других параметрах:
|
||||
```py
|
||||
y= 0.0
|
||||
y= 0.13392857142857142
|
||||
y= 0.31150350765306123
|
||||
y= 0.48237614311907795
|
||||
y= 0.6233184628564087
|
||||
y= 0.7278078571941651
|
||||
y= 0.7983952660632807
|
||||
y= 0.841607792159931
|
||||
y= 0.8648697568601125
|
||||
y= 0.8748780189025931
|
||||
y= 0.8769323119338304
|
||||
y= 0.8748306723342303
|
||||
y= 0.8710536606893424
|
||||
y= 0.867059038449276
|
||||
y= 0.8635836565401162
|
||||
y= 0.8609016510709495
|
||||
y= 0.8590212297399084
|
||||
y= 0.8578211023084384
|
||||
y= 0.8571364936325719
|
||||
y= 0.856807408748047
|
||||
y= 0.8567011566332686
|
||||
```
|
||||

|
||||
@ -0,0 +1,127 @@
|
||||
# Общее контрольное задание по теме 9
|
||||
|
||||
Грудинин Егор, А-03-23
|
||||
|
||||
## Задание
|
||||
|
||||
Создайте и запишите в модуль класс, содержащий следующие компоненты:
|
||||
|
||||
|
||||
|
||||
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
|
||||
|
||||
|
||||
|
||||
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
|
||||
|
||||
|
||||
|
||||
- метод для обеспечения перевода сотрудника из одного отдела в другой;
|
||||
|
||||
|
||||
|
||||
- метод для изменения должности сотрудника;
|
||||
|
||||
|
||||
|
||||
- свойство, содержащее перечень (список) поощрений сотрудника.
|
||||
|
||||
|
||||
|
||||
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
|
||||
|
||||
## Решение
|
||||
|
||||
Работа в интерпретаторе Python:
|
||||
|
||||
```py
|
||||
|
||||
>>> class myClass():
|
||||
|
||||
def __init__(self,fio,otdel,dolzhnost, oklad):
|
||||
|
||||
self.fio = fio
|
||||
|
||||
self.otdel = otdel
|
||||
|
||||
self.dolzhnost = dolzhnost
|
||||
|
||||
self.oklad = oklad
|
||||
|
||||
self.list_poosh = []
|
||||
|
||||
def incr(self, a):
|
||||
|
||||
self.oklad += a
|
||||
|
||||
def chOtdel(self, otdel):
|
||||
|
||||
self.otdel = otdel
|
||||
|
||||
def chDolzh(self, dolzhnost):
|
||||
|
||||
self.dolzhnost = dolzhnost
|
||||
|
||||
def blag(self, a):
|
||||
|
||||
self.list_poosh.append(a)
|
||||
|
||||
|
||||
|
||||
|
||||
>>> a = myClass('Artem', 'Работоспособный', 'Рабочий', 1200)
|
||||
|
||||
>>> b = myClass('Petr', 'Интеллектуальный', 'Думатель', 2200)
|
||||
|
||||
>>> a.blag(['Молодец', 'Отличный работник'])
|
||||
|
||||
>>> a.list_poosh
|
||||
|
||||
[['Молодец', 'Отличный работник']]
|
||||
|
||||
>>> b.blag(['Красавчик'])
|
||||
|
||||
>>> b.list_poosh
|
||||
|
||||
[['Красавчик']]
|
||||
|
||||
>>> a.fio; a.otdel; a.dolzhnost; a.oklad
|
||||
|
||||
'Artem'
|
||||
|
||||
'Работоспособный'
|
||||
|
||||
'Рабочий'
|
||||
|
||||
1200
|
||||
|
||||
>>> b.fio; b.otdel; b.dolzhnost; b.oklad
|
||||
|
||||
'Petr'
|
||||
|
||||
'Интеллектуальный'
|
||||
|
||||
'Думатель'
|
||||
|
||||
2200
|
||||
|
||||
>>> a.chOtdel('Умственный')
|
||||
|
||||
>>> a.otdel
|
||||
|
||||
'Умственный'
|
||||
|
||||
>>> b.chDolzh('Умудренный')
|
||||
|
||||
>>> b.dolzhnost
|
||||
|
||||
'Умудренный'
|
||||
|
||||
>>> b.incr(1000)
|
||||
|
||||
>>> b.oklad
|
||||
|
||||
3200
|
||||
|
||||
```
|
||||
|
||||
Загрузка…
Ссылка в новой задаче