Сравнить коммиты

...

95 Коммитов
main ... main

Автор SHA1 Сообщение Дата
BerezhkovDA 0fd994569f Изменил(а) на 'TEMA9/test1.md'
1 месяц назад
BerezhkovDA 5d981615c0 Изменил(а) на 'TEMA9/test1.md'
1 месяц назад
BerezhkovDA 546f73ddfd икз
1 месяц назад
BerezhkovDA 64a8163ae3 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
1 месяц назад
BerezhkovDA 410c4890dc икз
1 месяц назад
BerezhkovDA 6e8ff53715 Изменил(а) на 'TEMA9/report.md'
1 месяц назад
BerezhkovDA 7b6967a65c Изменил(а) на 'TEMA9/report.md'
1 месяц назад
BerezhkovDA 83c5bc3faa отчет1
1 месяц назад
BerezhkovDA e3ef330ee0 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
1 месяц назад
BerezhkovDA b8abd81a81 отчет
1 месяц назад
BerezhkovDA 31486b393b Изменил(а) на 'TEMA8/test.md'
2 месяцев назад
BerezhkovDA 163884935e Изменил(а) на 'TEMA8/test.md'
2 месяцев назад
BerezhkovDA c3291516a9 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
2 месяцев назад
BerezhkovDA 348d3f4f7b икз
2 месяцев назад
BerezhkovDA c78f6b0f86 Изменил(а) на 'TEMA8/task.md'
2 месяцев назад
BerezhkovDA 085835925e Изменил(а) на 'TEMA8/task.md'
2 месяцев назад
BerezhkovDA 9fe52e2b54 Изменил(а) на 'TEMA8/report.md'
2 месяцев назад
BerezhkovDA b72d69eb1f Изменил(а) на 'TEMA8/report.md'
2 месяцев назад
BerezhkovDA a8569d6b54 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
2 месяцев назад
BerezhkovDA c288638009 отчет
2 месяцев назад
BerezhkovDA 7e47f3d624 Изменил(а) на 'TEMA7/test.md'
2 месяцев назад
BerezhkovDA 13d772824c тест
2 месяцев назад
BerezhkovDA 8067fa1b02 тест
2 месяцев назад
BerezhkovDA bc7bd0ebea Изменил(а) на 'TEMA7/task.md'
2 месяцев назад
BerezhkovDA b8c88b4441 Изменил(а) на 'TEMA7/report.md'
2 месяцев назад
BerezhkovDA 315f50e9e5 Изменил(а) на 'TEMA7/report.md'
2 месяцев назад
BerezhkovDA 159744e32d Изменил(а) на 'TEMA7/report.md'
2 месяцев назад
BerezhkovDA 905deada62 отчет
2 месяцев назад
BerezhkovDA 9cffe96ea5 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
2 месяцев назад
BerezhkovDA b7058eda7b поправка
2 месяцев назад
BerezhkovDA 1db55c81ac Изменил(а) на 'TEMA6/test.md'
2 месяцев назад
BerezhkovDA a35cde1cf2 Изменил(а) на 'TEMA6/test.md'
2 месяцев назад
BerezhkovDA 631c2fd3a3 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
2 месяцев назад
BerezhkovDA a61421ba3b окз
2 месяцев назад
BerezhkovDA 47ad2ba1ab Изменил(а) на 'TEMA6/task.md'
2 месяцев назад
BerezhkovDA b3d3ccbb65 Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
BerezhkovDA 872e1db6e8 Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
BerezhkovDA 9d649e1dad Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
BerezhkovDA 7f2f832734 Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
BerezhkovDA fda8ca0d17 Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
BerezhkovDA 5c5a4d6eaa Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
2 месяцев назад
BerezhkovDA b3c79a545d отчет тема 6
2 месяцев назад
BerezhkovDA e0240416bc Изменил(а) на 'TEMA5/test.md'
3 месяцев назад
BerezhkovDA 4577395944 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
3 месяцев назад
BerezhkovDA e297968ac8 тест
3 месяцев назад
BerezhkovDA 23ece38baa Изменил(а) на 'TEMA5/task.md'
3 месяцев назад
BerezhkovDA c426439fc5 Изменил(а) на 'TEMA5/task.md'
3 месяцев назад
BerezhkovDA 20dccc5834 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 016f548463 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA a2fedb9a59 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 5ef19c0b7d Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 2497258650 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA d4b2c24aad Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 5656625957 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA b0299bc93f Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA e470049a43 Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 4fd20d28bd Изменил(а) на 'TEMA5/report.md'
3 месяцев назад
BerezhkovDA 75bdb7733d Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
3 месяцев назад
BerezhkovDA 279709f512 отчет
3 месяцев назад
BerezhkovDA 1b30398834 Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
BerezhkovDA 7c3a08cd6d Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
BerezhkovDA 355960e587 Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
BerezhkovDA 3a71c6a0a3 Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
BerezhkovDA 42bee91228 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
3 месяцев назад
BerezhkovDA 226f7f2384 тест
3 месяцев назад
BerezhkovDA 0e2a0167bc Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA 6f1a3c9601 Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA cafcf8e61e Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA 1cbebefe26 Изменил(а) на 'TEMA4/report.md'
3 месяцев назад
BerezhkovDA da43ee93b1 Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA 3eec409e41 Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA d9ea0a3fd1 Изменил(а) на 'TEMA4/report.md'
3 месяцев назад
BerezhkovDA 074ca40d02 Изменил(а) на 'TEMA4/report.md'
3 месяцев назад
BerezhkovDA 5284b12aea Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA 6dd072e811 Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
BerezhkovDA 89e0837841 задание
3 месяцев назад
BerezhkovDA 1629e18087 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
3 месяцев назад
BerezhkovDA d2376df544 отчет
3 месяцев назад
BerezhkovDA 6140763048 Изменил(а) на 'TEMA3/test.md'
4 месяцев назад
BerezhkovDA 0cac3ffb37 Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
4 месяцев назад
BerezhkovDA 83f076c862 Модуль
4 месяцев назад
BerezhkovDA a3c81ef5db Изменил(а) на 'TEMA3/report.md'
4 месяцев назад
BerezhkovDA 285be332e4 Изменил(а) на 'TEMA3/report.md'
4 месяцев назад
BerezhkovDA b2dd6d76ca Merge branch 'main' of http://uit.mpei.ru/git/BerezhkovDA/python-labs
4 месяцев назад
BerezhkovDA 441e70a7a0 общее задание
4 месяцев назад
BerezhkovDA 138c765f36 отчет
4 месяцев назад
BerezhkovDA 42283b5c88 Изменил(а) на 'TEMA2/task2.md'
4 месяцев назад
BerezhkovDA 826207322c индивидуальное задание
4 месяцев назад
BerezhkovDA fc90f5aff0 общее задание
4 месяцев назад
BerezhkovDA af3a7fef5f отчет
4 месяцев назад
BerezhkovDA 1bde8e6d6d Ответ на вопрос
5 месяцев назад
BerezhkovDA a683c5186d исправление
5 месяцев назад
BerezhkovDA 837e332337 добавление скрина 2
5 месяцев назад
BerezhkovDA 0aa269e739 добавление скрина
5 месяцев назад
BerezhkovDA 49e3e7c337 отчет
5 месяцев назад

Двоичные данные
TEMA1/chaos.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 82 KiB

Двоичные данные
TEMA1/clock.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 17 KiB

@ -0,0 +1,175 @@
# Отчет по теме 1
Бережков Дмитрий, А-01-23
## Изучение среды IDLE
```py
>>> print('Hello')
Hello
>>> h=input('Your name=')
Your name=Dima
>>>print(h)
Dima
>>> exit()
```
## Настройки рабочего каталога среды
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\TEMA1')
```
## Файл Pr0.py
Содержимое файла:
```py
print('Hello')
h=input('Your name=')
print(h)
import os
os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\TEMA1')
```
Результат выполнения программы:
```py
>>>
=================== RESTART: C:\MPEI\PO_ASY\BerezhkovGit\python-labs\TEMA1\Pr0.py ==================
Hello
Your name=Dima
Dima
```
Альтернативный способ запуска программы на исполнение:
```py
>>> import Pr0
Hello
Your name=Dima
Dima
```
## Файл Prb1.py
Содержимое файла:
```py
name = input("Как Вас зовут? ")
print("Привет,", name)
```
Результат выполнения программы:
```py
================== RESTART: C:\MPEI\PO_ASY\BerezhkovGit\python-labs\TEMA1\prb1.py ==================
Как Вас зовут? Dima
Привет, Dima
```
## __pycache__ и содержимое файла Pr0.cpython-34.pyc
Содержимое файла:
```py
у
Гh№ г  у` • \ " S 5 \" S5 r\ " \5 SSKr\R " S5 g)ЪHelloz
Your name=й Nz-C:\MPEI\PO_ASY\BerezhkovGit\python-labs\TEMA1)ЪprintЪinputЪosЪchdir© у Ъ4C:\MPEI\PO_ASY\BerezhkovGit\python-labs\TEMA1\Pr0.pyЪ<module>r  s- рб Ђg„Щ УЂЩ Ђa„Ы Ш Р =Х >r
```
В папке __pycache__ хранится скомпилированный двоичный код, который нужен для оптимизации
## Раздел помощи(help)
```py
>>> help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
```
```py
>>> help(print); help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
```
## Файл tdemo_chaos.py
Содержание файла:
```py
# File: tdemo_chaos.py
# Author: Gregor Lingl
# Date: 2009-06-24
# A demonstration of chaos
from turtle import *
N = 80
def f(x):
return 3.9*x*(1-x)
def g(x):
return 3.9*(x-x**2)
def h(x):
return 3.9*x-3.9*x*x
def jumpto(x, y):
penup(); goto(x,y)
def line(x1, y1, x2, y2):
jumpto(x1, y1)
pendown()
goto(x2, y2)
def coosys():
line(-1, 0, N+1, 0)
line(0, -0.1, 0, 1.1)
def plot(fun, start, color):
pencolor(color)
x = start
jumpto(0, x)
pendown()
dot(5)
for i in range(N):
x=fun(x)
goto(i+1,x)
dot(5)
def main():
reset()
setworldcoordinates(-1.0,-0.1, N+1, 1.1)
speed(0)
hideturtle()
coosys()
plot(f, 0.35, "blue")
plot(g, 0.35, "green")
plot(h, 0.35, "red")
# Now zoom in:
for s in range(100):
setworldcoordinates(0.5*s,-0.1, N+1, 1.1)
return "Done!"
if __name__ == "__main__":
main()
mainloop()
```
Результат выполнения программы:
<image src="chaos.png">
## Работа модуля Turtle, пример clock
<image src="clock.png">

@ -0,0 +1,6 @@
# Контрольный вопрос #5 по Теме1
Бережков Дмитрий А-01-23
# Вопрос:
Продемонстрируйте последовательность действий при создании файла с программой с помощью текстового редактора IDLE.
# Ответ:
Используя предложение <<Файл(File)>> -> <<Новый файл(New File)>> -> ввести код -> <<Файл(File)>> -> сохранить -> указать имя файла и расширение .py

@ -0,0 +1,373 @@
# Отчет по теме 2
Бережков Дмитрий, А-01-23
## 1. Изучение простых объектов
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema2')
>>> f1=16; f2=3
>>> f1,f2
(16, 3)
>>> f1;f2
16
3
>>> dir()
>>> dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
>>> type(f2)
<class 'int'>
>>> del(f1,f2)
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
```
## 2. Изучение правил именования объектов
```py
>>> gg1=1.6
>>> hh1='Строка'
>>> 73sr=3
SyntaxError: invalid decimal literal
>>> and=7
SyntaxError: invalid syntax
```
## 3. Список ключевых слов
```py
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> w=keyword.kwlist
>>> w
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## 4. Список встроенных идентификаторов
```py
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '_IncompleteInputError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
```
## 5. Встроенные идентификаторы и встроенные функции
```py
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '_IncompleteInputError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
```
Базовые функции:
```py
>>> abs(-10)
10
>>> len([1,2,3])
3
>>> max([1,2,3,4,5])
5
>>> min([1,2,3,4,5])
1
>>> pow(2,5)
32
>>> pi=3.14159
>>> round(pi,3)
3.142
>>> unsorted_list = [3, 1, 4, 1, 5, 9, 2, 6]
>>> sorted_list = sorted(unsorted_list)
>>> print(sorted_list)
[1, 1, 2, 3, 4, 5, 6, 9]
>>>num=[1,2,3,4,5]
>>>print(sum(num))
15
>>>names = ["Oreshki", "Big", "Bob"]
>>> val=[25,25,25]
>>> zipp=zip(names,val)
>>> print(list(zipp))
[('Oreshki', 25), ('Big', 25), ('Bob', 25)]
```
## 6. Учёт регистра
```py
>>> Gg1=45
>>> gg1
1.6
>>> Gg1
45
```
## 7. Изучение простых базовых типов объектов:
7.1 Логический тип:
```py
>>> bb1=True; bb2=False
>>> bb1;bb2
True
False
>>> type(bb1)
<class 'bool'>
```
7.2 Другие простые типы:
```py
>>> ii1=-1234567890
>>> ff1=-8.9876e-12
>>> dv1=0b1101010
>>> vsm1=0o52765
>>> shest1=0x7109af6
>>> cc1=2-3j
>>> a=3.67;b=-0.45
>>> cc2=complex(a,b)
>>> type(ii1)
<class 'int'>
>>> type(ff1)
<class 'float'>
>>> type(dv1)
<class 'int'>
>>> type(vsm1)
<class 'int'>
>>> type(shest1)
<class 'int'>
>>> type(cc1)
<class 'complex'>
>>> type(cc2)
<class 'complex'>
```
7.3 Строка символов:
```py
>>> ss1='Это - строка символов'
>>> ss1;type(ss1)
'Это - строка символов'
<class 'str'>
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>> print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1b= 'Меня зовут: \n Бережков Д. А.'
>>> print(ss1b)
Меня зовут:
Бережков Д. А.
>>> mnogo="Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее болле сложный тип из тех, которые учавствуют в операции"
>>> print(mnogo)
Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее болле сложный тип из тех, которые учавствуют в операции
>>> ss1[0]
'Э'
>>> ss1[8]
'р'
>>> ss1[-2]
'о'
>>> ss1[6:9]
'стр'
>>> ss1[13:]
'символов'
>>> ss1[:13]
'Это - строка '
>>>ss1[5:-8]
' строка '
>>> ss1[3:17:2]
' тоасм'
>>> ss1[17:3:-2]
'омсаот '
```
Так как индекс -4 и 17 равны в строке, тогда с помощью этой строки кода получим то же самое:
```py
>>> ss1[-4:3:-2]
'омсаот '
```
Строка неизменяемый объект:
```py
>>> ss1[4]='=' # Будет диагностика!
Traceback (most recent call last):
File "<pyshell#107>", line 1, in <module>
>>> ss1[4]='=' # Будет диагностика!
TypeError: 'str' object does not support item assignment
```
```py
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> ss1
'Это = строка символов'
>>> ss1b=ss1b[:0]+'='+ss1b[10:]
>>> ss1b
'=: \n Бережков Д. А.'
```
Создание еще несколько объектов разных типов данных:
```py
>>> a = -8; a; type(a)
-8
<class 'int'>
>>> a = 1.1; a; type(a)
1.1
<class 'float'>
>>> a = True; a; type(a)
True
<class 'bool'>
>>> a = 8 - 9j; a; type(a)
(8-9j)
<class 'complex'>
>>> a = complex(6,4); a; type(a)
(6+4j)
<class 'complex'>
>>> a = 'String'; a; type(a)
'String'
<class 'str'>
```
## 8. Более сложные типы объектов
8.1 Списки:
```py
>>> spis1=[111,'Spisok',5-9j]
>>> stup=[0,0,1,1,1,1,1,1,1]
>>> spis=[1,2,3,4,5,6,7,8,9,10]
>>> spis1[-1]
(5-9j)
>>> stup[-8::2]
[0, 1, 1, 1]
```
В список stup вошло 4 элемента с индексами из исходного списка: [-8] ([1]), [-6] ([3]), [-4] ([5]) и [-2] ([7])
```py
>>> spis1[1]='Список'
>>> spis1
[111, 'Список', (5-9j)]
>>> len(spis1)
3
```
```py
>>> help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
>>> spis1.append('New item')
>>> spis1
[111, 'Список', (5-9j), 'New item']
>>> spis1.pop(1)
'Список'
>>> spis1
[111, (5-9j), 'New item']
```
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
```py
>>> spis1.insert(1, 'string')
>>> spis1
[111, 'string', (5-9j), 'New item']
>>> spis1.remove(111)
>>> spis1
['string', (5-9j), 'New item']
>>> new_list = [1, 2, 3]
>>> spis1.extend(new_list)
>>> spis1
['string', (5-9j), 'New item', 1, 2, 3]
>>> new_list.clear()
>>> new_list
[]
>>> new_list = [3, 1, 2]
>>> new_list.sort()
>>> new_list
[1, 2, 3]
>>> new_list.reverse()
>>> new_list
[3, 2, 1]
>>> new_list2 = new_list.copy()
>>> new_list2
[1, 2, 3]
>>> new_list = [1, 2, 2, 2, 3, 3]
>>> new_list.count(2)
3
>>> new_list = ['one', 'two', 'three']
>>> new_list.index('three')
2
```
```py
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2[0][1]
(5-9j)
>>> spis2[0][1]=78
>>> spis1 # в spis2 сохраняется ссылка на объект spis1, а не копия списка (spis2[0] и spis1 — это один и тот же список в памяти)
['string', 78, 'New item', 1, 2, 3]
```
```py
>>> my_list = [12, 'str', True, [1, 2, 3]]
>>> my_list
[12, 'str', True, [1, 2, 3]]
```
8.2 Кортежи
```py
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1= kort1+(1,2)
>>> kort1= kort1+(ss1b,)
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1
(222, 'Kortezh', (77+8j))
>>> kort1= kort1+(1,2)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2)
>>> kort1= kort1+(ss1b,)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2, '=: \n Бережков Д. А.')
>>> kort2=kort1[:2]+kort1[3:]
>>> kort2
(222, 'Kortezh', 1, 2, '=: \n Бережков Д. А.')
>>> kort1.index(2)
4
>>> kort1.count(222)
1
>>> kort1[2]=90
Traceback (most recent call last):
File "<pyshell#185>", line 1, in <module>
>>> kort1[2]=90
TypeError: 'tuple' object does not support item assignment
>>> my_kort = (12, 'str', [1, 2, 3], (222, 'str'))
>>> my_kort
(12, 'str', [1, 2, 3], (222, 'str'))
```
8.3 Словари
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1['Orel']
56
>>> dic1['Pskov']=78
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
>>> sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>> sorted(dic1.values())
[45, 56, 78, 145]
>>>dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>> dic3['statistics'][2]
'standart deviation'
>>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>> dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': '=: \n Бережков Д. А.'}
>>> dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': '=: \n Бережков Д. А.'}
>>> t = ("a", "b", "c", "d", "e", "f", "g")
>>> l = [1, 2, 3, 4, 5]
>>> d = dict(zip(t, l))
>>> d # Элементов в получившимся словаре - 5, т.к. zip() работает до конца самого короткого объекта
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
```
```py
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>> AVTI['Курс III'][5]
15
```
8.4 Множества
```py
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'двигатель', 'датчик', 'микропроцессор', 'линия связи'}
>>> len(mnoz1)
4
'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1
{'двигатель', 'датчик', 'линия связи', 'реле', 'микропроцессор'}
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'двигатель', 'датчик', 'реле', 'микропроцессор'}
>>> s = {1, "hello", True, 3.14, (2, 5)}
>>> s.add("Python")
>>> s
{1, 3.14, 'Python', (2, 5), 'hello'}
>>> s.remove(3.14)
>>> s
{1, 'Python', (2, 5), 'hello'}
```

@ -0,0 +1,26 @@
# Общее контрольное задание к ЛР2
Бережков Дмитрий А-01-23
## Задание:
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций
## Решение:
```py
familia='Berezhkov'
first_letter=familia[0]
first_letter
'B'
sp_kw=keyword.kwlist
print(sp_kw)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
sp_kw.remove('nonlocal')
print(sp_kw)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
kort_nam=('Dmitriy','Alexandr','Victor','Ivan')
print(type(kort_nam))
<class 'tuple'>
kort_nam=kort_nam+('Dmitriy','Daniil')
print(kort_nam.count('Dmitriy'))
2
dict_bas={'строка':familia,'список':sp_kw,'кортеж':kort_nam}
print(dict_bas)
{'строка': 'Berezhkov', 'список': ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'], 'кортеж': ('Dmitriy', 'Alexandr', 'Victor', 'Ivan', 'Dmitriy', 'Daniil')}
```

@ -0,0 +1,13 @@
# Индивидуальное контрольное задание (7) к лр2
Бережков Дмитрий А-01-23
## Задание:
Напишите инструкцию создания множества с 5 русскоязычными названиями фруктов.
Напишите инструкцию проверки вхождения фрукта «яблоко» в составе множества.
## Ответ:
```py
fruits = {"яблоко","банан","апельсин","лимон","помело"}
'яблоко' in fruits
True
```

@ -0,0 +1,572 @@
# Отчет по теме 3
Бережков Дмитрий, А-01-23
## Начало работы.
Запуск IDLE, установление рабочего каталога.
## 2. Преобразование простых базовых типов объектов.
2.1 Преобразование в логический тип с помощью функции bool.
```py
>>> logiz1=bool(56)
>>> logiz2=(0)
>>> logiz3=bool("Beta")
>>> logiz4=bool("")
>>> logiz1
True
>>>logiz2
0
>>> logiz3
True
>>> logiz4
False
```
2.2 Преобразование в целое десятичное число / в вещественное число.
```py
>>> tt1=int(198.6) #Отбрасывается дробная часть
>>> tt2=int("-76") #Число - встроке символов, система по умолчанию - десятичная
>>> tt3=int("B",16)
>>> tt4=int("71",8)
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
int() ожидает увидеть целочисленное значение в строке.
```py
>>> flt1=float(789)
>>> flt2=float(-6.78e2)
>>> flt3=float("Infinity")
>>> flt4=float("-inf")
>>> flt1
789.0
>>> flt2
-678.0
>>> flt3
inf
>>> flt4
-inf
```
2.3 Преобразование десятичных чисел в другие системы счисления:
```py
>>> hh=123
>>> dv1=bin(hh) #Преобразование в строку с двоичным представлением
>>> vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
>>> shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
>>> dv1
'0b1111011'
>>> vos1
'0o173'
>>> shs1
'0x7b'
```
Обратное преобразование:
```py
>>> int(dv1, 2)
123
>>> int(vos1, 8)
123
>>> int(shs1, 16)
123
```
## 3. Изучение преобразования более сложных базовых типов объектов.
3.1 Преобразование в строку символов.
```py
>>> strk1=str(23.6)
>>> strk2=str(logiz3)
>>> strk3=str(["A","B","C"]) #Преобразуем список
>>> strk4=str(("A","B","C")) #Преобразуем кортеж
>>> strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
>>> strk1
'23.6'
>>> strk2
'True'
>>> strk3
"['A', 'B', 'C']"
>>> strk4
"('A', 'B', 'C')"
>>> strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
3.2 Преобразование элементов объекта в список.
```py
>>> spis1=list("Строка символов") #Заданная строка разделяется на символы
>>> spis2=list((124,236,-15,908)) #Кортеж превращается в список
>>> spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
>>> spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2
[124, 236, -15, 908]
>>> spis3
['A', 'B', 'C']
```
Придумал инструкцию, обеспечивающую создание из того же словаря списка с другими его частями:
```py
>>> spis3=list({"A":1,"B":2,"C":9}.values())
>>> spis3
[1, 2, 9]
```
3.3 Преобразование элементов объектов в кортеж:
```py
>>> kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
>>> kort8=tuple(spis2) #Преобразование списка в кортеж
>>> kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
>>> kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>> kort8
(124, 236, -15, 908)
>>> kort9
('A', 'B', 'C')
```
3.4 Удаление объектов:
```py
>>> del strk5, kort8
>>> strk5
Traceback (most recent call last):
File "<pyshell#73>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>> kort8
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Создал строку со своей фамилией и инициалами, преобразовал её в список, затем список в кортеж и, наконец кортеж в строку:
```py
>>> fio='Berezhkov D. A.'
>>> list_fio=list(fio)
>>> cort_fio=tuple(list_fio)
>>> str_fio=str(cort_fio)
>>> list_fio
['B', 'e', 'r', 'e', 'z', 'h', 'k', 'o', 'v', ' ', 'D', '.', ' ', 'A', '.']
>>> cort_fio
('B', 'e', 'r', 'e', 'z', 'h', 'k', 'o', 'v', ' ', 'D', '.', ' ', 'A', '.')
>>> str_fio
"('B', 'e', 'r', 'e', 'z', 'h', 'k', 'o', 'v', ' ', 'D', '.', ' ', 'A', '.')"
```
## 4 Арифметические операции.
4.1 Сложение и вычитание:
```py
>>> 12+7+90 # Сложение целых чисел
109
>>> 5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>> 23.6+54 #Сложение вещественного и целого чисел
77.6
>>> 14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
```
4.2 Умножение:
```py
>>> -6.7*12 #Умножение вещественного числа на целое число
-80.4
```
4.3 Деление:
Результатом деления всегда будет вещественное число.
```py
-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
a=178/45 #Деление двух целых чисел
a
3.9555555555555557
type(a)
<class 'float'>
```
4.4 Деление с округлением вниз:
Здесь результат может быть целым или вещественным.
```py
>>> b=178//45 #Деление двух целых чисел
>>> b
3
>>> c=-24.6//12.1 #Деление двух вещественных чисел
>>> c
-3.0
>>> type(b)
<class 'int'>
>>> type(c)
<class 'float'>
>>> d=54.54//2
>>> d
27.0
>>> type(d)
<class 'float'>
```
4.5 Получение остатка от деления:
```py
>>> 148%33 #Остаток от деления двух целых чисел
16
>>> 12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
>>> 1337.1337%54
41.13370000000009
```
4.6 Возведение в степень:
```py
>>> 14**3 #Целое число возводится в целую степень
2744
>>> e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>> e
35.719843790663525
>>> 5**3.2
172.4662076826519
>>> (2+3j)**3
(-46+9j)
```
К комплексным числам можно применять следующие операции:
сложение
вычитание
умножение
деление
возведение в степень
и нельзя следующие:
1) целочисленное деление
```py
>>> k1=1+4j
>>> k2=8-3j
>>> k2//k1
Traceback (most recent call last):
File "<pyshell#112>", line 1, in <module>
k2//k1
```
(целочисленное деление требует целой части, не мнимой)
2) остаток от деления
```py
k1%k2
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
k1%k2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
```
(остаток от деления основан на целочисленном делении, также работа с мнимой частью не предусмотрена)
## 5. Операции с двоичными представлениями целых чисел.
5.1 Двоичная инверсия:
```py
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
Почему результат отрицательный - используется дополнительный код для представления отрицательных чисел
5.2 Двоичное «И»:
```py
>>> 7&9 # 111 и 1001 = 0001
1
>>> 7&8 # 111 и 1000 = 0000
0
```
5.3 Двоичное «ИЛИ»:
```py
>>> 7|9 # 111 или 1001 = 1111
15
>>> 7|8 # 111 или 1000 = 1111
15
>>> 14|5 # 1110 или 0101 = 1111
15
```
5.4 Двоичное исключающее "Или":
```py
14^5 # 1110 исключающее или 0101 = 1011
11
```
5.5 Двоичное исключающее "Или" (Влево или вправо):
```py
>>> h=14 #Двоичное представление = 1110
>>> g=h<<2 # Новое двоичное представление = 111000
>>> g1=h>>1 # Новое двоичное представление = 0111
>>> g2=h>>2 # Новое двоичное представление = 0011
>>> h
14
>>> bin(h)
'0b1110'
>>> g
56
>>> g1
7
>>> g2
3
```
Придумал два двоичных числа, не менее чем с 7 знаками, и попробовал выполнить с ними разные операции:
```py
>>> a=182
>>> b=107
>>> a&b
34
>>> a|b
255
>>> a^b
221
```
## 6. Операции при работе с последовательностями (строками, списками, кортежами).
6.1 Объединение последовательностей:
```py
>>> 'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
6.2 Повторение:
```py
>>> 'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99
>>> signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> signal2=(0,)*3+(1,)*5+(0,)*7
>>> signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
6.3 Проверка наличия заданного элемента в последовательности:
```py
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka #Наличие подстроки в строке
True
>>> 'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
6.4 Подстановка значений в строку с помощью оператора:
```py
>>> stroka='Температура = %g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания.
7.1 Обычное присваивание значения переменной:
```py
>>> zz=-12
>>> zz
-12
```
7.2 Увеличение значения переменной на заданную величину или уменьшение:
```py
>>> zz+=5 # Значение zz увеличивается на 5
>>> zz
-7
>>> zz-=3 # Значение уменьшается на 3
>>> zz
-10
```
7.3 Умножение текущего значения переменной на заданную величину или деление:
```py
>>> zz/=2
>>> zz
-5.0
>>> zz*=5
>>> zz
-25.0
>>> xx=5
>>> xx*=3
>>> xx
15
>>> xx/=5
>>> xx
3.0
```
7.4 Операции деления с округлением вниз, получения остатка от деления и возведения в степень:
```py
>>> xx=5
>>> xx//=2
>>> xx
2
>>> xx=5
>>> xx%=2
>>> xx
1
>>> xx=5
>>> xx**=4
>>> xx
625
```
7.5 Множественное присваивание:
```py
>>> w=v=10 # Переменным присваивается одно и то же значение
>>> n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
>>> w,v
(10, 10)
>>> n1,n2,n3
(11, -3, 'all')
```
Проверил можно ли использовать множественное присваивание с объектами: строка, список, кортеж, словарь:
```py
>>> n1,n2,n3='abc'
>>> n1,n2,n3
('a', 'b', 'c')
>>> n1,n2,n3=[11,-3,'all']
>>> n1,n2,n3
(11, -3, 'all')
>>> n1,n2,n3={11: 'a',3: 'b',5: 'c'}
>>> n1,n2,n3
(11, 3, 5)
>>> n1,n2,n3={'a','b','c'}
>>> n1,n2,n3
('b', 'a', 'c')
```
## 8. Логические операции.
8.1 Операции сравнения:
```py
>>> w==v
True
>>> w!=v
False
>>> w<v
False
>>> w>v
False
>>> w<=v
True
>>> w>=v
True
```
8.2 Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре:
```py
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> 56 in dic1.values()
True
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```
8.3 Создание больших логических выражений с использованием соединительных слов:
```py
>>> a=17
>>> b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
>>> (a == b) and ('Vologda' in dic1) or ('Pskov' in dic1)
False
>>> (a > b) or 'book' in mnoz1
True
```
8.4 Проверка ссылок переменных на один и тот же объект:
```py
>>> w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
>>> w is v
True
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1 is v1
False
```
В начале присваивания двум переменным w и v значения 10 мы храним обе переменные в одной ячейке памяти, затем мы по отдельности присвоили двум этим переменным списки, они хоть и одинаковые, но всё равно переменные по отдельности претерпели изменения, поэтому они хранятся в разных ячейках памяти.
## 9. Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например,
```py
>>> stroka='Микропроцессорная система управления'
>>> dir(stroka)
```
9.1 Методы для работы со строками:
```py
>>> stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста
5
>>> stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>> stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
>>> strk1='Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
>>> strk3='Момент времени {num}, значение = {znch}'
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
9.2 Методы для работы со списками:
```py
>>> spsk = [1, 'A-01-23', 5.0, (1, 2, 3), True]
>>> dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> spsk.pop(2)
5.0
>>> spsk
[1, 'A-01-23', (1, 2, 3), True]
>>> spsk.append('c')
>>> spsk
[1, 'A-01-23', (1, 2, 3), True, 'c']
>>> spsk.insert(2,'a')
>>> spsk
[1, 'A-01-23', 'a', (1, 2, 3), True, 'c']
>>> spsk.count('a')
1
```
9.3 Создание кортежа и изучение применение его методов:
```py
>>> my_tuple = ('str', 20, (1, 2, 3), True)
>>> my_tuple.count(20)
1
>>> my_tuple.index(True) # позиция True в кортеже
3
```
9.4 Изучение методов словарей и множеств:
```py
>>> student = {
"name": "Dima",
"age": 20,
"city": "Moscow",
"courses": ["Math", "Physics"],
"sr": 3.01
}
>>> student.get("name")
'Dima'
>>> student.keys()
dict_keys(['name', 'age', 'city', 'courses', 'sr'])
>>> student.values()
dict_values(['Dima', 20, 'Moscow', ['Math', 'Physics'], 3.01])
>>> student["sr"] = 4.1
>>> student
{'name': 'Dima', 'age': 20, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'sr': 4.1}
>>> student.clear()
>>> student
{}
```
```py
>>> A = {1, 2, 3, 4, 5}
>>> A.add(6)
>>> A
{1, 2, 3, 4, 5, 6}
>>> A.remove(6)
>>> A
{1, 2, 3, 4, 5}
>>> A.pop()
1
>>> A
{2, 3, 4, 5}
>>> A.clear()
>>> A
set()
```

@ -0,0 +1,75 @@
# Общее контрольное задание.
Бережков Дмитрий А-01-23
## Задание:
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
1. Преобразовать восьмеричное значение 45 в целое число.
2. Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
3. Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
4. Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
5. Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
6. Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
7. Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение:
1.
```py
>>> task1 = int('45', 8)
>>> task1
37
```
2.
```py
>>> D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
>>> D_keys, D_values = list(D.keys()), list(D.values())
>>> D_cort = tuple(D_keys + D_values)
>>> D_cort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Чем отличается кортеж от списка?
Ответ:
Список изменяемый, кортеж неизменяемый
3.
```py
>>> task3 = ((1768 // 24.8) % 3)**2.4
>>> task3
5.278031643091577
```
4.
```py
>>> task4 = (~(13 & 27)^14) << 2
>>> task4
-32
```
5.
```py
>>> task5 = ['колебат', 'колебат', 'колебат', 'колебат']
>>> check = 'аткол' in (task5[2] + task5[3])
>>> check
True
```
6.
```py
>>> task6 = dir(D)
>>> D_values, D_keys = D.values(), D.keys()
>>> D_values
dict_values([23, 12, 78])
>>> D_keys
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
```
7.
```py
>>> task7 = "Создать объект - символьную строку с текстом данного предложения"
>>> only_words = task7.split(' ')
>>> index_of_replace_symbol = only_words.index('-')
>>> only_words[index_of_replace_symbol] = ','
>>> only_words.remove('данного')
>>> only_words
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,55 @@
# Выполнение модуля 1 (Вар 20).
Бережков Д. А., А-01-23
## Задание:
M1_20
1) Какое назначение имеют демонстрационные примеры в системе помощи?
2) Создайте объект-список с числовыми четными целыми значениями от -10 до +26. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Напишите инструкцию, позволяющую определить число элементов в созданном списке. Напишите инструкции, заменяющие первое значение в списке на -1000, а последнее - на +1000. Отобразите получившийся объект.
4) Напишите инструкцию, вставляющую в список на 4-ю позицию от начала число 123. Удлините список за счет его повторения ещё два раза. Отобразите получившийся объект. Подсчитайте число элементов в получившемся списке.
5) Преобразуйте список в кортеж. Создайте два кортежа, содержащих, соответственно первую и вторую половину элементов из исходного кортежа. Отобразите созданные объекты.
## 1.
Демонстрационные примеры предназначены для практического изучения возможностей языка и среды на готовых работающих фрагментах кода.
## 2.
```py
>>> obsp=list(range(-10,26,2))
>>> type(obsp)
<class 'list'>
>>> dir(obsp)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
```
## 3.
```py
>>> kol_elem=len(obsp)
>>> kol_elem
18
>>> obsp[0]=-1000
>>> obsp[-1]=1000
>>> obsp
[-1000, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000]
```
## 4.
```py
>>> obsp.insert(3,123)
>>> long_l=obsp*3
>>> long_l
[-1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000]
>>> len(long_l)
57
```
## 5.
```py
>>> kurt_n=tuple(long_l)
>>> mid=len(kurt_n)//2
>>> f_half=kurt_n[:mid]
>>> s_half=kurt_n[mid:]
>>> f_half
(-1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4)
>>> s_half
(6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000)
```

Двоичные данные
TEMA4/figure1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
TEMA4/figure2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
TEMA4/figure3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 17 KiB

Двоичные данные
TEMA4/figure4.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 19 KiB

Двоичные данные
TEMA4/figure5.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

@ -0,0 +1,305 @@
# Отчет по теме 4
Бережков Дмитрий, А-01-23
## 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema4')
```
## 2. Стандартные функции.
2.1 Функция round – округление числа с заданной точностью:
```py
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> type(round(123.456,0))
<class 'float'>
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'>
```
2.2 Функция range - создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1:
```py
>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
>>> list(gg)
[76, 85, 94, 103, 112, 121]
>>> range(23)
range(0, 23)
>>> list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
Объект с какими значениями получится в этом случае? Каковы границы диапазона? Какой шаг?
Значения: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
Границы: [0, 23)
Шаг: 1
2.3 Функция zip-создание общего объекта, элементами которого являются кортежи:
```py
>>> qq=['Berezhkov','Stepanischev','Tabolin','Krishtul']
>>> ff=zip(gg,qq)
>>> fff = tuple(ff)
>>> print(fff)
((76, 'Berezhkov'), (85, 'Stepanischev'), (94, 'Tabolin'), (103, 'Krishtul'))
>>> print(len(fff))
4
>>> len(gg), len(qq)
(6, 4)
>>> ff[0]
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
ff[0]
TypeError: 'zip' object is not subscriptable
```
Невозможно обратиться с указанием индекса, потому что объект является итерируемым.
2.4 Функция eval– вычисление значения выражения:
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=3
>>> dan
-141.0
```
2.5 Функция exec – чтение и выполнение объекта-аргумента функции:
```py
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
```
2.6 Функции abs, pow, max, min, sum, divmod, len, map:
```py
>>> abs(-13)
13
>>> pow(2,4)
16
>>> max(42,54,33)
54
>>> min(1,3,5)
1
>>> sum([1,2,3])
6
>>> divmod(5,3)
(1, 2)
>>>
>>> len(range(9))
9
>>> r = map(lambda x: round(x) * (-1), [12.1245, 14.125234, 534.222])
>>> list(r)
[-12, -14, -534]
```
## 3. Функции из стандартного модуля math.
```py
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
```
3.1 Функции sin, acos, degrees, radians, exp, log, log10, sqrt, ceil, floor, pi:
```py
>>> math.sin(90)
0.8939966636005579
>>> math.acos(0)
1.5707963267948966
>>> math.degrees(math.pi)
180.0
>>> math.radians(180)
3.141592653589793
>>> math.exp(4)
54.598150033144236
>>> math.log(10)
2.302585092994046
>>> math.log10(100)
2.0
>>> math.sqrt(16)
4.0
>>> math.ceil(3.14)
4
>>> math.floor(3.14)
3
>>> math.pi
3.141592653589793
```
3.2 Вычисление значения функции sin(2π/7+e0.23 ):
```py
>>> math.sin((2*math.pi/7) + math.exp(0.23))
0.8334902641414562
```
## 4. Функции из модуля cmath:
```py
>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1-0.5j)
-0.4636476090008061
```
## 5. Стандартный модуль random – совокупность функций для выполнения операций с псевдослучайными числами и выборками.
```py
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
random.seed()
random.random() # вещественное число от 0.0 до 1.0
0.022635313373460364
random.uniform(5, 15) # вещественное число от 5.0 до 15.0
5.363612111162993
random.randint(1, 100) # целое число от 1 до 100
2
random.gauss(0, 1) # mu - среднее значение, sigma - стандартное отклонение
0.8104264223845308
random.choice([1, 2, 3, 4]) # случайный выбор элемента из списка, кортежа, строки и т.д.
1
Num = [1, 2, 3, 4]
random.shuffle(Num)
Num
[2, 1, 4, 3]
random.sample(Num, 2) # случайный выбор двух элементов из Num
[3, 1]
random.betavariate(2, 5) # случайное число с плавающей точкой на основе бета-распределения
0.3506592878950909
random.gammavariate(2, 1) # случайное число с плавающей точкой на основе гамма-распределения
3.755676054491517
```
## 6. Функции из модуля time – работа с календарем и со временем.
```py
>>> import time
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
>>> c1=time.time()
>>> c2=time.time()-c1
>>> c1
1761120933.7341516
>>> c2
5.980855703353882
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=22, tm_hour=8, tm_min=16, tm_sec=5, tm_wday=2, tm_yday=295, tm_isdst=0)
>>> dat.tm_mon
10
>>> time.asctime((2025, 10, 13, 20, 13, 54, 1, 345, 0)) #год, месяц, день, час, минута, секунда, день недели, день года, летнее время
'Tue Oct 13 20:13:54 2025'
>>> time.ctime(time.time())
'Wed Oct 22 11:19:57 2025'
>>> time.mktime((2025, 12, 25, 15, 30, 0, 0, 0, 0))
1766665800.0
```
## 7. Графические функции.
```py
>>> import pylab
>>> x=list(range(-3,55,4))
>>> t=list(range(15))
>>> pylab.plot(t,x) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x000001890FC94910>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show() #Отображение графика на экране
```
Отображение графика:
<image src="figure1.png">
```py
>>> X1=[12,6,8,10,7]; X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x000001890FD35450>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x000001890FD35590>]
>>> pylab.show()
```
Отображение графика:
<image src="figure2.png">
```py
>>> region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>> naselen=[65,12,23,17] # Значения для диаграммы
>>> pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x000001890E333E00>, <matplotlib.patches.Wedge object at 0x000001890F4DF110>, <matplotlib.patches.Wedge object at 0x000001890F4DF4D0>, <matplotlib.patches.Wedge object at 0x000001890F4DF750>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show() #Отображение диаграммы
```
Отображение диаграммы:
<image src="figure3.png">
```py
>>> pylab.bar(region, naselen)
<BarContainer object of 4 artists>
>>> pylab.title('Население по регионам')
Text(0.5, 1.0, 'Население по регионам')
>>> pylab.ylabel('Население (млн)')
Text(0, 0.5, 'Население (млн)')
>>> pylab.show()
```
Отбражение диаграммы:
<image src="figure4.png">
```py
>>> pylab.hist(naselen)
(array([2., 0., 1., 0., 0., 0., 0., 0., 0., 1.]), array([12. , 17.3, 22.6, 27.9, 33.2, 38.5, 43.8, 49.1, 54.4, 59.7, 65. ]), <BarContainer object of 10 artists>)
>>> pylab.title('Гистограмма распределения населения')
Text(0.5, 1.0, 'Гистограмма распределения населения')
>>> pylab.xlabel('Население (млн)')
Text(0.5, 0, 'Население (млн)')
>>> pylab.ylabel('Частота')
Text(0, 0.5, 'Частота')
>>> pylab.show()
```
Отображение гистограммы:
<image src="figure5.png">
## 8. Статистический модуль statistics.
```py
>>> import statistics
>>> numbers = [1,2,3,4,5,6,7,8,9]
>>> statistics.mean(numbers)
5
>>> statistics.median(numbers)
5
>>> a = [-1,-2,-3,-4,-5,-6,-7,-8,-9]
>>> statistics.correlation(numbers, a)
-1.0
```

@ -0,0 +1,51 @@
# Общее контрольное задание.
Бережков Дмитрий А-01-23
## Задание:
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
## Выполнение:
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
```py
>>> import cmath
>>> import math
>>> import time
>>> import random
>>> import string
>>> print(divmod((round(cmath.phase(0.2+0.8j), 2))*20, 3))
(8.0, 2.6000000000000014)
```
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
```py
>>> moscow_time = time.localtime()
>>> string_with_time = f"{moscow_time.tm_hour}:{moscow_time.tm_min}"
>>> print(string_with_time)
12:38
```
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
```py
>>> days_of_week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']
>>> print(random.sample(days_of_week, 3))
['Вторник', 'Суббота', 'Понедельник']
```
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
```py
>>> numbers = list(range(14, 33, 3))
>>> print(random.choice(numbers))
32
```
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
```py
>>> N = round(random.normalvariate(15, 4))
>>> N
13
N_list = random.choices(string.ascii_uppercase, k=N)
>>> print(N_list)
['A', 'L', 'C', 'N', 'Z', 'K', 'O', 'F', 'W', 'V', 'I', 'T', 'M']
```
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
```py
>>> current_time = time.time()
>>> previous_time = time.mktime(moscow_time)
>>> time_interval_minutes = (current_time - previous_time) / 60
>>> print(time_interval_minutes)
10.002429103851318
```

@ -0,0 +1,23 @@
# Индивидуальное контрольное задание, тема 4(вар15).
Бережков Дмитрий А-01-23
## Задание:
Напишите инструкцию, создающую переменную, значение которой равно зафиксированному времени начала ответа в секундах от начала эпохи. Создайте список с целочисленными значениями, равномерно размещенными в диапазоне от -37 до 62 с шагом 11. Определите число элементов в списке. Случайным образом выберите один элемент из этого списка и рассчитайте для него значение синуса, округленное до трех цифр после точки. Выведите результат в виде строки: «Синус элемента <значение> равен <значение>».
## Выполнение:
```py
>>> import time
>>> vrem=time.time()
>>> print(vrem)
1761294005.023787
>>> sp1=range(-37,63,11)
>>> print(list(sp1))
[-37, -26, -15, -4, 7, 18, 29, 40, 51, 62]
>>> len(sp1)
10
>>> rnd=random.choice(sp1)
>>> print(rnd)
-37
>>> print(round(math.sin(rnd),3))
0.644
>>> print('Синус элемента',rnd,'равен', round(math.sin(rnd),3))
Синус элемента -37 равен 0.644
```

Двоичные данные
TEMA5/figure1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 89 KiB

Двоичные данные
TEMA5/figure2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 23 KiB

@ -0,0 +1,310 @@
# Отчет по теме 5
Бережков Дмитрий, А-01-23
## 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema5')
```
## 2. Ветвление по условию – управляющая инструкция if.
```py
>>> porog=50
>>> rashod1=100
>>> rashod2=150
>>> if rashod1>=porog:
... dohod=12
... elif rashod2==porog:
... dohod=0
... else:
... dohod=-8
...
...
>>> dohod
12
```
```py
>>> porog=10
>>> rashod1=11
>>> rashod2=4
>>> if rashod1>=3 and rashod2==4:
... dohod=rashod1
... if rashod2==porog or rashod1<rashod2:
... dohod=porog
...
...
>>> dohod
11
```
```py
>>> dohod=2 if porog>=4 else 0
>>> dohod
2
>>> if porog>=5 : rashod1=6; rashod2=0
...
>>> rashod1
6
>>> rashod2
0
```
```py
>>> rashod1=8
>>> rashod2=4
>>> porog=4
>>> if porog==3:
dohod=1
elif porog==4:
dohod=2
elif porog==5:
dohod=3
else:
dohod=0
>>> dohod
2
```
## 3. Цикл по перечислению – управляющая инструкция for.
3.1 Простой цикл
```py
>>> temperatura=5
>>> for i in range(3,18,3):
... temperatura+=i
...
...
>>> temperatura
50
```
3.2 Более сложный цикл
```py
>>> sps=[2,15,14,8]
>>> for k in sps:
if len(sps)<=10:sps.append(sps[0])
else:break
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
```
Цикл выполняет тело (добавление 2 в конец списка), до тех пор пока длина этого списка не превысит 10. Получается список длиной 11.
```py
>>> sps=[2,15,14,8]
>>> for k in sps[:]:
... if len(sps)<=10:sps.append(sps[0])
... else:break
...
...
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
Здесь список, по которому пробегается k, и список, изменяющийся внутри цикла - это объекты, имеющие разные адреса. Цикл итерируется по копии, но изменяет оригинальный список sps. Итерации происходят только 4 раза
3.3 Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500
```py
>>> import random as rn
>>> sps5=[]
>>> for i in range(10):
... sps5.append(rn.randint(1,100))
... ss=sum(sps5)
... if ss>500: break
... else:
... print(ss)
...
488
```
Программа вывела ответ, потому что сработал else, и за все десять итераций цикла так и не успел выполниться break по условию if.
```py
>>> for i in range(10):
... sps5.append(rn.randint(1,100))
... ss=sum(sps5)
... if ss>500: break
... else:
... print(ss)
...
...
>>> ss
569
```
Сумма превысила 500 и сработала команда break
3.4 Пример с символьной строкой
```py
>>> stroka='Это – автоматизированная система'
>>> stroka1=""
>>> for ss in stroka:
stroka1+=" "+ss
>>> stroka1
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
```
Переменная ss проходит по всему строковому объекту, на каждой итерации принимая значение одного знака. Этот знак с предшествующим пробелом дописывается в конец другой, изначально пустой строки. Цикл закончится, когда закончится исходная строка.
3.5 Запись цикла в строке
```py
>>> import math
>>> sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
>>> sps2
[0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965]
```
<image src="figure1.png">
## 4. Цикл «пока истинно условие» – управляющая инструкция while.
4.1 Цикл со счетчиком.
```py
>>> rashod=300
>>> while rashod:
... print("Расход=",rashod)
... rashod-=50
...
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
```
Завершение цикла в данном случае произошло из-за того, что переменная rashod приняла значение 0. Это значение интерпретируется как False.
4.2 Пример с символьной строкой
```py
>>> import math
>>> stroka='Расчет процесса в объекте регулирования'
>>> i=0
>>> sps2=[]
>>> while i<len(stroka):
... r=1-2/(1+math.exp(0.1*i))
... sps2.append(r)
... print('Значение в момент',i,"=",r)
... i+=1
...
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
Значение в момент 4 = 0.197375320224904
Значение в момент 5 = 0.2449186624037092
Значение в момент 6 = 0.2913126124515909
Значение в момент 7 = 0.3363755443363322
Значение в момент 8 = 0.3799489622552249
Значение в момент 9 = 0.421899005250008
Значение в момент 10 = 0.4621171572600098
Значение в момент 11 = 0.5005202111902354
Значение в момент 12 = 0.5370495669980353
Значение в момент 13 = 0.5716699660851172
Значение в момент 14 = 0.6043677771171636
Значение в момент 15 = 0.6351489523872873
Значение в момент 16 = 0.6640367702678489
Значение в момент 17 = 0.6910694698329307
Значение в момент 18 = 0.7162978701990245
Значение в момент 19 = 0.7397830512740043
Значение в момент 20 = 0.7615941559557649
Значение в момент 21 = 0.7818063576087741
Значение в момент 22 = 0.8004990217606297
Значение в момент 23 = 0.8177540779702878
Значение в момент 24 = 0.8336546070121553
Значение в момент 25 = 0.8482836399575129
Значение в момент 26 = 0.8617231593133063
Значение в момент 27 = 0.874053287886007
Значение в момент 28 = 0.8853516482022625
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
Значение в момент 32 = 0.9216685544064713
Значение в момент 33 = 0.9288576214547277
Значение в момент 34 = 0.935409070603099
Значение в момент 35 = 0.9413755384972874
Значение в момент 36 = 0.9468060128462683
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
```
<image src="figure2.png">
4.3 Определение, является ли число простым (делится только на самого себя или 1)
```py
>>> chislo=267 #Проверяемое число
>>> kandidat =chislo // 2 # Для значений chislo > 1
>>> while kandidat > 1:
... if chislo%kandidat == 0: # Остаток от деления
... print(chislo, ' имеет множитель ', kandidat)
... break # else выполняться не будет
... kandidat -= 1
... else: # При завершении цикла без break
... print(chislo, ' является простым!')
...
267 имеет множитель 89
```
Дополним программу так, чтобы она проверяла все числа от 250 до 300.
```py
>>> chislo = [x for x in range (250, 301)]
>>> for a in chislo:
... kandidat = a // 2
... while kandidat > 1:
... if a % kandidat == 0:
... print(a, ' имеет множитель ', kandidat)
... break
... kandidat -= 1
... else: print(a, " является простым!")
...
...
250 имеет множитель 125
251 является простым!
252 имеет множитель 126
253 имеет множитель 23
254 имеет множитель 127
255 имеет множитель 85
256 имеет множитель 128
257 является простым!
258 имеет множитель 129
259 имеет множитель 37
260 имеет множитель 130
261 имеет множитель 87
262 имеет множитель 131
263 является простым!
264 имеет множитель 132
265 имеет множитель 53
266 имеет множитель 133
267 имеет множитель 89
268 имеет множитель 134
269 является простым!
270 имеет множитель 135
271 является простым!
272 имеет множитель 136
273 имеет множитель 91
274 имеет множитель 137
275 имеет множитель 55
276 имеет множитель 138
277 является простым!
278 имеет множитель 139
279 имеет множитель 93
280 имеет множитель 140
281 является простым!
282 имеет множитель 141
283 является простым!
284 имеет множитель 142
285 имеет множитель 95
286 имеет множитель 143
287 имеет множитель 41
288 имеет множитель 144
289 имеет множитель 17
290 имеет множитель 145
291 имеет множитель 97
292 имеет множитель 146
293 является простым!
294 имеет множитель 147
295 имеет множитель 59
296 имеет множитель 148
297 имеет множитель 99
298 имеет множитель 149
299 имеет множитель 23
300 имеет множитель 150
```
4.4 Инструкция continue
```py
>>> for i in range(1, 11):
... if i % 2 == 0: # Если число четное
... continue # Пропускаем оставшуюся часть цикла
... print(i)
...
...
1
3
5
7
9
```

@ -0,0 +1,124 @@
# Общее контрольное задание по теме 5
Бережков Дмитрий А-01-23
## Задание:
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
## Выполнение:
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
```py
>>> stroka="Enter the name of any module, keyword, or topic to get help on writing"
>>> abc="abcdefghijklmnopqrstuvwxyz"
>>> for x in stroka:
... small = x.lower()
... if small in abc:
... numbers = abc.find(small)+1
... print("Буква",x, "с порядковым номером", numbers)
...
...
Буква E с порядковым номером 5
Буква n с порядковым номером 14
Буква t с порядковым номером 20
Буква e с порядковым номером 5
Буква r с порядковым номером 18
Буква t с порядковым номером 20
Буква h с порядковым номером 8
Буква e с порядковым номером 5
Буква n с порядковым номером 14
Буква a с порядковым номером 1
Буква m с порядковым номером 13
Буква e с порядковым номером 5
Буква o с порядковым номером 15
Буква f с порядковым номером 6
Буква a с порядковым номером 1
Буква n с порядковым номером 14
Буква y с порядковым номером 25
Буква m с порядковым номером 13
Буква o с порядковым номером 15
Буква d с порядковым номером 4
Буква u с порядковым номером 21
Буква l с порядковым номером 12
Буква e с порядковым номером 5
Буква k с порядковым номером 11
Буква e с порядковым номером 5
Буква y с порядковым номером 25
Буква w с порядковым номером 23
Буква o с порядковым номером 15
Буква r с порядковым номером 18
Буква d с порядковым номером 4
Буква o с порядковым номером 15
Буква r с порядковым номером 18
Буква t с порядковым номером 20
Буква o с порядковым номером 15
Буква p с порядковым номером 16
Буква i с порядковым номером 9
Буква c с порядковым номером 3
Буква t с порядковым номером 20
Буква o с порядковым номером 15
Буква g с порядковым номером 7
Буква e с порядковым номером 5
Буква t с порядковым номером 20
Буква h с порядковым номером 8
Буква e с порядковым номером 5
Буква l с порядковым номером 12
Буква p с порядковым номером 16
Буква o с порядковым номером 15
Буква n с порядковым номером 14
Буква w с порядковым номером 23
Буква r с порядковым номером 18
Буква i с порядковым номером 9
Буква t с порядковым номером 20
Буква i с порядковым номером 9
Буква n с порядковым номером 14
Буква g с порядковым номером 7
```
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
```py
>>> text="Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом"
>>> spis=text.split(" ")
>>> spis
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
>>> slovo="список" # Цикл с имеющимся словом в списке
>>> for x in spis:
... if x ==slovo:
... print ("Такое слово есть :",slovo)
... break
... else:
... print ("Такого слова нет")
...
...
Такое слово есть : список
>>> slovo="один" # Цикл без слова в списке
>>> for x in spis:
... if x ==slovo:
... print ("Такое слово есть :",slovo)
... break
... else:
... print ("Такого слова нет")
...
...
Такого слова нет
```
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
```py
spis=['Berezhkov', 'Tabolin', 'Filippov']
spis1=[3.2, 2.6, 4.2]
spis2=[3.0,3.7,4.0]
spis3=['Tabolin', 'Filippov', 'Berezhkov']
student = input("Введите фамилию: ")
Введите фамилию: Berezhkov
>>> if student in spis:
... if (student in spis) and (student in spis3):
... index_summer=spis.index(student) # Индекс студента по летней сессии
... ball_summer=spis1[index_summer] # Балл студента по летней сессии
... index_winter=spis3.index(student) # Индекс студента по зимней сессии
... ball_winter=spis2[index_winter] # Балл студента по зимней сессии
... print("Студент - ",student)
... print("Летняя сессия: ",ball_summer)
... print("Зимняя сессия: ",ball_winter)
... else: print("Студент не найден")
...
...
Студент - Berezhkov
Летняя сессия: 3.2
Зимняя сессия: 4.0

@ -0,0 +1,18 @@
# Индивидуальное контрольное задание, тема 5(вар4).
Бережков Дмитрий А-01-23
## Задание:
Создайте список с 20 случайными, нормально распределенными (математическое ожидание равно 3400, стандартное отклонение равно 121) числами. Рассчитайте по нему среднее значение и число элементов, значение которых превышает это среднее.
## Выполнение:
```py
>>> import random
>>> import statistics
>>> num=[random.gauss(3400,121) for x in range(20)]
>>> print(f"список:{num}")
список:[3396.1007134069782, 3309.355583457351, 3545.7945484956176, 3387.720866536105, 3262.569857230275, 3356.82492981347, 3356.3479057523814, 3309.116041460467, 3220.9161586156624, 3263.8617714158254, 3298.480356433616, 3103.7018235911783, 3325.4297119760827, 3450.802774481258, 3316.8527236228515, 3290.0794131140838, 3333.5081730777715, 3434.361897645846, 3267.4912643410007, 3429.8193313204833]
>>> mean=statistics.mean(num)
>>> mean
3332.9567922894153
>>> more_mean=len([x for x in num if x > mean])
>>> more_mean
9
```

@ -0,0 +1 @@
запись строки в файл

Двоичные данные
TEMA6/Zadanie.bin

Двоичный файл не отображается.

@ -0,0 +1,360 @@
# Отчет по теме 6
Бережков Дмитрий, А-01-23
## 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6')
```
## 2. Вывод данных на экран дисплея
2.1 Вывод в командной строке
```py
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
```
Этот способ называется «эхо-выводом». Он пригоден при работе в командной строке.
2.2 Вывод с использованием функции print
Этот способ можно применять и в командной строке, и в функциях.
```py
>>> fff=234.5;gg='Значение температуры = '
>>> print(gg,fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
>>> print(gg, fff, sep='/')
Значение температуры = /234.5
```
Если курсор надо оставить в той же строке, то следует использовать еще один аргумент:
```py
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
```
Если в какой-то момент требуется просто перейти на новую строку, можно использовать следующее обращение к функции:
```py
>>> print()
```
```py
>>> print(""" Здесь может выводиться
... большой текст,
... занимающий несколько строк""")
...
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
... "большой текст,",
... "занимающий несколько строк")
...
Здесь может выводиться большой текст, занимающий несколько строк
```
Разница в двух случаях состоит в том, что в первом случае тройные кавычки воспроизводят текст ровно так, как он был введен. Во втором случае три выводимых объекта-строки перечислены через запятую и выведены как три объекта, разделённые пробелом.
2.3 Вывод с использованием метода write объекта sys.stdout
```py
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3.Ввод данных с клавиатуры
```py
>>> psw=input('Введите пароль:')
Введите пароль:12345
>>> psw
'12345'
>>> type(psw)
<class 'str'>
```
input() всегда возвращает строку.
Пример 1: Ввод с контролем значения.
```py
>>> while True:
... znach=float(input('Задайте коэф.усиления = '))
... if znach<17.5 or znach>23.8:
... print('Ошибка!')
... else:
... break
...
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> znach
21.6
```
Пример 2: Ввод и обработка выражения, подлежащего расчету.
```py
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4. Ввод-вывод при работе с файлами
4.1 Функции для работы с путём к файлу
```py
>>> import os
>>> os.getcwd()
'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6'
>>> Berezhkov=os.getcwd()
>>> print(Berezhkov)
C:\MPEI\PO_ASY\BerezhkovGit\python-labs\Tema6
os
>>> os.mkdir("newp") #создание директории newp в текущей папке
>>> os.rmdir("newp") #Удаление newp
>>> os.listdir() # функция показа всех файлов и папок
['.gitkeep', 'report.md']
>>> os.path.isdir("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
True
```
```py
>>> fil=os.path.abspath("oplata.dbf") #получение имя файла вместе с полным путем доступа к нему
...
>>> drkt=os.path.dirname(fil)# Выделение пути доступа к файлу из строки, содержащей и этот путь, и имя файла
...
>>> drkt
...
'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6'
>>> drkt1=os.path.basename(drkt=os.path.dirname(fil))
...
>>> drkt1=os.path.basename(os.path.abspath("oplata.dbf")) # выделение имя файла из этой строки с отбрасыванием пути
...
>>> drkt1
...
'oplata.dbf'
>>> os.path.split(os.path.abspath("oplata.dbf"))# Функция разделения на кортеж из пути и из имени файла
...
('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6', 'oplata.dbf')
>>> type(os.path.split(os.path.abspath("oplata.dbf")))
...
<class 'tuple'>
>>> os.path.exists("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
True
>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\OPLATA.DBF")# Функция проверки существования каталога
...
True
>>> os.path.isfile("C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6")
...
False
```
4.2 Общая схема работы с файлом
Для обмена данными с файлом необходимо выполнить следующие операции: Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); Выполнение одной или нескольких операций обмена данными с файлом; Закрытие файла.
4.3 Открытие файла для записи или чтения данных - функция open.
```py
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
...
>>> fp
...
<_io.TextIOWrapper name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis1.txt' mode='w' encoding='cp1251'>
>>> fp=open(drkt+'\\zapis1.txt','w')
...
>>> fp=open('zapis1.txt','w')#Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла
...
>>> fp
...
<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='cp1251'>
>>> type(fp)
...
<class '_io.TextIOWrapper'>
dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> fp1
<_io.BufferedRandom name='C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema6\\zapis2.bin'>
```
4.4 Закрытие файла
```py
>>> fp.close()
```
4.5 Запись информации в файл с помощью метода write.
```py
>>> sps=list(range(1,13))
...
>>> fp2=open('zapis3.txt','w')
...
>>> fp2.write(str(sps[:4])+'\n')
...
13
>>> fp2.write(str(sps[4:8])+'\n')
...
13
>>> fp2.write(str(sps[8:])+'\n')
...
16
>>> fp2.close()
...
```
Откроем файл zapis3.txt и посмотрим его содержимое: [1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] В файл записались преобразованные в строки срезы списка.
```py
>>> sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
...
>>> fp3=open('zapis4.txt','w')
...
>>> for i in range(len(sps3)):
... stroka4=sps3[i][0]+' '+str(sps3[i][1])
... fp3.write(stroka4)
...
...
11
11
12
fp3.close()
```
Содержание файла zapis4.txt: Иванов И. 1Петров П. 2Сидоров С. 3
Видно, что строки склеились там. можно сделать по-другому:
```py
>>> gh=open('zapis5.txt','w')
...
>>> for r in sps3:
... gh.write(r[0]+' '+str(r[1])+'\n')
...
...
12
12
13
>>> gh.close()
...
```
4.6 Первый способ чтения информации из текстового файла.
```py
>>> sps1=[]
...
>>> fp=open('zapis3.txt') # Файл открыт в режиме чтения (по умолчанию)
...
>>> for stroka in fp:
... stroka=stroka.rstrip('\n')
... stroka=stroka.replace('[','')
... stroka=stroka.replace(']','')
... sps1=sps1+stroka.split(',')
...
...
>>> fp.close()
...
>>> sps1
...
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
>>> sps
...
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
Видно, что полученный список отличается от исходного sps типом данных, а также не убраны некоторые пробелы. Исправим это:
```py
>>> sps2 = [int(i.strip()) for i in sps1]
...
>>> sps2
...
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
4.7 Чтение информации из файла с помощью метода read
```py
>>> fp=open('zapis3.txt')
...
>>> stroka1=fp.read(12) # Чтение первых 12 файлов, курсор остановится на 13-ом (/n)
...
>>> stroka2=fp.read() # Чтение всех оставшихся файлов
...
>>> fp.close()
...
>>> stroka1
...
'[1, 2, 3, 4]'
>>> stroka2
...
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
```
4.8 Чтение информации с помощью методов readline и readlines
```py
>>> file = open("zapis5.txt")
...
>>> file.readline()
...
'Иванов И. 1\n'
>>> file.close()
...
>>> file = open("zapis5.txt")
...
>>> file.readlines()
...
['Иванов И. 1\n', 'Петров П. 2\n', 'Сидоров С. 3\n']
>>> file.close()
```
4.9 Ввод-вывод объектов с использованием функций из модуля pickle
```py
import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>> pickle.dump(mnoz1,fp) # dump – метод записи объекта в файл
>>> fp.close()
```
Содержание файла zapis6.mnz: 耄锣 鐨谆楐桯湥钌Ͱ敮钌Ѣ潯殔谅瑡扬斔逮
Так происходит, потому что байты в этом файле не предназначены для текстового представления. Они могут содержать символы, которые не могут быть корректно интерпретированы в рамках текстовой кодировки.
```py
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>> fp.close()
>>> mnoz2
{'table', 'pen', 'iPhone', 'book'}
>>> mnoz1
{'table', 'pen', 'iPhone', 'book'}
>>> mnoz1==mnoz2
True
```
mnoz1 не совпадает с изначально заданным mnoz1, потому что данный тип объекта исключает повторяющиеся элементы.
```py
>>> fp=open('zapis7.2ob','wb')
>>> pickle.dump(mnoz1,fp)
>>> pickle.dump(sps3,fp)
>>> fp.close()
>>> fp=open('zapis7.2ob','rb')
>>> obj1=pickle.load(fp) #Первое обращение к load читает первый объект
>>> obj2=pickle.load(fp) #Второе – читает второй
>>> fp.close()
>>> obj1
{'table', 'pen', 'iPhone', 'book'}
>>> obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
Теперь с использованием тех же функций запишем в файл, а затем прочитаем два объекта разных типов. При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались
## 5. Перенаправление потоков ввода и вывода данных
```py
>>> import sys # Модуль для работы с потоками
>>> vr_out=sys.stdout #Запоминаем текущий поток вывода
>>> fc=open('Stroka.txt','w') #Откроем файл вывода
>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
>>> sys.stdout=vr_out #Восстановление текущего потока
>>> print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
>>> fc.close()
```
В результате создан файл Stroka.txt в текущем каталоге с содержанием: 'запись строки в файл'
Можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла:
```py
>>> tmp_in = sys.stdin #Запоминаем текущий поток ввода
>>> fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения)
>>> sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
>>> sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
>>> while True:
... try:
... line = input () #Считываем из файла строку
... print(line) # Отображаем считанное
... except EOFError: # Если возникла конкретная ошибка EOFError
... break
...
...
запись строки в файл
fd.close()
sys.stdin=tmp_in # Возвращение стандартного назначения для потока ввода
```

@ -0,0 +1,73 @@
# Общее контрольное задание по теме 6
Бережков Дмитрий А-01-23
## Задание:
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1 Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
2 Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3 Записывается кортеж в бинарный файл.
4 Записывается в этот же файл список и закрывается файл.
5 Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6 Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
7 Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение:
1.
```py
>>> import random
>>> tpl= tuple(str(random.randint(6, 56)) for x in range(125))
>>> tpl
('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26')
```
2.
```py
>>> spis=["Filippov", "Tabolin", "Berezhkov", "Goloshapov", "Krishtul"]
>>> spis
['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul']
```
3.
```py
>>> fp = open("Zadanie.bin", "wb")
>>> pickle.dump(tpl, fp)
```
4.
```py
>>> pickle.dump(spis, fp)
>>> fp.close()
```
5.
```py
>>> fp = open("Zadanie.bin", "rb")
>>> obj1=pickle.load(fp)
>>> obj2=pickle.load(fp)
>>> obj1
('10', '26', '16', '38', '30', '23', '44', '19', '42', '33', '8', '41', '24', '50', '50', '54', '49', '52', '21', '36', '14', '14', '19', '33', '55', '41', '35', '11', '17', '34', '48', '52', '23', '8', '48', '27', '43', '7', '48', '7', '34', '16', '6', '56', '47', '53', '48', '28', '52', '39', '32', '42', '47', '48', '13', '37', '51', '30', '56', '16', '50', '24', '40', '45', '55', '30', '34', '6', '48', '36', '23', '52', '47', '43', '55', '42', '43', '12', '13', '6', '36', '43', '38', '39', '26', '21', '20', '8', '39', '27', '43', '53', '55', '16', '41', '47', '30', '55', '15', '55', '54', '51', '18', '16', '21', '47', '14', '45', '22', '41', '28', '46', '51', '31', '44', '45', '38', '22', '44', '55', '41', '25', '45', '30', '26')
>>> obj2
['Filippov', 'Tabolin', 'Berezhkov', 'Goloshapov', 'Krishtul']
```
6.
```py
>>> print("obj1 и tpl совпадают") if obj1 == tpl else print("Переменные не совпадают")
obj1 и tpl совпадают
>>> print("obj2 и spis совпадают") if obj2 == spis else print("Переменные не совпадают")
obj2 и spis совпадают
```
7.
```py
>>> for i in range(125//5):
... exec('list' + str(i) + '=' + str(list(obj1[i:i+5])))
...
...
>>> list1
['26', '16', '38', '30', '23']
>>> list2
['16', '38', '30', '23', '44']
>>> list3
['38', '30', '23', '44', '19']
```

@ -0,0 +1,114 @@
# Модуль 2, тема 6 (вариант 9)
Бережков Дмитрий А-01-23
## Задание:
1) Создайте список с 40 элементами - случайными вещественными числами, равномерно распределенными на интервале от -10 до +25. Числа должны быть округлены до трех знаков после точки.
2) Запросите у пользователя и введите два целых числа: N1 и N2 (оба в диапазоне от 1 до 40 и должно быть N1<N2). Проверьте выполнение этих условий и при невыполнении - сообщите об ошибке и повторите ввод.
3) Рассчитайте по элементам списка, начиная с N1 и до N2 среднее значение и вывести его на экран по шаблону: "Для элементов с <N1> по <N2> среднее = <рассчитанное среднее значение>". Значение среднего округлите до двух знаков после точки.
4) Выведите элементы списка с N1 и до N2 в текстовый файл с некоторым именем и с размещением по два элемента на строке с разделителем "," (запятая).
# Решение
## 1.
```py
>>> import random
>>> spis=[round(random.uniform(-10,25),3) for i in range(40)]
>>> spis
[7.516, -2.114, -9.291, -3.274, 5.377, 7.296, -7.056, 15.582, 1.109, 9.562, 15.332, 17.638, 20.63, 16.09, 6.675, -1.211, -7.609, 16.373, 9.693, 19.774, 6.965, 8.367, 20.76, -9.153, -0.4, 1.487, 23.166, 11.878, 18.716, -2.98, 7.488, -8.928, 16.113, 9.6, 14.858, -6.395, 20.009, 15.412, 21.472, 11.904]
```
## 2.
```py
>>> while True:
... print("Введите через пробел два целых числа от 1 до 40 (первое должно быть меньше второго)")
... N1, N2=map(int, input("Ввод: ").split())
... if N1 > N2 :
... print("Первое должно быть меньше второго. Повторите попытку.")
... else: break
...
...
Введите через пробел два целых числа от 1 до 40 (первое должно быть меньше второго)
Ввод: 13 5
Первое должно быть меньше второго. Повторите попытку.
Введите через пробел два целых числа от 1 до 40 (первое должно быть меньше второго)
Ввод: 13 25
>>> N1, N2
(13, 25)
```
## 3.
```py
>>> m=s.mean(spis[N1:N2+1])
>>> print("Для элементов с ", N1, "по", N2, "среднее = ", round(m, 2))
Для элементов с 13 по 25 среднее = 6.75
```
## 4.
```py
>>> f1=open("test1.txt","w")
>>> for i in range(len(spis\[N1:N2+1])//2 + 1):
... f1.write(str(spis\[N1:N2+1]\[2\*i:2\*i+2]) + "\\n")
...
...
15
17
16
16
15
15
8
```

@ -0,0 +1,7 @@
[16.09, 6.675]
[-1.211, -7.609]
[16.373, 9.693]
[19.774, 6.965]
[8.367, 20.76]
[-9.153, -0.4]
[1.487]

@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

@ -0,0 +1 @@
Иванов И. 1Петров П. 2Сидоров С. 3

@ -0,0 +1,3 @@
Иванов И. 1
Петров П. 2
Сидоров С. 3

Двоичные данные
TEMA6/zapis6.mnz

Двоичный файл не отображается.

Двоичные данные
TEMA6/zapis7.2ob

Двоичный файл не отображается.

@ -0,0 +1,17 @@
241.71253896985093,248.0922049180413,63.93243805946962
-2.5613050572585365,-233.7356532046805,-43.71100872873404
-41.49388804453271,-18.877485553159943,-173.17954591286244
-34.188892969567426,269.22621427055026,-23.4777258431589
-150.0402089008563,-138.74013440973553,-44.13484238897196
155.8084571292971,124.18947811800096,-301.857271693554
123.73124009550004,-35.81862040280841,25.20824985373494
41.75645794585994,176.94308189535528,-146.535894889846
-14.5752858782325,244.43818392211853,74.31067862406104
54.861820682068505,140.74882354369083,204.004266081046
-291.65666897188805,-106.89837867764746,166.50068888913614
-38.919945617204526,111.8105712401512,208.76866045851344
105.23012130358175,-47.31240986990848,-86.86012792518429
-163.38008193138268,-90.34734159020095,45.12346410839757
197.16134782865944,-69.11221675096985,54.195564115622666
-42.973125559518735,-124.44829722682891,-89.63808266609591
-5.301952011199695,263.76559727114915

Двоичные данные
TEMA7/figure1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

@ -0,0 +1,970 @@
# Отчет по теме 7
Бережков Дмитрий, А-01-23
<<<<<<< HEAD
## 1.Начало работы, настройка текущего каталога
=======
# 1.Начало работы, настройка текущего каталога
>>>>>>> bc7bd0ebeae5d8fc756d40c4363503abc883dff9
```py
>>> import os
>>> os.chdir('C:\\\\MPEI\\\\PO\_ASY\\\\BerezhkovGit\\\\python-labs\\\\Tema7')
```
# 2. Создание пользовательской функции
## 2.1 Функция без аргументов
```py
>>> def uspeh():
... """Подтверждение успеха операции"""
... print('Выполнено успешно!')
...
>>> uspeh()
Выполнено успешно!
>>> type(uspeh)
<class 'function'>
>>> dir()
['\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', 'os', 'uspeh']
>>> help(uspeh)
Help on function uspeh in module \_\_main\_\_:
>>> uspeh()
Подтверждение успеха операции
```
## 2.2 Функция с аргументами
```py
>>> def sravnenie(a,b):
... """Сравнение a и b"""
... if a>b:
... print(a,' больше ',b)
... elif a<b:
... print(a, ' меньше ',b)
... else:
... print(a, ' равно ',b)
>>> n,m=16,5;sravnenie(n,m)
16 больше 5
>>> n,m='3', '5';sravnenie(n,m)
3 меньше 5
```
Функцию можно выполнить с аргументами в виде символьной строки.
## 2.3 Функция, содержащая return
```py
>>> def logistfun(b,a):
... """Вычисление логистической функции"""
... import math
... return a/(1+math.exp(-b))
>>> v,w=1,0.7;z=logistfun(w,v)
>>> z
0.6681877721681662
```
## 2.4 Сложение для разных типов аргументов
```py
>>> def slozh(a1,a2,a3,a4):
... """ Сложение значений четырех аргументов"""
... return a1+a2+a3+a4
...
>>> slozh(1,2,3,4) # Сложение чисел
10
>>> slozh('1','2','3','4') # Сложение строк
'1234'
>>> b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
>>> q=slozh(b1,b2,b3,b4) #Сложение списков
>>> qq
>>> q
[1, 2, -1, -2, 0, 2, -1, -1]
```
```py
>>> slozh((1, 2), (3, 4), (5, 6), (7, 8)) # Сложение кортежей
(1, 2, 3, 4, 5, 6, 7, 8)
>>> slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8}) # Сложение словарей
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8}) # Сложение словарей
File "<pyshell#21>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
>>> slozh({1, 2}, {3, 4}, {5, 6}, {7, 8}) # Сложение множеств
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
slozh({1, 2}, {3, 4}, {5, 6}, {7, 8}) # Сложение множеств
File "<pyshell#21>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
```
Функция работает еще с кортежами, а со словарями и множествами нет.
## 2.5 Функция, реализующая модель некоторого устройства
```py
>>> def inerz(x,T,ypred):
... """ Модель устройства с памятью:
... x- текущее значение вх.сигнала,
... T -постоянная времени,
... ypred - предыдущее значение выхода устройства"""
... y=(x+T*ypred)/(T+1)
... return y
...
>>> sps=[0]+[1]*100
>>> spsy=[] #Заготовили список для значений выхода
>>> TT=20 #Постоянная времени
>>> yy=0 #Нулевое начальное условие
>>> for xx in sps:
... yy=inerz(xx,TT,yy)
... spsy.append(yy)
...
>>> import pylab
>>> pylab.plot(spsy)
[<matplotlib.lines.Line2D object at 0x000001EF6C25CA50>]
>>> pylab.xlabel("Время, сек.")
Text(0.5, 0, 'Время, сек.')
>>> pylab.ylabel("Выходной сигнал")
Text(0, 0.5, 'Выходной сигнал')
>>> pylab.grid(True)
>>> pylab.show()
```
Полученный график:
<image src="figure1.png">
## 3. Функции как объекты
# 3.1 Атрибуты объекта-функции
```py
>>> dir(inerz)
['\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_call\_\_', '\_\_class\_\_', '\_\_closure\_\_', '\_\_code\_\_', '\_\_defaults\_\_', '\_\_delattr\_\_', '\_\_dict\_\_', '\_\_dir\_\_', '\_\_doc\_\_', '\_\_eq\_\_', '\_\_format\_\_', '\_\_ge\_\_', '\_\_get\_\_', '\_\_getattribute\_\_', '\_\_getstate\_\_', '\_\_globals\_\_', '\_\_gt\_\_', '\_\_hash\_\_', '\_\_init\_\_', '\_\_init\_subclass\_\_', '\_\_kwdefaults\_\_', '\_\_le\_\_', '\_\_lt\_\_', '\_\_module\_\_', '\_\_name\_\_', '\_\_ne\_\_', '\_\_new\_\_', '\_\_qualname\_\_', '\_\_reduce\_\_', '\_\_reduce\_ex\_\_', '\_\_repr\_\_', '\_\_setattr\_\_', '\_\_sizeof\_\_', '\_\_str\_\_', '\_\_subclasshook\_\_', '\_\_type\_params\_\_']
>>> inerz.\_\_doc\_\_ # Использование атрибута объекта-функции
'Модель устройства с памятью:\\nx- текущее значение вх.сигнала,\\n T -постоянная времени,\\n ypred - предыдущее значение выхода устройства'
>>> help(inerz)
Help on function inerz in module \_\_main\_\_:
inerz(x, T, ypred)
Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства
```
## 3.2 Сохранение ссылки на объект-функцию в другой переменной
```py
>>> fnkt=sravnenie
>>> v=16
>>> fnkt(v,23)
16 меньше 23
```
## 3.3 Возможность альтернативного определения функции в программе
```py
>>> typ_fun=8
>>> if typ_fun==1:
... def func():
... print('Функция 1')
... else:
... def func():
... print('Функция 2')
...
>>> func()
Функция 2
```
# 4. Аргументы функции
## 4.1 Использование функции в качестве аргумента другой функции
```py
>>> def fun_arg(fff,a,b,c):
... """fff-имя функции, используемой
... в качестве аргумента функции fun_arg"""
... return a+fff(c,b)
...
>>> zz=fun_arg(logistfun,-3,1,0.7)
>>> zz
-2.3318122278318336
```
## 4.2 Обязательные и необязательные аргументы
```py
>>> def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1
... """Вычисление логистической функции"""
... import math
... return b/(1+math.exp(-a))
...
>>> logistfun(0.7) #Вычисление со значением b по умолчанию
0.6681877721681662
>>> logistfun(0.7,2) #Вычисление с заданным значением b
1.3363755443363323
```
## 4.3 Обращения к функции с произвольным (непозиционным) расположением аргументов
```py
>>> logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
0.34498724056380625
```
## 4.4 Аргументы функции, содержащиеся в списке или кортеже
```py
>>> b1234=[b1,b2,b3,b4] # Список списков из п.2.4
>>> qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку
>>> qq
[1, 2, -1, -2, 0, 2, -1, -1]
```
## 4.5 Аргументы функции, содержащиеся в словаре
```py
>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4}
>>> qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
>>> qqq
10
```
## 4.6 Смешанные ссылки
```py
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
>>> qqqq=slozh(*e1,**dd2)
>>> qqqq
17
```
## 4.7 Переменное число аргументов у функции
```py
>>> def func4(*kort7):
... """Произвольное число аргументов в составе кортежа"""
... smm=0
... for elt in kort7:
... smm+=elt
... return smm
...
>>> func4(-1,2) #Обращение к функции с 2 аргументами
1
>>> func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами
10
```
## 4.8 Комбинация аргументов
```py
>>> def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж
... """Кортеж - сборка аргументов - должен быть последним!"""
... smm=0
... for elt in kort7:
... smm+=elt
... return a*smm+b
...
>>> func4(-1,2,0,3,6)
-7
```
```py
>>> def func4(a, b = 7, **dict7):
... """Словарь - сборка аргументов - должен быть последним!"""
... smm = 0
... for el in dict7.values():
... smm += el
... return a * smm + b
...
>>> func4(-1, 2, **{"a1" : 0, "a2" : 3, "a3" : 6})
-7
```
пример реализации аналогичной функции для произвольного количества аргументов, переданного в виде словаря
## 4.9 Изменение значений объектов с помощью функций
```py
>>> a=90 # Числовой объект – не изменяемый тип
>>> def func3(b):
... b=5*b+67
...
>>> func3(a)
>>> a
90
>>> sps1=[1,2,3,4] #Список – изменяемый тип объекта
>>> def func2(sps):
... sps[1]=99
...
>>> func2(sps1)
>>> print(sps1)
[1, 99, 3, 4]
>>> kort=(1,2,3,4) #Кортеж – неизменяемый тип объекта
>>> func2(kort)
Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
func2(kort)
File "<pyshell#86>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
```
# 5. Специальные типы пользовательских функций.
## 5.1 Анонимные функции
Анонимные функции - лямбда-функциями - это функции без имени , определяемые по следующей схеме:
lambda <Список аргументов >: <Возвращаемое значение или выражение>
lambda \[<Список аргументов >]: <Возвращаемое значение или выражение>
Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту.
```py
>>> import math
>>> anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов
>>> anfun1() # Обращение к объекту-функции
2.7362852774480286
>>> anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами
>>> anfun2(17,234)
19.369215857410143
>>> anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом
>>> anfun3(100)
102.36921585741014
```
## 5.2 Функции-генераторы
Функции-генераторы – функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение.
```py
>>> def func5(diap,shag):
... """ Итератор, возвращающий значения
... из диапазона от 1 до diap с шагом shag"""
... for j in range(1,diap+1,shag):
... yield j
...
>>> for mm in func5(7,3):
... print(mm)
...
1
4
7
>>> alp=func5(7,3)
>>> print(alp.\_\_next\_\_())
1
>>> print(alp.\_\_next\_\_())
4
>>> print(alp.\_\_next\_\_())
7
>>> print(alp.\_\_next\_\_())
Traceback (most recent call last):
File "<pyshell#106>", line 1, in <module>
print(alp.\_\_next\_\_())
StopIteration
```
Выводится ошибка, потому что функция отработала все итерации.
# 6. Локализация объектов
## 6.1 Примеры на локализацию объектов
```py
>>> glb=10
>>> def func7(arg):
... loc1=15
... glb=8
... return loc1*arg
...
>>> res=func7(glb)
>>> res
150
>>> glb
10
>>>
```
```py
>>> def func8(arg):
... loc1=15
... print(glb)
... glb=8
... return loc1*arg
>>> res=func8(glb)
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
res=func8(glb)
File "<pyshell#113>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
```
Причина ошибки: использование локального объекта до его определения.
```py
>>> glb=11
>>> def func7(arg):
... loc1=15
... global glb
... print(glb)
... glb=8
... return loc1*arg
...
>>> res=func7(glb)
11
>>> res
165
>>> glb
8
```
Значение изменилось, т.к. была переопределена локализация объекта.
## 6.2 Функции для выявления локализации объектов
```py
>>> def func8(arg):
... loc1=15
... glb=8
... print(globals().keys()) #Перечень глобальных объектов «изнутри» функции
... print(locals().keys()) #Перечень локальных объектов «изнутри» функции
... return loc1\*arg
...
>>> hh=func8(glb)
dict\_keys(\['\_\_name\_\_', '\_\_doc\_\_', '\_\_package\_\_', '\_\_loader\_\_', '\_\_spec\_\_', '\_\_annotations\_\_', '\_\_builtins\_\_', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ\_fun', 'func', 'fun\_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
dict\_keys(\['arg', 'loc1', 'glb'])
>>> 'glb' in globals().keys()
True
```
## 6.3 Локализация объектов при использовании вложенных функций
```py
>>> def func9(arg2,arg3):
... def func9_1(arg1):
... loc1=15
... glb1=8
... print('glob_func9_1:',globals().keys())
... print('locl_func9_1:',locals().keys())
... return loc1*arg1
... loc1=5
... glb=func9_1(loc1)
... print('loc_func9:',locals().keys())
... print('glob_func9:',globals().keys())
... return arg2+arg3*glb
...
>>> kk=func9(10,1)
glob\_func9\_1: dict\_keys(\['\_\_name\_\_', '\_\_doc\_\_', '\_\_package\_\_', '\_\_loader\_\_', '\_\_spec\_\_', '\_\_annotations\_\_', '\_\_builtins\_\_', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ\_fun', 'func', 'fun\_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
locl\_func9\_1: dict\_keys(\['arg1', 'loc1', 'glb1'])
loc\_func9: dict\_keys(\['arg2', 'arg3', 'func9\_1', 'loc1', 'glb'])
glob\_func9: dict\_keys(\['\_\_name\_\_', '\_\_doc\_\_', '\_\_package\_\_', '\_\_loader\_\_', '\_\_spec\_\_', '\_\_annotations\_\_', '\_\_builtins\_\_', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ\_fun', 'func', 'fun\_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
>>> kk
85
```
## 6.4 Моделирование некоторой системы с помощью нескольких функций
Запрос и обработка введенных параметров
```py
>>> znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1,T,k2,Xm,A,F,N=5,2,7,1,3,0.1,50
>>> 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])
```
Реализация входного сигнала
```py
>>> import math
>>> vhod=[]
>>> for i in range(N):
... vhod.append(A*math.sin((2*i*math.pi)/F))
...
>>> vhod
[0.0, -7.34788079488412e-15, -1.469576158976824e-14, -6.467620653025836e-14, -2.939152317953648e-14, -1.6463709641123863e-13, -1.2935241306051673e-13, -9.406772970979485e-14, -5.878304635907296e-14, -2.3498363008351057e-14, -3.2927419282247726e-13, -2.9398950947175535e-13, -2.5870482612103345e-13, 1.1764037039453651e-13, -1.881354594195897e-13, -4.939112892337158e-13, -1.1756609271814592e-13, -8.228140936742402e-14, -4.6996726016702114e-14, -6.938330689956763e-13, -6.585483856449545e-13, 5.885732403546355e-14, -5.879790189435107e-13, -5.526943355927888e-13, -5.174096522420669e-13, -4.82124968891345e-13, 2.3528074078907303e-13, -4.115556021899013e-13, -3.762709188391794e-13, -3.409862354884575e-13, -9.878225784674317e-13, -9.525378951167099e-13, -2.3513218543629184e-13, -8.819685284152661e-13, -1.6456281873484803e-13, -8.113991617138223e-13, -9.399345203340423e-14, -7.408297950123785e-13, -1.3876661379913526e-12, -6.702604283109348e-13, -1.317096771289909e-12, -1.9639331142688832e-12, 1.177146480709271e-13, -5.291216949080472e-13, -1.1759580378870214e-12, -4.585523282066034e-13, -1.1053886711855776e-12, -3.879829615051596e-13, -1.0348193044841338e-12, -1.6816556474631084e-12]
```
Создание функций, реализующих компоненты системы
```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
```
Соединение компонент в соответствии с заданием и получение выходного сигнала
```py
>>> yi1=0;yin1=0;yi2=0
>>> vyhod=[]
>>> for xt in vhod:
... xt1=xt-yi2 #отрицательная обратная связь
... [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
... yi2=tahogen(yin1,k2,yi2)
... yt=nechus(yin1,Xm)
... vyhod.append(yt)
...
...
>>> print('y=',vyhod)
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6089539155942427, -13.036146587349938, 121.44813795602693, -1067.2095969566972, 9317.816619654644, -81294.22842535547, 709200.0106510338, -6186906.685120374, 53973168.988947384, -470849610.29481155, 4107584498.8890133, -35833629291.65392, 312604400058.94775, -2727089409189.0786, 23790505329708.062, -207542936412563.75, 1810557189004300.2, -1.579488751252292e+16, 1.3779099221408792e+17, -1.2020571542715681e+18, 1.0486472148269562e+19, -9.148158864631634e+19, 7.980644913680371e+20, -6.962132400705417e+21, 6.073605340072578e+22, -5.298474620106407e+23, 4.622268278560269e+24, -4.032361306008378e+25, 3.517739932494396e+26, -3.0687959965857205e+27, 2.677147557631607e+28, -2.335482401993116e+29, 2.037421521451343e+30, -1.7774000148879483e+31]
```

@ -0,0 +1,118 @@
# Общее контрольное задание по теме 7
Бережков Дмитрий А-01-23
## Задание:
1.Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
2.Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3.Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
## Решение:
1.
```py
>>> def crDelay(x,T):
... """Функция для реализации задержки сигнала в определенный момент времени x - исходный сигнал T - заданная задержка"""
... return[0] *T+x
...
>>> x=[1,2,3,4]
>>> y=crDelay(x,4)
>>> print(y)
[0, 0, 0, 0, 1, 2, 3, 4]
```
2.
```py
>>> def raschet_gistogrammy(viborka,kol_int):
... Min=min(viborka)
... Max=max(viborka)
... shirina_int=(Max-Min)/kol_int
... x=[0]*kol_int
... for znach in viborka:
... num_int=int((znach-Max)/shirina_int)
... if num_int == kol_int:
... num_int = kol_int - 1
... x[num_int] += 1
... print("Гистограмма:")
... for i in range(kol_int):
... start = Max + i * shirina_int
... end = Max + (i + 1) * shirina_int
... print(f"[{start:.2f}, {end:.2f}]: {x[i]}")
... return x
...
>>> import random
>>> rand=[random.gauss(0, 1) for _ in range(100)]
>>> kol_int=5
res = raschet_gistogrammy(rand, kol_int)
Гистограмма:
[2.31, 3.30]: 8
[3.30, 4.30]: 5
[4.30, 5.30]: 21
[5.30, 6.29]: 44
[6.29, 7.29]: 22
```
3.
```py
anonim_f = lambda b1, b2, X: b1 + b2 * X
print(anonim_f(3,8,2))
19
```

@ -0,0 +1,39 @@
# ИКЗ, тема 7 (вариант 10)
Бережков Дмитрий А-01-23
## Задание:
10. Разработайте функцию c 3 аргументами, реализующую запись заданной последовательности – списка или кортежа (аргумент функции) в текстовый файл с заданным именем (аргумент функции) с заданным числом (аргумент функции) элементов на строке файла, разделенных запятыми. Проверьте её на записи в файл кортежа с 50 случайными, нормально распределенными числами с математическим ожиданием 23 и дисперсией 144 по 3 элемента в строке.
## Выполнение:
```py
>>> def writef(obj,file,elem):
... """Запись последовательности списка или кортежа в текстовый файл с заданным числом элементов на строке"""
... with open (file,'w') as f:
... for i in range (0, len(obj), elem):
... line=obj[i:i+elem]
... f.write(','.join(str(x) for x in line) + '\n')
...
...
>>> numbers = [random.gauss(23,144) for x in range(50)]
>>> writef(numbers,'data1.txt',3)
```
Содержание файла data1.txt:
```py
241.71253896985093,248.0922049180413,63.93243805946962
-2.5613050572585365,-233.7356532046805,-43.71100872873404
-41.49388804453271,-18.877485553159943,-173.17954591286244
-34.188892969567426,269.22621427055026,-23.4777258431589
-150.0402089008563,-138.74013440973553,-44.13484238897196
155.8084571292971,124.18947811800096,-301.857271693554
123.73124009550004,-35.81862040280841,25.20824985373494
41.75645794585994,176.94308189535528,-146.535894889846
-14.5752858782325,244.43818392211853,74.31067862406104
54.861820682068505,140.74882354369083,204.004266081046
-291.65666897188805,-106.89837867764746,166.50068888913614
-38.919945617204526,111.8105712401512,208.76866045851344
105.23012130358175,-47.31240986990848,-86.86012792518429
-163.38008193138268,-90.34734159020095,45.12346410839757
197.16134782865944,-69.11221675096985,54.195564115622666
-42.973125559518735,-124.44829722682891,-89.63808266609591
-5.301952011199695,263.76559727114915
```

@ -0,0 +1,19 @@
14
4
56
8
42
70
46
24
14
26
46
74
22
94
6
30
78
20
52

@ -0,0 +1,21 @@
75
45
57
27
21
39
77
65
9
1
47
99
39
97
49
81
69
85
31
19
3

@ -0,0 +1,11 @@
def files(N, Fchet, Fnchet):
fp1 = open(Fchet, 'w')
fp2 = open(Fnchet, 'w')
for i in N:
s = str(i) + '\n'
if i % 2 == 0:
fp1.write(s)
else:
fp2.write(s)
fp1.close()
fp2.close()

@ -0,0 +1,4 @@
import random
from IKZmodul1 import files
testN = tuple(random.randint(1,100) for i in range(40))
files(testN, 'Fchet.txt', 'Fnchet.txt')

@ -0,0 +1,2 @@
import MM2
print('y=',MM2.vyhod)

@ -0,0 +1,21 @@
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

@ -0,0 +1,23 @@
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)

@ -1,9 +1,12 @@
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 = str(int(Mod1.perm1)*3)
print(Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)

@ -0,0 +1,4 @@
10 25 5.5
-3
100 0.1 999
42

@ -0,0 +1,4 @@
2.718 3.14159
5000
-1.0 -2.0 -3.0 -4.0 -5.0
77

@ -0,0 +1,7 @@
def read(file):
"""Чтение данных из файла"""
numbers=[]
with open(file,'r') as file:
for line in file:
numbers.extend(map(float,line.split()))
return numbers

@ -0,0 +1,13 @@
def correlations(list1,list2):
""" Расчет коэффициента корреляции"""
n= min(len(list1), len(list2))
list1 = list1[:n]
list2 = list2[:n]
mean1 = sum(list1)/n
mean2 = sum(list2)/n
chisl = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
znam1 = sum((x - mean1) ** 2 for x in list1)
znam2 = sum((y - mean2) ** 2 for y in list2)
if znam1 == 0 or zname2 == 0:
return 0
return chisl/(znam1 * znam2) ** 0.5

@ -0,0 +1,9 @@
import modul1
import modul2
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
list1 = modul1.read(file1)
list2 = modul1.read(file2)
corr = modul2.correlations(list1, list2)
print(f"Коэффициент корреляции: {corr:.3f}")
print(list1)

@ -0,0 +1,349 @@
# Отчет по теме 8
Бережков Дмитрий, А-01-23
# 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema8')
```
# 2. Создание и использование модулей в среде Python
## 2.1 Запуск модуля на выполнение путем его импорта
Содержание файла Mod1.py:
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
```
```py
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> type(Mod1)
<class 'module'>
>>> dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
>>> Mod1.perm1
'5'
>>> import Mod1
>>> import importlib
>>> importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema8\\Mod1.py'>
>>> Mod1.perm1
'3'
```
## 2.2 Импортированные модули заносятся в словарь – значение атрибута sys.modules
```py
>>> import sys
>>> print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\MPEI\\PO_ASY\\BerezhkovGit\\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', '_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']
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema8\\Mod1.py'>
```
## 2.3 Запуск модуля на выполнение с помощью функции exec()
```py
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> perm1
'5'
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 6
Mod1:Значение perm1= 6
>>> perm1
'6'
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 7
Mod1:Значение perm1= 7
>>> perm1
'7'
```
## 2.4 Использование инструкции from … import …
Пример 1
```py
>>> from Mod1 import perm1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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']
>>> perm1
'5'
```
Пример 2
Содержание файла Mod2.py:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)
```
```py
>>> from Mod2 import beta
>>> g=beta(2)
****BETA****
>>> g
535.4916555247646
>>> print(sorted(sys.modules.keys()))
['Mod1', 'Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_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']
>>> alpha()
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
```
Ошибка т.к. функция alpha не была импортирована
```py
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=1
'1'
>>> 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))
****BETA****
>>> uu
1.4578913609506803
```
# 3. Создание многомодульных программ
## 3.1 Пример простой многомодульной программы
Содержание файла Mod0.py:
```py
#Модуль 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)
```
```py
>>> import Mod0
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
perm1= 4
****ALPHA****
Значение t=2
tt= 2
****BETA****
qq= 535.4916555247646
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2'
535.4916555247646
'4'
```
## 3.2 Еще пример простой многомодульной программы
Содержание файла MM1.py:
```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:
```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:
```py
import MM2
print('y=',MM2.vyhod)
```
```py
>>> import MM0
k1,T,k2,Xm,A,F,N=1,2,3,6,7,1,150
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.829774528248064, -5.778427676056717, 4.377003657579136, 29.558154321265476, 21.198296883719944, -24.720529505033227, -84.95813902289166, -55.78346493726198, 82.78286315462168, 225.4940974293863, 131.47450506335215, -245.84014345990008, -580.1780192947309, -291.68669404255, 697.710792643522, 1470.6682609753332, 614.6641227623035, -1935.9785425762568, -3694.4016834222475, -1216.2767911842775, 5296.490247627277, 9216.52846986061, 2177.552344514519, -14338.985690399039, -22848.91264129187, -3158.186228212345, 38485.1619890611, 56292.429420069384, 1902.5469068315288]
```
## 3.3 Области действия объектов в модулях
Добавление в функцию alpha обращение к функции beta и, наоборот, из beta – к alpha.
Измененный файл Mod2.py:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
beta(int(t))
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)
```
```py
>>> from Mod2 import *
>>> alpha()
****ALPHA****
Значение t=2
****BETA****
'2'
```
Еще одно изменение файла Mod2.py:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
alpha()
return math.exp(expi)
```
```py
>>> beta(7)
****BETA****
****ALPHA****
Значение t=3
3553321280.847041
```
Отображение на экране в модуле Mod0 значения объектов t и expi
Измененный файл Mod0.py
```py
#Модуль 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(t,expi)
```
```py
>>> import Mod0
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
perm1= 3
****ALPHA****
Значение t=4
tt= 4
****BETA****
****ALPHA****
Значение t=3
qq= 286751.31313665316
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
import Mod0
File "C:\MPEI\PO_ASY\BerezhkovGit\python-labs\TEMA8\Mod0.py", line 10, in <module>
print(t,expi)
NameError: name 't' is not defined
```
Ошибка т.к. t и expi локальные переменные функций alpha() и beta()
Увеличение в модуле Mod0 в 3 раза значение объекта perm1 и отображение его после этого на экране
содержание файла Mod0.py:
```py
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 = str(int(Mod1.perm1)*3)
print(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(t,expi)
```
```py
>>> import Mod0
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
perm1= 3
9
****ALPHA****
Значение t=4
tt= 4
****BETA****
qq= 286751.31313665316
```
Увеличение в 2 раза значения объектов perm1, tt, qq в командной строке
```py
>>> import Mod0
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
perm1= 4
12
****ALPHA****
Значение t=9
tt= 9
****BETA****
qq= 1902773895292.1592
>>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2))
SyntaxError: unmatched ')'
>>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2)
>>> Mod0.Mod1.perm1
'24'
>>> Mod0.tt=str(int(Mod0.tt)*2)
>>> Mod0.tt
'18'
>>> Mod0.qq=Mod0.qq*2
>>> Mod0.qq
3805547790584.3184
```

@ -0,0 +1,70 @@
# Общее контрольное задание по теме 8
Бережков Дмитрий А-01-23
## Задание:
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение:
Модуль 1
```py
def read(file):
"""Чтение данных из файла"""
numbers=[]
with open(file,'r') as file:
for line in file:
numbers.extend(map(float,line.split()))
return numbers
```
Модуль 2
```py
def correlations(list1,list2):
""" Расчет коэффициента корреляции"""
n= min(len(list1), len(list2))
list1 = list1[:n]
list2 = list2[:n]
mean1 = sum(list1)/n
mean2 = sum(list2)/n
chisl = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
znam1 = sum((x - mean1) ** 2 for x in list1)
znam2 = sum((y - mean2) ** 2 for y in list2)
if znam1 == 0 or zname2 == 0:
return 0
return chisl/(znam1 * znam2) ** 0.5
```
Модуль 3
```py
import modul1
import modul2
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
list1 = modul1.read(file1)
list2 = modul1.read(file2)
corr = modul2.correlations(list1, list2)
print(f"Коэффициент корреляции: {corr:.3f}")
```
Тест:
```py
>>> import modul3
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.166
```
Данные файла data1.txt
```py
10 25 5.5
-3
100 0.1 999
42
```
Данные файла data2.txt
```py
2.718 3.14159
5000
-1.0 -2.0 -3.0 -4.0 -5.0
77
```

@ -0,0 +1,79 @@
# ИКЗ, тема 8 (вариант 13)
Бережков Дмитрий А-01-23
## Задание:
По указанному преподавателем варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
(13.Разработайте функцию с 3 аргументами, которая на основе заданной целочисленной последовательности (список или кортеж) – аргумент функции - формирует два текстовых файла с заданными именами (аргументы функции), причем в первый файл записывает из исходной последовательности четные значения, а во второй – нечетные. Проверьте функцию на примере кортежа с 40 случайными целыми числами.)
## Решение:
Содержание файла IKZmodul1.py:
```py
def files(N, Fchet, Fnchet):
fp1 = open(Fchet, 'w')
fp2 = open(Fnchet, 'w')
for i in N:
s = str(i) + '\n'
if i % 2 == 0:
fp1.write(s)
else:
fp2.write(s)
fp1.close()
fp2.close()
```
Содержание файла IKZmodul2.py:
```py
import random
from IKZmodul1 import files
testN = tuple(random.randint(1,100) for i in range(40))
files(testN, 'Fchet.txt', 'Fnchet.txt')
```
```py
>>> import IKZmodul2
```
Содержание файла Fchet.txt:
```py
14
4
56
8
42
70
46
24
14
26
46
74
22
94
6
30
78
20
52
```
Содержание файла Fnchet.txt:
```py
75
45
57
27
21
39
77
65
9
1
47
99
39
97
49
81
69
85
31
19
3
```

@ -0,0 +1,10 @@
import M2
import pickle
CC, KK, HH = M2.main()
data_M2 = {'CC': CC,'KK': KK,'HH': HH}
filename = "Res1212.bin"
with open(filename, 'wb') as file:
pickle.dump(data_M2, file)

@ -0,0 +1,21 @@
import random
def func1(T1, T2, M):
"""
Рассчет списка СС с M неповторяющимися целыми числами
в интервале между T1 и T2
"""
if T2 - T1 < M:
M = T2 - T1
CC = random.sample(range(T1, T2), M)
return CC
def func2(CC, KK):
"""
Создание списка НН (с числом элементов, равным длине СС) с целыми значениями из КК,
близкими к соответствующим элементам в СС
"""
HH = []
for i in CC:
cl = min(KK, key= lambda x: abs(x - i))
HH.append(cl)
return HH

@ -0,0 +1,27 @@
import M1
import random
def main():
while True:
try:
T1 = int(input("Введите первую границу: "))
T2 = int(input("Введите вторую границу: "))
if T1 < T2:
break
else:
print("Ошибка. Первая граница должна быть меньше второй границы.")
except ValueError:
print("Ошибка: введите целое число.")
while True:
try:
M = int(input("Введите количество значений в списке СС: "))
break
except ValueError:
print("Ошибка: введите целое число.")
if M > (T2 - T1):
M = T2 - T1
CC = M1.func1(T1, T2, M)
print("Список СС:", CC)
KK = [random.randint(T1, T2) for _ in range(500)]
HH = M1.func2(CC, KK)
print("Список НН:", HH)
return KK, CC, HH

@ -0,0 +1,10 @@
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)

Двоичные данные
TEMA9/Res1212.bin

Двоичный файл не отображается.

@ -0,0 +1,21 @@
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])

Двоичные данные
TEMA9/figure1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

@ -0,0 +1,14 @@
#main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 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()

@ -0,0 +1,242 @@
# Отчет по теме 9
Бережков Дмитрий, А-01-23
# 1.Начало работы, настройка текущего каталога
```py
>>> import os
>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema9')
```
# 2. Создание классов и их наследников
## 2.1 Создание автономного класса
```py
>>> class Class1: #Объявление класса
... def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
... self.data=znach # self - ссылка на экземпляр класса
... def otobrazh(self): # Метод 2 класса1
... print(self.data)#Отображение данных экземпляра класса
```
```py
>>> 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
```
## 2.2 Создание класса-наследника
```py
>>> 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
>>> del z1,z2,z3
```
# 3. Использование классов, содержащихся в модулях
Содержание файла Mod3.py:
```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#41>", line 1, in <module>
z4.otobrazh()
File "C:\MPEI\PO_ASY\BerezhkovGit\python-labs\Tema9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
Ошибка т.к. объект z4 не имеет атрибута data.
```py
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
```
```py
>>> del z4
>>> import Mod3
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта= Объект
```
В этом случае otobrazh-функция,а в предыдуем -метод класса.
## 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
... def __str__(self):
... return self.data
...
...
>>> z5=Class3('abc') #При создании экземпляра срабатывает конструктор
>>> z5.otobrazh()
значение объекта= abc
>>> z6=z5+'def'
>>> z6.otobrazh()
значение объекта= abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение объекта= abcdefabcdefabcdef
```
# 5. Присоединение атрибутов к классу
```py
>>> 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(z7)==dir(Class3)
False
>>> dir(z7.fio)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> 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']
```
# 6. Выявление родительских классов
```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__
```
# 7. Создание свойства класса
```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#112>", line 1, in <module>
exempl.svojstvo
File "<pyshell#106>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Ошибка т.к. атрибут __prm больше не существует
# 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Модуль SAU.py:
```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
#main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 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()
```
```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
```
График:
<image src="figure1.png">

@ -0,0 +1,70 @@
# Общее контрольное задание по теме 9
Бережков Дмитрий А-01-23
## Задание:
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобра-зите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Решение:
```py
class Employee:
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self._pooshrenia = []
def salary_raise(self, summa):
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
def change_department(self, new_department):
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
self.otdel = new_department
def change_position(self, new_position):
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
self.dolzhnost = new_position
@property
def pooshrenia(self):
return self._pooshrenia
def add_encouragement(self, tekst):
self._pooshrenia.append(tekst)
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")
```
```py
>>> from task import *
>>> emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777)
>>> emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 777777)
>>> emp1.change_department('УИТ')
Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ.
>>> emp1.change_department('УИТ')
Сотрудник Челышев Эдуард Артурович переведен из отдела УИТ в отдел УИТ.
>>> emp1.otdelemp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777)
>>> emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777)
>>> emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 777777)
>>> emp1.change_department('УИТ')
Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ.
>>> emp1.otdel
'УИТ'
>>> emp1.change_position('Старший преподаватель')
Должность сотрудника Челышев Эдуард Артурович изменена с Ассистент на Старший преподаватель.
>>> emp1.dolzhnost
'Старший преподаватель'
>>> emp2.salary_raise(-100000)
Оклад сотрудника Бобряков Александр Владимирович увеличен на -100000. Новый оклад: 677777
>>> emp2.oklad
677777
>>> emp2.add_encouragement('За победу в конкурсе "лучшая кафедра"')
Сотрудник Бобряков Александр Владимирович теперь имеет поощрение: За победу в конкурсе "лучшая кафедра"
>>> emp2.pooshrenia
['За победу в конкурсе "лучшая кафедра"']
```

@ -0,0 +1,27 @@
class Employee:
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self._pooshrenia = []
def salary_raise(self, summa):
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
def change_department(self, new_department):
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
self.otdel = new_department
def change_position(self, new_position):
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
self.dolzhnost = new_position
@property
def pooshrenia(self):
return self._pooshrenia
def add_encouragement(self, tekst):
self._pooshrenia.append(tekst)
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")

@ -0,0 +1,194 @@
\# Тест по модулю 3, тема 9 (вариант 7)
Бережков Дмитрий А-01-23
\## Задание:
M3\_7
1\) Создайте модуль М1, содержащий две функции:
\- функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;
\- функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК\[i] считается близким к элементу CC\[j], если для него абсолютная разность |KK\[i]-CC\[j]| - наименьшая по всем CC\[j].
2\) Создайте еще один модуль М2, в котором должны выполняться операции:
\- запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1<T2 и, если это не выполняется - запрос повторяется;
\- запрашивается у пользователя целое число М - число значений в списке СС; если М>(T2-T1), то принимается М=Т2-Т1;
\- с помощью функции 1 создается и отображается список СС;
\- создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2;
\- с помощью функции 2 рассчитывается список НН; результат отображается на экране.
3\) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin.
4\) Проверьте программу при двух наборах исходных данных:
\- Т1=34, Т2=78, М= 10
\- Т1=25, Т2=30, М=8.
\## Решение:
```py
import random
def func1(T1, T2, M):
&nbsp; """
&nbsp; Рассчет списка СС с M неповторяющимися целыми числами
&nbsp; в интервале между T1 и T2
&nbsp; """
&nbsp; if T2 - T1 < M:
&nbsp; M = T2 - T1
&nbsp; CC = random.sample(range(T1, T2), M)
&nbsp; return CC
def func2(CC, KK):
&nbsp; """
&nbsp; Создание списка НН (с числом элементов, равным длине СС) с целыми значениями из КК,
&nbsp; близкими к соответствующим элементам в СС
&nbsp; """
&nbsp; HH = \[]
&nbsp; for i in CC:
&nbsp; cl = min(KK, key= lambda x: abs(x - i))
&nbsp; HH.append(cl)
&nbsp; return HH
```
```py
import M1
import random
def main():
&nbsp; while True:
&nbsp; try:
&nbsp; T1 = int(input("Введите первую границу: "))
&nbsp; T2 = int(input("Введите вторую границу: "))
&nbsp; if T1 < T2:
&nbsp; break
&nbsp; else:
&nbsp; print("Ошибка. Первая граница должна быть меньше второй границы.")
&nbsp; except ValueError:
&nbsp; print("Ошибка: введите целое число.")
&nbsp; while True:
&nbsp; try:
&nbsp; M = int(input("Введите количество значений в списке СС: "))
&nbsp; break
&nbsp; except ValueError:
&nbsp; print("Ошибка: введите целое число.")
&nbsp; if M > (T2 - T1):
&nbsp; M = T2 - T1
&nbsp; CC = M1.func1(T1, T2, M)
&nbsp; print("Список СС:", CC)
&nbsp; KK = \[random.randint(T1, T2) for \_ in range(500)]
&nbsp; HH = M1.func2(CC, KK)
&nbsp; print("Список НН:", HH)
&nbsp; return KK, CC, HH
```
```py
import M2
import pickle
CC, KK, HH = M2.main()
data\_M2 = {'CC': CC,'KK': KK,'HH': HH}
filename = "Res1212.bin"
with open(filename, 'wb') as file:
&nbsp; pickle.dump(data\_M2, file)
```
```py
Ђ }”(ЊCC”]”(KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK”]”(KKKKKHH”]”(KKKKKeu.
```

@ -0,0 +1,129 @@
# # Тест по модулю 3, тема 9 (вариант 7)
Бережков Дмитрий А-01-23
## Задание:
M3_7
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;
- функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j].
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1<T2 и, если это не выполняется - запрос повторяется;
- запрашивается у пользователя целое число М - число значений в списке СС; если М>(T2-T1), то принимается М=Т2-Т1;
- с помощью функции 1 создается и отображается список СС;
- создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2;
- с помощью функции 2 рассчитывается список НН; результат отображается на экране.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin.
4) Проверьте программу при двух наборах исходных данных:
- Т1=34, Т2=78, М= 10
- Т1=25, Т2=30, М=8.
## Решение:
Модуль М1:
```py
import random
def func1(T1, T2, M):
"""
Рассчет списка СС с M неповторяющимися целыми числами
в интервале между T1 и T2
"""
if T2 - T1 < M:
M = T2 - T1
CC = random.sample(range(T1, T2), M)
return CC
def func2(CC, KK):
"""
Создание списка НН (с числом элементов, равным длине СС) с целыми значениями из КК,
близкими к соответствующим элементам в СС
"""
HH = []
for i in CC:
cl = min(KK, key= lambda x: abs(x - i))
HH.append(cl)
return HH
```
Модуль М2:
```py
import M1
import random
def main():
while True:
try:
T1 = int(input("Введите первую границу: "))
T2 = int(input("Введите вторую границу: "))
if T1 < T2:
break
else:
print("Ошибка. Первая граница должна быть меньше второй границы.")
except ValueError:
print("Ошибка: введите целое число.")
while True:
try:
M = int(input("Введите количество значений в списке СС: "))
break
except ValueError:
print("Ошибка: введите целое число.")
if M > (T2 - T1):
M = T2 - T1
CC = M1.func1(T1, T2, M)
print("Список СС:", CC)
KK = [random.randint(T1, T2) for _ in range(500)]
HH = M1.func2(CC, KK)
print("Список НН:", HH)
return KK, CC, HH
```
Модуль М3:
```py
import M2
import pickle
CC, KK, HH = M2.main()
data_M2 = {'CC': CC,'KK': KK,'HH': HH}
filename = "Res1212.bin"
with open(filename, 'wb') as file:
pickle.dump(data_M2, file)
```
## Тестированние:
Вывод с тестовыми значениями 1 (Т1=34, Т2=78, М= 10)
```py
Введите первую границу: 34
Введите вторую границу: 78
Введите количество значений в списке СС: 10
Список СС: [56, 50, 77, 36, 37, 53, 41, 75, 76, 70]
Список НН: [56, 50, 77, 36, 37, 53, 41, 75, 76, 70]
```
Бинарный файл:
```py
Ђ•0 }”(ЊCC”]”(K?K.K=K$K$K/KIK/KFKCKKK/KHKFK2K@KJK8KJK3K,K;KGK)K3K"KHK%K8K>KDKNK4K"K(K$KKKMK+K&KMKNKBK=K'K2K'K4KIKNK<K&K.K-K=K"K>K0K5K"K,K0K@K6KDKBK(KCK(KIKLKLK5KIK;K6K)K(KMK"KLK:K:KCK-KLK)K9K7KJK/K@K9KHK%K,K(KIKNK<K9K&K$KCKJKMK5K"K>K#K+K)K=K)KJK(K"K,KFK4K+KNK%KMKBKIK&K*K9K-K4K*K(K%K-K6K8K/K&KJK4K,K?KEK1K7K"K:K-K5K(K@K>K9K5K'K'K%K"K"K1KGK>K(KIK-K=KMKDKBK(KNKFKJK)K;K8KKKGK+K.KIKEK5K8K3K:K'K$K?KEKJK0K5K#KLKFK#KLK3K7K+K2K&KLK>K+K2KBK0K:K)K$K9KFK3KNK<K-K*K9K'K3K.K9K2K3KDKAKGKHKEKAK7KNK-KFK0K*K/K5KFKLKHKNKEK2K+K9K7K:K/KEK9K7K&K5KIK=KCK0KIK*KNK2K0K8KKKBK@KBK;KBK0K=K2K(K(K-KAKCK>KNK@KJKMK5KDK;KIK:K<K0K.K+KFK2K%K1K:K&K0KAK$K@KKK5K.K1K*K@KJK,K&KCKMKLK(K9KCK3K=K=K(KKK$K@KCK;KJKKK>K,K1K?KKK+KAK;K,K4KHKBKAK1K=KEK@K)KNK*K*K"KJK=K@KBK1KHK@K"KAK4K$K#K7K8KKK6K@KKK:KBK.KIK#K*K&K5K,K)K?KHK)K)K=K7KBK1KKK%K.KKK4K7K-K6K2K-KKKLK6KIK;K&K(KNK2KGK1K)K1K,KJKMKIK6KMK+K/K8KLK8KAKKKEK&K,K$K=KLK?K.K#K-K@K/K:K&K#K"K0K@KKKGK-KMK4KIK7K;KEK"K"K3K*KBK#KGK@KHK0K(KIKFK5K;KBK>K4K6K5K'K'K=K7K.K,K=K)KFK-KHKDKFKCK)K)KLKEK&K6KJK'K%K?K3K@K(K'eЊKK”]”(K8K2KMK$K%K5K)KKKLKFeЊHH”]”(K8K2KMK$K%K5K)KKKLKFeu.
```
Вывод с тестовыми значениями 1 (Т1=25, Т2=30, М= 8)
```py
Введите первую границу: 25
Введите вторую границу: 30
Введите количество значений в списке СС: 8
Список СС: [28, 25, 27, 26, 29]
Список НН: [28, 25, 27, 26, 29]
```
Бинарный файл:
```py
Ђ }”(ЊCC”]”(KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK”]”(KKKKKHH”]”(KKKKKeu.
```
Загрузка…
Отмена
Сохранить