From 3dc80cfd1ed60889d328e581b65e69e0f5b6978d Mon Sep 17 00:00:00 2001 From: sanzyyyq Date: Mon, 24 Nov 2025 11:15:12 +0300 Subject: [PATCH] done lr8 --- TEMA8/report.md | 184 +++++++++++------------------------------------- TEMA8/task.md | 74 +++++++++++++++++++ 2 files changed, 116 insertions(+), 142 deletions(-) create mode 100644 TEMA8/task.md diff --git a/TEMA8/report.md b/TEMA8/report.md index 432adfc..f577e5e 100644 --- a/TEMA8/report.md +++ b/TEMA8/report.md @@ -2,14 +2,14 @@ Выполнил: Корнеев М.А. -## Пункт 1. Импорт библиотек +## 1. Импорт библиотек ``` >>> import os >>> os.chdir("/Users/maksimkorneev/desktop/Лабы/ПОАС/python-labs/Tema8") >>> import sys, importlib ``` -## Пункт 2. Создание и использование модулей в среде Python. -### Пункт 2.1. Запуск модуля на выполнение путем его импорта. +## 2. Создание и использование модулей в среде Python. +### 2.1. Запуск модуля на выполнение путем его импорта. Файл mod1.py содержит команды: ```py @@ -30,11 +30,10 @@ Mod1: Значение perm1 = 5 >>> importlib.reload(mod1) Mod1: Введите значение = 6 Mod1: Значение perm1 = 6 - >>> mod1.perm1 '6' ``` -### Пункт 2.2. Словарь импортированных модулей +### 2.2. Словарь импортированных модулей ```py >>> 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', '_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', 'mod1', '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'] @@ -45,63 +44,35 @@ Mod1: Значение perm1 = 6 ['__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', '_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 -import sys -import mod1 - -#сохраняю ссылку -old_ref = mod1 -print(f"Старый адрес: {id(old_ref)}") - -sys.modules.pop('mod1') - -# Новый импорт -import mod1 as new_ref -print(f"Новый адрес: {id(new_ref)}") - -print(old_ref is new_ref#если выдает False - это разные объекты -``` -``` -Mod1: Введите значение = 10 -Mod1: Значение perm1 = 10 -Старый адрес: 2188137289488 -Mod1: Введите значение = 10 -Mod1: Значение perm1 = 10 -Новый адрес: 2188138256944 -False -``` -``` >>> import mod1 Mod1: Введите значение = 9 Mod1: Значение perm1 = 9 >>> mod1.perm1 '9' ``` -### Пункт 2.3. Запуск модуля на выполнение с помощью функции exec(). -``` ->>> exec(open('mod1.py', encoding='utf-8').read()) +### 2.3. Запуск модуля на выполнение с помощью функции exec(). +```py +>>> exec(open('mod1.py').read()) Mod1: Введите значение = 7 Mod1: Значение perm1 = 7 ->>> mod1.perm1 -'9' >>> perm1 '7' ->>> exec(open('mod1.py', encoding='utf-8').read()) +>>> exec(open('mod1.py').read()) Mod1: Введите значение = 99 Mod1: Значение perm1 = 99 >>> perm1 '99' ->>> exec(open('mod1.py', encoding='utf-8').read()) +>>> exec(open('mod1.py').read()) Mod1: Введите значение = 40 Mod1: Значение perm1 = 40 >>> perm1 '40' ``` -### Пункт 2.4. Использование инструкции from … import … +### 2.4. Использование инструкции from … import … Пример 1. -``` +```py >>> sys.modules.pop('mod1') - >>> print(sorted(sys.modules.keys())) ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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'] @@ -113,13 +84,11 @@ Mod1: Значение perm1 = 89 ['__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', '_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', 'mod1', '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 -'89' - измененный объект тоже доступен из глобальной области видимости. +'89' ``` -Как видно, объект mod1 всё же появился в sys.modules.keys(). Аналогично обычному import, при первом импорте команда -инициализирует ввод, но при последующих ничего не делает. Пример 2. -``` +```py >>> from mod2 import beta >>> g = beta(2) >>> g @@ -128,48 +97,25 @@ Mod1: Значение perm1 = 89 >>> 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', '_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', 'mod1', 'mod2', '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 появился в списке всех модулей. -``` ->>> h = alpha(2) -Traceback (most recent call last): - File "", line 1, in -NameError: name 'alpha' is not defined -``` -Импортируем alpha, используя для него псевдоним. -``` + +```py >>> from mod2 import alpha as al >>> al() ****ALPHA**** Значение t=90 '90' -``` -Если мы попробуем вызвать функцию по обычному ее имени, ничего не выйдет. -``` >>> alpha() Traceback (most recent call last): File "", line 1, in NameError: name 'alpha' is not defined ``` -Так происходит потому, что на этапе преобразования программы в байт-код python связывает -модуль, найденный в рабочей директории, с именем al. Модуль становится объектом в пространстве имен, -создаётся ссылка на объект модуля alpha и ему присваивается имя al. Но имя alpha ему НЕ присваивается, -поэтому обратиться к методам и атрибутам по имени alpha нельзя. -``` +```py >>> del al, beta >>> from mod2 import alpha as al, beta as bt ->>> 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', '_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', 'mod1', 'mod2', '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('mod2') - >>> sys.modules.pop('mod1') - >>> from mod2 import * ->>> 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', '_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', 'mod2', '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'] -``` -Протестируем функции после импорта: -``` >>> tt = alpha() ****ALPHA**** Значение t=0.13 @@ -177,11 +123,11 @@ NameError: name 'alpha' is not defined >>> uu 1.5044194029024176 ``` -## Пункт 3. Создание многомодульных программ. -### Пункт 3.1. Пример простой многомодульной программы. +## 3. Создание многомодульных программ. +### 3.1. Пример простой многомодульной программы. -Создадим файл mod0.py: -``` +Модуль 0: +```py import mod1 print('perm1 = ', mod1.perm1) from mod2 import alpha as al @@ -191,9 +137,7 @@ from mod2 import beta qq=beta(float(tt)) print('qq = ', qq) ``` -Вызовем его в терминале, предварительно убедившись, что ни один -из трех модулей не упоминается в sys.modules.keys(): -``` +```py >>> import mod0 Mod1: Введите значение = 8 Mod1: Значение perm1 = 8 @@ -203,37 +147,25 @@ perm1 = 8 tt = 2 qq = 535.4916555247646 ``` -Теперь обратимся к каждому из объектов в рабочем пространстве: -``` + +```py >>> mod0.tt '2' >>> mod0.qq 535.4916555247646 -``` -Обращение к perm1 выглядит несколько иначе: -``` ->>> mod0.perm1 -Traceback (most recent call last): - File "", line 1, in - неверно - -AttributeError: module 'mod0' has no attribute 'perm1' >>> mod0.mod1.perm1 -'8' - верно +'8' ``` -Ошибка возникает, потому что переменная perm1 находится в пространстве имен -модуля mod1, а не модуля mod0. Чтобы сделать её доступной через mod0, нужно явно -импортировать её с помощью такой строки: -from mod1 import perm1. -### Пункт 3.2. +### 3.2. Файл mm0.py: -``` +```py import mm2 print('y =', mm2.vyhod) ``` Файл mm1.py: -``` +```py def realdvig(xtt,kk1,TT,yti1,ytin1): #Модель реального двигателя yp = kk1 * xtt #усилитель @@ -257,7 +189,7 @@ def nechus(xtt,gran): return ytt ``` Файл mm2.py: -``` +```py znach = input('k1,T,k2,Xm,A,F,N=').split(',') k1 = float(znach[0]) T = float(znach[1]) @@ -276,20 +208,19 @@ import mm1 as mod yi1 = 0; yin1 = 0; yi2 = 0 vyhod=[] for xt in vhod: - xt1 = xt - yi2 #отрицательная обратная связь + 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) ``` -Тестирование: -``` +```py k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500 y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307] ``` -### Области действия объектов в модулях: +### 3.3. Области действия объектов в модулях: Обращение в функции alpha к функции beta: -``` +```py def alpha(): print('****ALPHA****') t=input('Значение t=') @@ -301,8 +232,7 @@ def beta(q): expi=q*math.pi return math.exp(expi) ``` -Тестирование: -``` +```py Mod1: Введите значение = 8 Mod1: Значение perm1 = 8 perm1 = 8 @@ -311,8 +241,8 @@ perm1 = 8 tt = 4 qq = 286751.31313665316 ``` -Обращение в функции beta к функции alpha: -``` + +```py def alpha(): print('****ALPHA****') t=input('Значение t=') @@ -323,8 +253,8 @@ def beta(q): expi = int(alpha())*math.pi return math.exp(expi) ``` -Тестирование: -``` + +```py Mod1: Введите значение = 8 Mod1: Значение perm1 = 8 perm1 = 8 @@ -335,13 +265,7 @@ tt = 4 Значение t=4 qq = 286751.31313665316 ``` -Ввод запускается два раза - первый от самой функции alpha, а второй - от той, которая -упоминалась в beta. - -Отобразить на экране в модуле Mod0 значения объектов t и expi: - -Одна из попыток: -``` +```py #Модуль mod0 import mod1 print('perm1 = ', mod1.perm1) @@ -357,36 +281,14 @@ Traceback (most recent call last): File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 9, in print(f't = {al.t}, expi = {beta.expi}') AttributeError: 'function' object has no attribute 't' -``` -Не получится вызвать эти переменные по их непосредственному имени (t и expi), -упоминая объекты, атрибутами которых они являются, без изменения кода (например, -объявления t в alpha как глобальную переменную, или задание его как метода. -Но, так как мы знаем, что alpha возвращает t, то узнать t можем по имени al. -С expi и beta так не получится: -``` Traceback (most recent call last): File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 10, in print(f't = {al}, expi = {beta.expi}') ^^^^^^^^^ AttributeError: 'function' object has no attribute 'expi' ``` - В модуле Mod0 увеличить в 3 раза значение - объекта perm1 и отобразить его после этого на экране. -Так как perm1 имеет тип str, то умножение напрямую без преобразования типов -будет выглядеть так: -``` -... -print('perm1 = ', mod1.perm1) -print('Умножено:' , mod1.perm1 * 3) -... -Mod1: Введите значение = 4 -Mod1: Значение perm1 = 4 -perm1 = 4 -Умножено: 444 -``` -Преобразовав тип perm1, можно получить классическое умножение: -``` +```py ... print('Умножено:' , int(mod1.perm1) * 3) ... @@ -395,14 +297,12 @@ Mod1: Значение perm1 = 4 perm1 = 4 Умножено: 12 ``` -В командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq: -``` + +```py >>> mod1.perm1 * 2 '55' >>> mod0.tt * 2 '44' >>> mod0.qq * 2 573502.6262733063 -``` -perm1 и tt, как упоминалось ранее, имеют строковый тип, так что умножение -дублирует содержимое строки. \ No newline at end of file +``` \ No newline at end of file diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..0c385fd --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,74 @@ +# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8 +Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А. + +## Задание +Разработайте программу, состоящую из трех модулей: +- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. +- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + +## Решение +okz1.py +```py +def reading (file): + nums = [] + with open(file, 'r') as file: + for line in file: + nums.extend(map(float, line.split())) + return nums +``` +okz2.py +```py +import math +def correlation(l1, l2): + n = min(len(l1), len(l2))#определяю длину для расчёта — берётся минимальная длина из двух списков + sum1 = sum(l1) + sum2 = sum(l2) + sum1sq = sum(now ** 2 for now in l1)#суммы квадратов элементов каждого списка + sum2sq = sum(now ** 2 for now in l2) + sum12 = sum(x * y for x, y in zip(l1, l2)) + + part1 = n * sum12 - sum1 * sum2 + part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))#расчёт числителя и знаменателя формулы корреляции Пирсона + + try: + corr = part1 / part2 + return corr#коэф корреляции + except ZeroDivisionError: + print("Ошибка деления на ноль!") + return +``` +okz3.py +```py +from okz1 import reading +from okz2 import correlation + +file1 = input("Введите имя первого файла: ") +file2 = input("Введите имя второго файла: ") + +arr1 = reading(file1) +arr2 = reading(file2) + +if arr1 is None or arr2 is None: + print("Не удалось считать данные из файлов.") +else: + corr = correlation(arr1, arr2) + if corr is not None: + print(f"Коэффициент корреляции: {corr:.2f}") +``` +Содержимое файлов: +```txt +data1.txt +1.0 2.0 3.0 4.0 5.0 +6.0 7.0 8.0 9.0 10.0 + +data2.txt +10.0 9.5 9.0 8.5 8.0 +7.5 7.0 6.5 6.0 1.0 +``` +```txt +Введите имя первого файла: data1.txt +Введите имя второго файла: data2.txt +Коэффициент корреляции: -0.88 +``` \ No newline at end of file