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

..

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

Автор SHA1 Сообщение Дата
ButkoZV dda45c01bd Изменил(а) на 'TEMA9/task.md'
3 недель назад
ButkoZV ed9ddfffdb Изменил(а) на 'TEMA9/task.md'
3 недель назад
ButkoZV 3eae46959a Изменил(а) на 'TEMA9/task.md'
3 недель назад
ButkoZV 3e0b6e42dd Изменил(а) на 'TEMA9/task.md'
3 недель назад
ButkoZV 1a8726301a Изменил(а) на 'TEMA9/task-4.md'
3 недель назад
ButkoZV bb54f99025 Загрузил(а) файлы в 'TEMA9'
3 недель назад
ButkoZV 7aadcf8963 Изменил(а) на 'TEMA9/report.md'
3 недель назад
ButkoZV 9545c92aa5 Изменил(а) на 'TEMA9/report.md'
3 недель назад
ButkoZV c4ea0ab091 Загрузил(а) файлы в 'TEMA9'
3 недель назад
ButkoZV 380b4eb4a9 Изменил(а) на 'TEMA8/task.md'
3 недель назад
ButkoZV e50e34fd21 Изменил(а) на 'TEMA8/report.md'
3 недель назад
ButkoZV 9fb8567cdc Загрузил(а) файлы в 'TEMA8'
3 недель назад
ButkoZV 557049899d Изменил(а) на 'TEMA8/task-3.md'
3 недель назад
ButkoZV 936097eb41 Загрузил(а) файлы в 'TEMA8'
3 недель назад
ButkoZV 3ba84c6b16 Загрузил(а) файлы в 'TEMA8'
3 недель назад
ButkoZV 9fe3bf8bba Изменил(а) на 'TEMA8/report-3.md'
3 недель назад
ButkoZV 1dd7fcabbb Изменил(а) на 'TEMA8/report-3.md'
3 недель назад
ButkoZV 8dae9710be Загрузил(а) файлы в 'TEMA8'
3 недель назад
ButkoZV d8a3b8b375 Изменил(а) на 'TEMA7/report.md'
1 месяц назад
ButkoZV 4fb74ef19c Изменил(а) на 'TEMA7/report.md'
1 месяц назад
ButkoZV de8b88a453 Изменил(а) на 'TEMA7/task.md'
1 месяц назад
ButkoZV 80da37693f Изменил(а) на 'TEMA7/task-3.md'
1 месяц назад
ButkoZV c20782f27f Загрузил(а) файлы в 'TEMA7'
1 месяц назад
ButkoZV f58b99d3e6 Загрузил(а) файлы в 'TEMA7'
1 месяц назад
ButkoZV 82afa38b8f Изменил(а) на 'TEMA7/report.md'
1 месяц назад
ButkoZV 86e5fbade3 Загрузил(а) файлы в 'TEMA7'
1 месяц назад
ButkoZV 9e39358fe4 Изменил(а) на 'TEMA6/task.md'
2 месяцев назад
ButkoZV 40cb6f0773 Изменил(а) на 'TEMA6/task.md'
2 месяцев назад
ButkoZV f586b8597e Загрузил(а) файлы в 'TEMA6'
2 месяцев назад
ButkoZV 134d326bde Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
ButkoZV c7b832ab48 Загрузил(а) файлы в 'TEMA6'
2 месяцев назад
ButkoZV d1ca1a41f3 Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
ButkoZV a78d1b690f Изменил(а) на 'TEMA6/report.md'
2 месяцев назад
ButkoZV 6c3c4c390e Загрузил(а) файлы в 'TEMA6'
2 месяцев назад
ButkoZV 1c06d329c4 Изменил(а) на 'TEMA6/report-2.md'
2 месяцев назад
ButkoZV fe2cd15342 Загрузил(а) файлы в 'TEMA6'
2 месяцев назад
ButkoZV f1a8c34bcf Изменил(а) на 'TEMA6/report-2.md'
2 месяцев назад
ButkoZV bbf794525a Загрузил(а) файлы в 'TEMA6'
2 месяцев назад
ButkoZV ffde2d2b47 Изменил(а) на 'TEMA5/task.md'
2 месяцев назад
ButkoZV f59c4d4483 Изменил(а) на 'TEMA5/task.md'
2 месяцев назад
ButkoZV 2523bf3783 Изменил(а) на 'TEMA5/task.md'
2 месяцев назад
ButkoZV f33116880d Изменил(а) на 'TEMA5/report.md'
2 месяцев назад
ButkoZV c04e3c73fd Загрузил(а) файлы в 'TEMA5'
2 месяцев назад
ButkoZV 5003cbac66 Загрузил(а) файлы в 'TEMA5'
2 месяцев назад
ButkoZV 36706a8bd3 Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
ButkoZV 4db4be844c Изменил(а) на 'TEMA4/test.md'
3 месяцев назад
ButkoZV 8cd089824e Загрузил(а) файлы в 'TEMA4'
3 месяцев назад
ButkoZV 3da6bd2633 Изменил(а) на 'TEMA4/task.md'
3 месяцев назад
ButkoZV 4ff8142dfc Загрузил(а) файлы в 'TEMA4'
3 месяцев назад
ButkoZV 193a103fd6 Изменил(а) на 'TEMA4/report.md'
3 месяцев назад
ButkoZV e03291dad8 Изменил(а) на 'TEMA3/test.md'
3 месяцев назад
ButkoZV 5dd24f5cc7 Удалить 'TEMA3/test.md'
3 месяцев назад
ButkoZV c87123a2f9 Загрузил(а) файлы в 'TEMA3'
3 месяцев назад
ButkoZV 16c20263f2 Загрузил(а) файлы в 'TEMA3'
3 месяцев назад
ButkoZV 02019f9678 Создал(а) 'TEMA3/test.md'
3 месяцев назад
ButkoZV dc8bdcd744 Изменил(а) на 'TEMA3/report.md'
3 месяцев назад
ButkoZV 8826fd3231 Загрузил(а) файлы в 'TEMA4'
3 месяцев назад
ButkoZV e69d472d83 Загрузил(а) файлы в 'TEMA4'
3 месяцев назад
ButkoZV 5e44a22081 Изменил(а) на 'TEMA3/task.md'
3 месяцев назад
ButkoZV da1e610287 Загрузил(а) файлы в 'TEMA3'
3 месяцев назад
ButkoZV f1dcdfac0e Удалить 'TEMA3/task.md'
3 месяцев назад
ButkoZV 02465640af Загрузил(а) файлы в 'TEMA3'
3 месяцев назад
ButkoZV e5340044d3 Изменил(а) на 'TEMA3/report.md'
3 месяцев назад
ButkoZV 95086f334e Изменил(а) на 'TEMA3/report.md'
3 месяцев назад
ButkoZV 07d50f0000 Изменил(а) на 'TEMA3/report.md'
3 месяцев назад
ButkoZV 871f484455 Создал(а) 'TEMA3/report.md'
3 месяцев назад
ButkoZV 1620dbc2f9 Создал(а) 'report.md'
3 месяцев назад
ButkoZV 571ecb1e7a Изменил(а) на 'TEMA2/report.md'
4 месяцев назад
ButkoZV 8d79247c63 Создал(а) 'TEMA2/report.md'
4 месяцев назад
ButkoZV a4508b154f Изменил(а) на 'TEMA1/report.md'
4 месяцев назад
u207-07 a50f702824 report
4 месяцев назад
u207-07 64c9f5c669 report
4 месяцев назад
u207-07 35bfe622cb report
4 месяцев назад
u207-07 c4ef032844 report
4 месяцев назад
u207-07 53d170d83a report
4 месяцев назад

@ -1,7 +1,6 @@
# Программное обеспечение автоматизированных систем: лабораторные работы
[Репозиторий с методическими указаниями и заданиями.](http://uit.mpei.ru/git/main/python)
Обратите внимание на файл с комментариями в репозитории по ссылке.
## Работа с Git
@ -110,7 +109,7 @@
### Оформление решений
Решение всех заданий и тестов оформляется по образцу:
Решение всех заданий оформляется по образцу:
# Общее контрольное задание по теме 2
@ -130,8 +129,5 @@
Для темы 1 вместо «Задания» — «Вопрос», вместо «Решения» — «Ответ».
Для тем 3, 6 и 9 вместо «Индивидуального контрольного задания по теме 3 (6, 9)» —
«Тест по модулю 1 (2, 3)».
Для тем 8 и 9 раздела «Решение» не нужно,
вместо этого решение размещается в отдельных файлах `*.py`.

Двоичные данные
TEMA1/A.bmp

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

После

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

Двоичные данные
TEMA1/B.bmp

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

После

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

@ -0,0 +1,6 @@
#Программа по Теме 1 Бутко Захара Владимировича
print('Hello')
h=input('Your name=')
exit()
import os
os.chdir('C:\\Users\\u207-07\\Desktop\\python-labs\\TEMA1\\')

@ -0,0 +1,80 @@
# Отчет по теме 1
Бутко Захар, А-03-23
## 1 Основы языка программирования Python
## 1.1 Работа с пунктами 3-5
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
print('Hello')
Hello
h=input('Your name=')
Your name=Zakhar
## 1.2 Работа с IDLE 6-8
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
import os
os.chdir('C:\\Users\\u207-07\\Desktop\\python-labs\\TEMA1\\')
## 1.3 Продолжение работы с IDLE 10-12
import os
os.chdir('C:\\Users\\u207-07\\Desktop\\python-labs\\TEMA1\\')
import prb1
Как Вас зовут? Захар
Привет, Захар
//проверил работу файлов с инсутрукций в папке __pycache__//
## 1.4 Выполнение разных команд.
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.
## 1.5 Выполнение пункта 15
import tdemo_chaos
![](A.bmp)
![](B.bmp)

@ -0,0 +1,207 @@
## Отчет по теме 2
Бутко З.В. А-03-23
## Изучение простых объектов и операций.
~~~py
f1=16; f2=3
f1,f2
(16, 3)
f1;f2
16
3
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
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', 'numerator', 'real', 'to_bytes']
type(f2)
<class 'int'>
del f1,f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
~~~
## Правила наименования объектов
~~~py
gg1=1.6
hh1='Строка'
73sr=3
SyntaxError: invalid decimal literal
and=7
SyntaxError: invalid syntax
~~~
## Список ключевых слов и идентификаторов и их исследование.
~~~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']
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', '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', '_', '__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']
abs(-123)
123
Gg1=45
gg1,Gg1
(1.6, 45)
~~~
## Базовые типы объектов и работа со строками.
~~~py
bb1=True; bb2=False
bb1;bb2
True
False
type(bb1)
<class 'bool'>
type(ff1)
<class 'float'>
ss1='Это - строка символов'
ss1="Это - строка символов"
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
ss1b= 'Меня зовут: \n Бутко Захар'
print(sslb)
Меня зовут:
Бутко Захар
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]
'омсаот '
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
ss1=ss1[:4]+'='+ss1[5:]
~~~
## Изучение сложных типов объектов
~~~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]
spis1[1]='Список'
print(spis1)
[111, 'Список', (5-9j)]
len(spis1)
3
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.pop(1)
'Список'
spis2=[spis1,[4,5,6,7]]
spis2[0][1]
(5-9j)
spis2[0][1]=78
print(spis1)
[111, 78, 'New item']
print(spis1)
[111, 78, 'New item']
spis111=['Emil',175,72]
print(spis111)
['Emil', 175, 72]
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1= kort1+(ss1b,)
kort2=kort1[:2]+kort1[3:]
kort1.index(2)
4
kort1.count(222)
1
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
kort111=('Emil',175,72)
~~~
## Изучение объект-словаря
~~~py
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1['Orel']
56
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
{'Saratov': 120, 'Vologda': 45, 'Pskov': 78, 'Orel': 56}
{'Saratov': 120, 'Vologda': 45, 'Pskov': 78, 'Orel': 56}
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
dic2={1:'mean',2:'standart deviation',3:'correlation'}sorted(dic1.keys())
SyntaxError: invalid syntax
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]))
~~~
## Изучение объект-множества
~~~py
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz111={'Месси','Ронадо','Пеле'}
'Месси' in mnoz111
True
~~~
## ОК
~~~py
familia='Butko'
perem=familia[0]
perem
'B'
sp_kw=keyword.kwlist
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('nonlokal')
sp_kw.remove('nonlocal')
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=('Babidjon','Bukaky','Bugatti','Baranov')
kort_nam=('Babidjon','Bukaky','Bugatti','Baranov')
type(kort_nam)
<class 'tuple'>
add=('GG','WW')
kort_nam=kort_nam+add
kort_nam
('Babidjon', 'Bukaky', 'Bugatti', 'Baranov', 'GG', 'WW')
kort_nam.count('GG')
1
dict_bas={'переменные':[familia,perem],'список': [sp_kw],'кортеж': [kort_nam]}
~~~

@ -0,0 +1,791 @@
# Протокол по Теме 3
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Преобразование простых базовых типов объектов
### 2.1 Преобразование в логический тип с помощью функции bool
```py
>>> logiz1=bool(56)
>>> type(logiz1)
<class 'bool'>
>>> logiz1
True
>>> logiz2=bool(0)
>>> logiz2
False
>>> type(logiz2)
<class 'bool'>
>>> logiz3=bool("Beta")
>>> logiz3
True
>>> type(logiz3)
<class 'bool'>
>>> logiz4=bool("")
>>> logiz4
False
>>> type(logiz4)
<class 'bool'>
```
### 2.2 Преобразование в целое десятичное число / в вещественное число
```py
>>> tt1=int(198.6)
>>> tt1
198
>>> tt2=int("-76")
>>> tt2
-76
>>> tt3=int("B",16)
>>> tt3
11
>>> tt4=int("71",8)
>>> tt4
57
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
Объяснение:
int() ожидает увидеть целочисленное значение в строке, решение проблемы - int(float("98.76"))
```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) # 8-ричная сс
>>> shs1=hex(hh) # 16-ричная сс
>>> dv1
'0b1111011'
>>> vos1
'0o173'
>>> shs1
'0x7b'
>>> int(dv1, 2)
123
>>> int(vos1, 8)
123
>>> int(shs1, 16)
123
```
## 3. Преобразование более сложных базов типов объектов
### 3.1 Преобразование в строку
```py
>>> strk1=str(23.6)
>>> strk1
'23.6'
>>> strk2=str(logiz3)
>>> strk2
'True'
>>> strk3=str(["A","B","C"])
>>> strk3
"['A', 'B', 'C']"
>>> strk4=str(("A","B","C"))
>>> strk4
"('A', 'B', 'C')"
>>> strk5=str({"A":1,"B":2,"C":9})
>>> strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
### 3.2 Преобразование эл-ов объекта в список с помощью list()
```py
>>> spis1=list("Строка символов")
>>> spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2=list((124,236,-15,908))
>>> spis2
[124, 236, -15, 908]
>>> spis3=list({"A":1,"B":2,"C":9})
>>> spis3
['A', 'B', 'C']
```
Решение задания:
```py
>>> spis3=list({"A":1,"B":2,"C":9}.values())
>>> spis3
[1, 2, 9]
```
### 3.3 Преобразование элементов объектов в кортеж
```py
>>> kort7=tuple('Строка символов')
>>> kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>> kort8=tuple(spis2)
>>> kort8
(124, 236, -15, 908)
>>> kort9=tuple({"A":1,"B":2,"C":9})
>>> kort9
('A', 'B', 'C')
```
### 3.4 Удаление объектов
```py
>>> del strk5, kort8
>>> strk5
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined
>>> kort8
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined
```
Решение задания:
```py
>>> fio = 'Butko Z.V.'
>>> listfio=list(fio)
>>> listfio
['B', 'u', 't', 'k', 'o', ' ', 'Z', '.', 'V', '.']
>>> cortfio = tuple(listfio)
>>> cortfio
('B', 'u', 't', 'k', 'o', ' ', 'Z', '.', 'V', '.')
>>> strfio = str(cortfio)
>>> strfio
"('B', 'u', 't', 'k', 'o', ' ', 'Z', '.', 'V', '.')"
```
## 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'>
```
Если в целочисленном делении используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый
```py
>>> asas= 123.4 // 3
>>> asas
41.0
>>> type(asas)
<class 'float'>
```
### 4.5 Получение остатка от деления
```py
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
>>> 1245.4 % 4
1.400000000000091
```
Если в остатке от деления используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый
### 4.6 Возведение в степень
```py
>>> 14**3
2744
>>> e=2.7**3.6
>>> e
35.719843790663525
>>> 3**2.3
12.513502532843182
```
К комплексным числам можно применять следующие операции:
сложение
вычитание
умножение
деление
возведение в степень
и нельзя следующие:
целочисленное деление
остаток от деления
## 5. Операции с двоичными представлениями целых чисел
### 5.1 Двоичная инверсия (~)
```py
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
~x = -x - 1
### 5.2 Двоичное "И"
```py
>>> 7&9
1
>>> 7&8
0
```
### 5.3 Двоичное "Или"
```py
>>> 7|9
15
>>> 7|8
15
>>> 14|5
15
```
### 5.4 Двоичное исключающее "Или"
```py
>>> 14^5
11
```
### 5.5 Двоичное исключающее "Или" (Влево или вправо)
```py
>>> h=14
>>> g=h<<2
>>> g
56
>>> g1=h>>1
>>> g1
7
>>> g2=h>>2
>>> g2
3
```
Решение задания
```py
>>> a = 197
>>> b = 154
>>> bin(a)[2:]
'11000101'
>>> bin(b)[2:]
'10011010'
>>> a & b
128
>>> a | b
223
>>> a ^ b
95
```
## 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
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*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'
```
%g - placeholder для чисел
%s - placeholder для строк
```py
>>> 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-=3
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> zz
-10
>>> stroka
'Система регулирования'
```
### 7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
>>> qw = 8
>>> qw *= 3
>>> qw
24
>>> qw /= 4
>>> qw
6.0
```
### 7.4 Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```py
>>> qw
6.0
>>> qw //=2
>>> qw
3.0
>>> qw = 8
>>> qw%=2
>>> qw
0
>>> qw=4
>>> qw **= 3
>>> qw
64
```
### 7.5. Множественное присваивание
```py
>>> w=v=10
>>> w,v
(10, 10)
>>> n1,n2,n3=(11,-3,'all')
>>> n1,n2,n3
(11, -3, 'all')
```
Решение задания:
Со списком работает поэлементно, со строками посимвольно, с множествами работает, но не в той очередности присваивания, со словарем работает, но нужно знать что присваивать - ключи либо значения
## 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
```
Решение задания:
```py
>>> (a == b) and ('Orel' in dic1) or ('Pskov' in dic1)
False
>>> (a > b) or 'pen' in mnoz1
True
>>> 'cap' in mnoz1 or a == b
False
```
### 8.4. Проверка ссылок переменных на один и тот же объект
```py
>>> w=v=10
>>> w is v
True
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1 is v1
False
```
В начале присваивания двум переменным w и v значения 10 мы храним обе переменные в одной ячейке памяти, затем мы по отдельности присвоили двум этим переменным списки, они хоть и одинаковые, но всё равно переменные по отдельности претерпели изменения -> хранятся в разных ячейках памяти
## 9. Операции с объектами, выполняемые с помощью методов
```py
>>> stroka='Микропроцессорная система управления'
>>> dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__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']
```
### 9.1 Методы для работы со строками
```py
>>> stroka.find('пр')
5
>>> stroka.count("с")
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ')
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22)
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```
```py
>>> 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, 'blablabla', 7.0, (1, 2, 3), True]
>>> dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__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)
7.0
>>> spsk.append('c')
>>> spsk
[1, 'blablabla', (1, 2, 3), True, 'c']
>>> spsk.insert(2,'a')
>>> spsk
[1, 'blablabla', 'a', (1, 2, 3), True, 'c']
>>> spsk.count('a')
1
```
1.методом pop() удалили 2-ой эл-т списка (2-ой начиная с нуля)
2.добавили 'c' в конец списка (метод append() всегда добавляет элемент в конец списка)
3.методом insert() на позицию 2 (также начиная с нуля) вставили строку 'a'
4.методом count() посчитали количество вхождений элемента 'a' в список
### 9.3. Самостоятельно создайте кортеж и изучите применение его методов.
```py
>>> mytuple = ('abc', 23, (1, 2, 3), True)
>>> mytuple.count(23)
1
>>> mytuple.index(23)
1
```
### 9.4.Cамостоятельно изучите методы словарей и множеств.
Словари
```py
>>> student = {
"name": "Zakhar",
"age": 19,
"city": "Moscow",
"courses": ["Math", "Physics"],
"gpa": 2.74
}
>>> student
{'name': 'Zakhar', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 2.74}
>>> student.get("name")
'Zakhar'
>>> student.keys()
dict_keys(['name', 'age', 'city', 'courses', 'gpa'])
>>> student.values()
dict_values(['Zakhar', 19, 'Moscow', ['Math', 'Physics'], 2.74])
>>> student.update({"gpa": 4.5, "lazy": True})
>>> student
{'name': 'Zakhar', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5, 'lazy': True}
>>> student.pop("lazy")
True
>>> student
{'name': 'Zakhar', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5}
>>> student.clear()
>>> student
{}
```
Множества
```py
>>> A = {1, 2, 3, 4, 5}
>>> A.add(6)
>>> A
{1, 2, 3, 4, 5, 6}
>>> A.remove(4)
>>> A
{1, 2, 3, 5, 6}
>>> A.pop()
1
>>> A
{2, 3, 5, 6}
>>> A.clear()
>>> A
set()
```

@ -0,0 +1,139 @@
# Общее контрольное задание по теме 3
Бутко Захар Владимирович, А-03-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
>>> a = int ('45', 8)
>>> a
37
```
2.
```py
>>> D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
>>> D
{'усиление': 23, 'запаздывание': 12, 'постоянная времени': 78}
>>> D_keys, D_values = list(D.keys()), list(D.values())
>>> D_keys
['усиление', 'запаздывание', 'постоянная времени']
>>> D_values
[23, 12, 78]
>>> D_cort = tuple(D_keys + D_values)
>>> D_cort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Список изменяемый, кортеж неизменяемыйСписок изменяемый, кортеж неизменяемый
3.
```py
>>> ((1768 // 24.8) % 3)**2.4
5.278031643091577
```
4.
```py
>>> (~(13 & 27)^14) << 2
-32
```
5.
```py
>>> spis = ['колебат', 'колебат', 'колебат', 'колебат']
>>> spis
['колебат', 'колебат', 'колебат', 'колебат']
>>> check = 'аткол' in (spis[2] + spis[3])
>>> check
True
```
6.
```py
>>> wqw = dir(D)
>>> wqw
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> D_values, D_keys = D.values(), D.keys()
>>> D_values
dict_values([23, 12, 78])
>>> D_keys
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
```
7.
```py
>>> stroke = "Создать объект - символьную строку с текстом данного предложения"
>>> stroke
'Создать объект - символьную строку с текстом данного предложения'
>>> only_words = stroke.split(' ')
>>> only_words
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> index_of_replace_symbol = only_words.index('-')
>>> index_of_replace_symbol
2
>>> only_words[index_of_replace_symbol] = ','
>>> only_words
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> only_words.remove('данного')
>>> only_words
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,69 @@
# Тест по модулю 1
Бутко Захар, А-03-23
## Задание
Вариант 7
M1_7
1) Можно ли работать со средой без использования интерактивной оболочки IDLE?
2) Создайте объект-словарь с 7 элементами: ключи - названия (аббревиатура) вузов, значения - число студентов (задать произвольно). Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Напишите инструкцию, позволяющую вычислить общее число студентов в двух указываемых вузах из словаря.
4) Преобразуйте значения из словаря в список и, затем, список - в строку. Отобразите полученные объекты. Получите новый список, разделением строки на части по разделителю: ",".
5) Используя операцию подстановки, отобразить рассчитанное число студентов в 2-х вузах по шаблону: "Число студентов в <название вуза 1> и <название вуза 2> =:".
## Решение
### Задача 1
Да
### Задача 2
```py
# Создание словаря с вузами и числом студентов
universities = {
'МГУ': 35000,
'СПбГУ': 28000,
'МФТИ': 7500,
'ВШЭ': 42000,
'МГТУ': 25000,
'МИФИ': 8500,
'РУДН': 32000
}
print(type(universities))
<class 'dict'>
print(dir(universities))
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
```
### Задача 3
```py
students = universities['МГУ'] + universities['СПбГУ']
print(students)
63000
```
### Задача 4
```py
students_list = list(universities.values())
print(students_list)
[35000, 28000, 7500, 42000, 25000, 8500, 32000]
students_str = str(students_list)
print(students_str)
'[35000, 28000, 7500, 42000, 25000, 8500, 32000]'
new_list = students_str.split(",")
print(new_list)
['[35000', ' 28000', ' 7500', ' 42000', ' 25000', ' 8500', ' 32000]']
```
### Задача 5
```py
print("Число студентов в %s и %s = %d" % ('МГУ', 'СПбГУ', students))
Число студентов в МГУ и СПбГУ = 63000
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,347 @@
# Протокол по Теме 4
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Стандартные функции
### 2.1 Функция round – округление числа с заданной точностью
```py
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> round(123.456)
123
```
### 2.2. Функция range
```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]
```
### 2.3. Функция zip
```py
>>> qq = ['Markov','Butko','Ogarkov','Krishtul']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x0000026369CB4400>
>>> tuple(ff)
((76, 'Markov'), (85, 'Butko'), (94, 'Ogarkov'), (103, 'Krishtul'))
>>> ff[0]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
ff[0]
TypeError: 'zip' object is not subscriptable
```
Нельзя обращаться с указанием индекса, т.к. объект является итерируемым класса zip
### 2.4 Функция eval
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
>>> dan
-131.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(-14)
14
>>> pow(2, 3)
8
>>> max(1, 2, 3)
3
>>> min(1, 2, 3)
1
>>> sum([1, 2, 3])
6
>>> divmod(5, 3)
(1, 2)
>>> len(range(0, 15+1))
16
>>> map_test = map(lambda x: round(x, 1), [12.1245, 14.125234, 534.222])
>>> list(map_test)
[12.1, 14.1, 534.2]
```
## 3. Функции из стандартного модуля math
```py
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', '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', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
>>> math.sin(90)
0.8939966636005579
>>> math.acos(0)
1.5707963267948966
>>> math.degrees(math.pi)
180.0
>>> math.radians(180)
3.141592653589793
>>> math.exp(1)
2.718281828459045
>>> 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
>>> math.sin((2*math.pi/7) + math.exp(0.23))
0.8334902641414562
```
## 4. Функции из модуля cmath, c комплексными числами
```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', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', '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.
```
```py
>>> random.random() # вещественное число от 0.0 до 1.0
0.12874671061082976
>>> random.uniform(5, 15) # вещественное число от 5.0 до 15.0
13.134575401523493
>>> random.randint(1, 100) # целое число от 1 до 100
32
>>> random.gauss(0, 1) # mu - среднее значение, sigma - стандартное отклонение
-0.07800637063087972
>>> random.choice([1, 2, 3, 4]) # случайный выбор элемента из списка, кортежа, строки и т.д.
3
>>> My_Numbers = [1, 2, 3, 4]
>>> random.shuffle(My_Numbers)
>>> My_Numbers
[1, 2, 4, 3]
>>> random.sample(My_Numbers, 2) # случайный выбор двух элементов из My_Numbers
[4, 1]
>>> random.betavariate(2, 5)
0.16541871582286427
>>> random.gammavariate(2, 1)
0.6551814424330216
```
## 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()
>>> c1
1760283309.499735
>>> c2=time.time()-c1
>>> c2
10.906989812850952
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=15, tm_min=35, tm_sec=35, tm_wday=6, tm_yday=285, tm_isdst=0)
>>> dat.tm_mon
10
>>> time.asctime((2024, 12, 10, 18, 7, 14, 1, 345, 0)) #год, месяц, день, час, минута, секунда, день недели, день года, летнее время
'Tue Dec 10 18:07:14 2024'
>>> time.ctime(time.time())
'Sun Oct 12 18:36:59 2025'
>>> time.mktime((2025, 12, 25, 15, 30, 0, 0, 0, 0))
1766665800.0
```
## 7. Графические функции
```py
>>> import pylab
>>> x=list(range(-3,55,4))
>>> x
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
>>> t=list(range(15))
>>> t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000002630D20D340>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show()
```
**Результат:**
<image src="Figure_1.png">
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000026312246130>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x00000263122463D0>]
>>> pylab.show()
```
**Результат:**
<image src="Figure_2.png">
```py
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000002631062D130>, <matplotlib.patches.Wedge object at 0x000002631062D1F0>, <matplotlib.patches.Wedge object at 0x000002631063B970>, <matplotlib.patches.Wedge object at 0x000002631063BDF0>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()
```
**Результат:**
<image src="diag.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="hist.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="hist2.png">
## 8. Статистический модуль statistics
```py
>>> import statistics
>>> numbers = [1,2,3,4,5,6,7,8,9]
>>> statistics.mean(numbers)
5
>>> statistics.median(numbers)
5
>>> statistics.mode(numbers)
1
```

@ -0,0 +1,64 @@
# Общее контрольное задание по теме 4
Бутко Захар Владимирович, А-03-23
## Задание
1.Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
2.Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
3.Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
4.Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
5.Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
6.Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
import cmath
import math
import time
import random
import string
# 1
>>> first = round(cmath.phase(0.2+0.8j), 2) * 20
>>> divmod(math.floor(first), 3)
(8, 2)
# 2
>>> moscow_time = time.localtime()
>>> string_with_time = f"{moscow_time.tm_hour}:{moscow_time.tm_min}"
>>> print(string_with_time, type(moscow_time))
19:1 <class 'time.struct_time'>
# 3
>>> days_of_week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']
>>> random.sample(days_of_week, 3)
['Четверг', 'Среда', 'Понедельник']
# 4
>>> numbers = list(range(14, 32+1, 3))
>>> random.choice(numbers)
20
#5
>>> N = round(random.normalvariate(15, 4))
>>> N
14
>>> gen_list = random.choices(string.ascii_uppercase, k=N)
>>> gen_list
['A', 'N', 'V', 'L', 'N', 'U', 'O', 'V', 'N', 'R', 'L', 'Z', 'Q', 'R']
#6
>>> current_time = time.time()
>>> previous_time = time.mktime(moscow_time)
>>> time_interval_minutes = (current_time - previous_time) / 60
>>> time_interval_minutes
1.379131011168162
```

@ -0,0 +1,30 @@
# Тест по модулю 4
Бутко Захар, А-03-23
## Задание
Вариант 19
Напишите инструкцию запоминания в переменной текущего регионального времени. Напишите инструкцию превращения этого времени в символьную строку. Отобразите результат на экране. Создайте множество с 5 элементами – случайными целыми числами из диапазона значений от -23 до 57. Подсчитайте корень квадратный из суммы элементов этого множества и отобразите на экране в виде: «результат = ХХХ» с округлением числа до одного знака после точки.
## Решение
```py
import datetime
current_time = datetime.datetime.now()
time_string = current_time.strftime("%Y-%m-%d %H:%M:%S")
print("Текущее время:", time_string)
Текущее время: 2025-10-24 12:26:05
import math
numbers_set = set(range(-23, 58, 16))
print("Множество:", numbers_set)
Множество: {-23, 41, 9, -7, 25, 57}
print(sum(numbers_set))
102
result = math.sqrt(sum_elements)
result
10.099504938362077
print(math.ceil(result))
11
```

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

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

После

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

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

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

После

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

@ -0,0 +1,396 @@
# Протокол по Теме 5
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Управляющая инструкция if
```py
>>> porog = 12
>>> rashod1 = 10
>>> rashod2 = 7
>>> if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
>>> dohod
-8
>>> if rashod1>=3 and rashod2==4:
dohod=rashod1
if rashod2==porog or rashod1<rashod2:
dohod=porog
>>> dohod
-8
>>> porog
12
```
### Операция с множественным ветвлением линий потока
```py
>>> if porog==3:
dohod=1
elif porog==4:
dohod=2
elif porog==5:
dohod=3
else:
dohod=0
>>> dohod
0
```
### Условные инструкции в одну строку
```py
>>> dohod=2 if porog>=4 else 0
>>> dohod
2
>>> if porog>=5 : rashod1=6; rashod2=0
>>> rashod1
6
>>> rashod2
0
```
## 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]
>>> 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]
```
### 3.3
```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)
>>> ss
531
>>> sps5
[16, 30, 74, 91, 77, 97, 40, 38, 8, 60]
>>> for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
>>> ss
578
>>> for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
>>> ss
607
>>> sps5
[16, 30, 74, 91, 77, 97, 40, 38, 8, 60, 47, 29]
```
### 3.4. Пример с символьной строкой
```py
>>> stroka='Это – автоматизированная система'
>>> stroka1=""
>>> for ss in stroka:
stroka1+=" "+ss
>>> stroka1
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
```
### 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="Figure_2.png">
## 4.Управляющая инструкция while
### 4.1. Цикл со счетчиком.
```py
>>> rashod=300
>>> while rashod:
print("Расход=",rashod)
rashod-=50
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```
### 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
```
сигнал на выходе инерционного звена из списка sps2
```py
>>> pylab.figure(figsize=(10, 5))
<Figure size 1000x500 with 0 Axes>
>>> pylab.plot(sps2, 'b-', linewidth=2, label='Выходной сигнал')
[<matplotlib.lines.Line2D object at 0x000002630D0A6760>]
>>> pylab.title('Сигнал на выходе инерционного звена')
Text(0.5, 1.0, 'Сигнал на выходе инерционного звена')
>>> pylab.xlabel('Время (дискретные моменты i)')
Text(0.5, 0, 'Время (дискретные моменты i)')
>>> pylab.ylabel('Значение сигнала')
Text(0, 0.5, 'Значение сигнала')
>>> pylab.grid(True)
>>> pylab.legend()
<matplotlib.legend.Legend object at 0x000002630D08B4C0>
>>> pylab.show()
```
**Результат:**
<image src="Figure_1.png">
### 4.3 Определение, является ли число простым
```py
>>> chislo=267
>>> kandidat =chislo // 2
>>> while kandidat > 1:
if chislo%kandidat == 0: # Остаток от деления
print(chislo, ' имеет множитель ', kandidat)
break # else выполняться не будет
kandidat -= 1
else: # При завершении цикла без break
print(chislo, ' является простым!')
267 имеет множитель 89
```
```py
>>> for i in range(250,300+1):
chislo=i
kandidat=chislo//2
while kandidat>1:
if chislo%kandidat==0:
print(chislo,' имеет множитель ',kandidat)
break
kandidat -=1
else:
print(chislo,' является простым.')
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
>>> number = 0
>>> while number < 10:
number += 1
if number % 2 == 0: # Если число четное
continue # Пропускаем оставшуюся часть цикла
print(f"Нечетное число: {number}")
Нечетное число: 1
Нечетное число: 3
Нечетное число: 5
Нечетное число: 7
Нечетное число: 9
```

@ -0,0 +1,120 @@
# Общее контрольное задание по теме 5
Бутко Захар Владимирович, А-03-23
## Задание
1.Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
2.Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
3.Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
### Задание №1
```py
>>> alphabet="abcdefghijklmnopqrstuvwxyz"
>>> stroka="My name is Zakhar. I am a student of MPEI"
>>> for cur_ind in range(len(stroka)):
low_stroka=stroka.lower()
letter=low_stroka[cur_ind]
if not letter in alphabet:
continue
else:
print("Порядковый номер буквы ",letter," - ", alphabet.index(letter)+1)
Порядковый номер буквы m - 13
Порядковый номер буквы y - 25
Порядковый номер буквы n - 14
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
Порядковый номер буквы s - 19
Порядковый номер буквы z - 14
Порядковый номер буквы a - 9
Порядковый номер буквы k - 11
Порядковый номер буквы h - 9
Порядковый номер буквы a - 20
Порядковый номер буквы r - 1
Порядковый номер буквы i - 9
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы a - 1
Порядковый номер буквы s - 19
Порядковый номер буквы t - 20
Порядковый номер буквы u - 21
Порядковый номер буквы d - 4
Порядковый номер буквы e - 5
Порядковый номер буквы n - 14
Порядковый номер буквы t - 20
Порядковый номер буквы o - 15
Порядковый номер буквы f - 6
Порядковый номер буквы m - 13
Порядковый номер буквы p - 16
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
```
### Задание 2
```py
>>> text="Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."
>>> text=text.replace('.','');text=text.replace(',','');text=text.replace('(','');text=text.replace(')','');text=text.replace(':','');text=text.replace('–','');
>>> text
'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
>>> text=text.replace(' ',' ')
>>> text_list = text.split()
>>> text_list
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
>>> word1='как'
>>> word2='пупуня'
>>> if word1 in text_list:
print("Слово '",word1,"' найдено в списке слов.")
else:
print("Слово '",word1,"' не найдено в списке слов.")
Слово ' как ' найдено в списке слов.
>>> if word2 in text_list:
print("Слово '",word2,"' найдено в списке слов.")
else:
print("Слово '",word2,"' не найдено в списке слов.")
Слово ' пупуня ' не найдено в списке слов.
```
### Задание 3
```py
>>> sr_ball_summer=[3.35,4,3.5,3.5]
>>> stud_summer=['Markov','Butko','Ogarkov','Stepanishev']
>>> stud_winter=['Butko','Ogarkov','Markov','Stepanishev']
>>> sr_ball_winter=[4,4.25,4.5,3]
>>> search_surname = input("Введите фамилию студента: ")
Введите фамилию студента: Butko
>>> print("Средний балл студента с фамилией",search_surname,"по зимней сессии -", sr_ball_winter[stud_winter.index(search_surname)], ", а по летней -",sr_ball_summer[stud_summer.index(search_surname)])
Средний балл студента с фамилией Butko по зимней сессии - 4 , а по летней - 4
```

Двоичные данные
TEMA6/11.png

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

После

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

Двоичные данные
TEMA6/12.png

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

После

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

Двоичные данные
TEMA6/1234567.png

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

После

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

@ -0,0 +1,335 @@
# Протокол по Теме 6
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 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
print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
print()
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
### 2.3 Вывод с использованием метода write объекта sys.stdout
Объект stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. Обычно это – экран дисплея. Объект находится в модуле sys, который надо импортировать
```py
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3.Ввод данных с клавиатуры.
```py
>>> psw
'12345'
>>> type(psw)
<class 'str'>
>>> while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4.Ввод-вывод при работе с файлами.
### 4.1. Функции для работы с путем к файлу.
```py
>>> import os
>>> os.getcwd()
'/Users/zakhar/Documents'
>>> Butko = os.getcwd()
>>> print(Butko)
'/Users/zakhar/Documents'
```
#### 4.2
```py
>>> os.chdir("/Users/zakhar/Desktop/python-labs")
>>> os.getcwd()
'/Users/zakhar/Desktop/python-labs'
>>> os.mkdir("aa") #Создание папки в рабочем каталоге
>>> os.rmdir("aa") #Удаление папки
>>> os.path.isdir("/Users/zakhar/Desktop/python-labs") #Проверка существует ли каталог
True
>>> os.path.abspath("OPLATA.DBF")
'/Users/zakhar/Desktop/python-labs/OPLATA.DBF'
>>> fil=os.path.abspath("OPLATA.DBF")
>>> fil
'/Users/zakhar/Desktop/python-labs/OPLATA.DBF'
>>> drkt=os.path.dirname(fil)
>>> drkt
'/Users/zakhar/Desktop/python-labs'
>>> os.path.basename(fil)
'OPLATA.DBF'
>>> os.path.split(fil)
('/Users/zakhar/Desktop/python-labs', 'OPLATA.DBF')
>>> os.path.exists(fil)
True
>>> os.path.isfile(fil)
True
>>> os.path.isfile(os.path.dirname(fil)+'fil1.txt')
False
```
### 4.3.Открытие файла для записи или чтения данных – функция open.
```py
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
>>> drkt
'/Users/zakhar/Desktop/python-labs'
>>> 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']
>>> fp=open(drkt+'\\zapis1.txt','w')
>>> fp=open('zapis1.txt','w')
>>> fp
<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='UTF-8'>
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> drkt
'/Users/zakhar/Desktop/python-labs'
>>> fp.close()
```
w – запись с созданием нового файла или перезапись существующего файла,
w+ - чтение и запись/перезапись файла,
r – только чтение (это значение - по умолчанию),
r+ - чтение и/или запись в существующий файл,
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
a+ - то же, что и в «a», но с возможностью чтения из файла.
### 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()
```
**Результат:**
<image src="1234567.png">
```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()
>>> gh=open('zapis5.txt','w')
>>> for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
>>> gh.close()
```
**Результат:**
<image src="12.png">
### 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()
>>> print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
>>> for i in range(len(sps1)):
sps1[i] = int(sps1[i])
>>> sps1==sps
True
```
### 4.7. Чтение информации из файла с помощью метода read.
```py
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> print(stroka1)
[1, 2, 3, 4]
>>> print(stroka2)
[5, 6, 7, 8]
[9, 10, 11, 12]
```
### 4.8. Чтение информации с помощью методов readline и readlines.
```py
>>> fp=open('zapis3.txt')
>>> strok1 = fp.readline()
>>> strok1
'[1, 2, 3, 4]\n'
>>> print(strok1)
[1, 2, 3, 4]
>>> fp.close()
>>> fp=open('zapis3.txt');stroka1=fp.readlines()
>>> print(stroka1)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
>>> fp.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()
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>> fp.close()
>>> mnoz2 == mnoz1
True
>>> mnoz1
{'book', 'table', 'pen', 'iPhone'}
>>> mnoz2
{'table', 'book', 'pen', 'iPhone'}
>>> sps3
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
>>> 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()
```
## 5.Перенаправление потоков ввода и вывода данных.
```py
>>> import sys
>>> vr_out=sys.stdout #Запоминаем текущий поток вывода
>>> fc=open('Stroka.txt','w') #Откроем файл вывода
>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
>>> sys.stdout=vr_out #Восстановление текущего потока
>>> print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
>>> fc.close()
>>> 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:
break
запись строки в файл
>>> fd.close()
>>> sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода
```

@ -0,0 +1,109 @@
# Общее контрольное задание по теме 5
Бутко Захар Владимирович, А-03-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1.Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
2.Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3.Записывается кортеж в бинарный файл.
4.Записывается в этот же файл список и закрывается файл.
5.Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6.Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
7.Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
### Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
```py
>>> import random as rn
>>> kort = tuple(str(rn.randint(6,56)) for _ in range(126))
>>> kort
('35', '56', '22', '10', '20', '39', '10', '40', '31', '10', '45', '35', '47', '29', '50', '7', '54', '55', '49', '23', '41', '47', '12', '49', '17', '23', '17', '34', '19', '28', '16', '45', '48', '17', '8', '9', '33', '37', '25', '37', '55', '25', '41', '41', '29', '24', '29', '36', '9', '31', '24', '13', '14', '54', '28', '20', '7', '25', '45', '18', '17', '32', '21', '49', '41', '14', '23', '45', '10', '26', '51', '19', '14', '56', '44', '33', '50', '32', '16', '35', '15', '29', '39', '30', '46', '27', '31', '37', '20', '39', '50', '29', '31', '17', '53', '49', '42', '50', '27', '33', '47', '39', '48', '43', '14', '22', '29', '29', '26', '51', '50', '42', '36', '43', '39', '21', '55', '6', '19', '52', '38', '52', '32', '50', '29', '27')
```
### Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
```py
>>> spis = ['Бутко','Марков','Грудинин','Степанищев','Криштул']
```
### Записывается кортеж и список в бинарный файл.
```py
>>> import pickle
>>> fp=open('task.bn','wb')
>>> pickle.dump(kort,fp)
>>> pickle.dump(spis,fp)
>>> fp.close()
>>> fp=open('task.bn','rb')
>>> obj1=pickle.load(fp)
>>> obj2=pickle.load(fp)
>>> fp.close()
>>> obj1 == kort; obj2 == spis
True
True
>>> obj1
('35', '56', '22', '10', '20', '39', '10', '40', '31', '10', '45', '35', '47', '29', '50', '7', '54', '55', '49', '23', '41', '47', '12', '49', '17', '23', '17', '34', '19', '28', '16', '45', '48', '17', '8', '9', '33', '37', '25', '37', '55', '25', '41', '41', '29', '24', '29', '36', '9', '31', '24', '13', '14', '54', '28', '20', '7', '25', '45', '18', '17', '32', '21', '49', '41', '14', '23', '45', '10', '26', '51', '19', '14', '56', '44', '33', '50', '32', '16', '35', '15', '29', '39', '30', '46', '27', '31', '37', '20', '39', '50', '29', '31', '17', '53', '49', '42', '50', '27', '33', '47', '39', '48', '43', '14', '22', '29', '29', '26', '51', '50', '42', '36', '43', '39', '21', '55', '6', '19', '52', '38', '52', '32', '50', '29', '27')
>>> obj2
['Бутко', 'Марков', 'Грудинин', 'Степанищев', 'Криштул']
>>> if(obj1 == kort and obj2 == spis):
print("Объекты схожи")
Объекты схожи
```
### Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
```py
>>> vocab = {}
>>> for i in range(0,len(kort),5):
vocab['группа №'+str(i//5)] = list(kort[i:i+5])
```

Двоичные данные
TEMA7/Figure_1-2.png

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

После

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

@ -0,0 +1,514 @@
# Протокол по Теме 7
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Создание пользовательской функции.
### 2.1. Первый пример: функция – без аргументов.
```py
def uspeh():
"""Подтверждение успеха операции"""
print('Выполнено успешно!')
uspeh()
Выполнено успешно!
type(uspeh)
<class 'function'>
dir(uspeh)
['__annotate__', '__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__']
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
```
### 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) #Сложение списков
q
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 2.5. Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
```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)
spsy
[0.0, 0.047619047619047616, 0.09297052154195011, 0.13616240146852393, 0.177297525208118, 0.21647383353154095, 0.25378460336337233, 0.2893186698698784, 0.3231606379713128, 0.35539108378220263, 0.38608674645924057, 0.4153207109135625, 0.4431625818224405, 0.46967864935470527, 0.4949320470044812, 0.5189829019090297, 0.5418884780085997, 0.5637033123891426, 0.5844793451325168, 0.6042660429833493, 0.6231105171269993, 0.6410576353590469, 0.6581501289133781, 0.6744286942032173, 0.6899320897173498, 0.7046972283022379, 0.7187592650497504, 0.7321516809997624, 0.7449063628569166, 0.7570536789113491, 0.768622551344142, 0.7796405250896592, 0.7901338334187231, 0.800127460398784, 0.8096452003797943, 0.8187097146474231, 0.8273425853784983, 0.8355643670271411, 0.8433946352639439, 0.8508520335847084, 0.8579543176997223, 0.8647183978092594, 0.8711603788659613, 0.8772955989199631, 0.88313866563806, 0.8887034910838667, 0.8940033248417778, 0.899050785563598, 0.9038578910129503, 0.9084360866790003, 0.9127962730276193, 0.9169488314548756, 0.9209036490046435, 0.9246701419091843, 0.9282572780087468, 0.9316735981035684, 0.9349272362891128, 0.9380259393229645, 0.94097708506949, 0.9437877000661808, 0.9464644762535056, 0.9490137869081006, 0.9514417018172386, 0.9537540017307035, 0.9559561921244795, 0.958053516309028, 0.96005096791336, 0.9619533027746285, 0.963765050261551, 0.9654905240586201, 0.9671338324367811, 0.9686988880350297, 0.9701894171762188, 0.971608968739256, 0.9729609226088152, 0.9742484977226811, 0.9754747597358867, 0.976642628319892, 0.9777548841141828, 0.9788141753468407, 0.9798230241398483, 0.9807838325141413, 0.981698888108706, 0.982570369627339, 0.9834003520260372, 0.9841908114533686, 0.9849436299555892, 0.9856605999577039, 0.9863434285311466, 0.9869937414582349, 0.9876130871030808, 0.9882029400981722, 0.988764704855402, 0.9892997189099068, 0.9898092561046732, 0.9902945296234982, 0.9907566948795221, 0.9911968522662116, 0.9916160497773444, 0.9920152855022327, 0.9923955100021263]
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
<Figure size 1000x500 with 0 Axes>
plt.plot(spsy, 'b-', linewidth=2)
[<matplotlib.lines.Line2D object at 0x000001C53CE7FB60>]
plt.title('Выходной сигнал инерционной системы')
Text(0.5, 1.0, 'Выходной сигнал инерционной системы')
plt.xlabel('Время')
Text(0.5, 0, 'Время')
plt.ylabel('Амплитуда')
Text(0, 0.5, 'Амплитуда')
plt.grid()
plt.show()
```
**Результат:**
<image src="Figure_1-2.png">
## 3. Функции как объекты.
### 3.1. Получение списка атрибутов объекта-функции.
```py
dir(inerz)
['__annotate__', '__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
b1234
[[1, 2], [-1, -2], [0, 2], [-1, -1]]
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
```
### 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#75>", line 1, in <module>
func2(kort)
File "<pyshell#71>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
```
## 5. Специальные типы пользовательских функций
### 5.1. Анонимные функции.
```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. Функции-генераторы.
```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#92>", 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
def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
res=func8(glb)
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
res=func8(glb)
File "<pyshell#97>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
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. Выявление локализации объекта с помощью функций locals() и globals() из builtins.
```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__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', '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__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', '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', 'loc1'])
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__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', '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', 'loc1'])
kk
85
```
### 6.4. Большой пример – моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
```py
import math
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1,T,k2,Xm,A,F,N=1.5,0.1,0.8,0.2,1.0,10,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])
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
print("Входной сигнал:", vhod)
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
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.6015253440351906, 1.096895249493391, 0.14963802472452992, -1.4055603261317517, -2.5023946767056238, -1.3746543603374242, 0.7777548679354078, 2.3930377777245795, 1.589728806501168, -0.18435823514401645, -1.262236228089791, -0.1499221532340092, 1.1432335494953787, 0.9284774407601177, -1.092316839336339, -3.1053851997702706, -1.9708827095800603, 1.4179982683905918, 4.178467267009747, 2.8704598657124154, -0.9554762632284055, -3.6907891747930823, -2.0460936031856565, 1.5516985830908399, 3.050939390566601, 0, -3.803109375076022, -3.7144283665966316, 1.1278012079884292, 6.1915501329945455, 5.067998743352809, -1.4695723076381413, -7.114338992237411, -5.15766901200028, 2.1332451522780023, 6.998570550403378, 3.258668282071149, -4.636620081834843, -7.5743517324240575, -0.7423964478503129, 8.407306390701049, 9.309658304307437, -0.5482852890529228, -11.499859882265268, -10.552533675209967, 2.0050221789726197, 13.153568445829352, 9.570130082024441, -5.115533432227267]
```

@ -0,0 +1,117 @@
# Общее контрольное задание по теме 7
Бутко Захар Владимирович, А-03-23
## Задание
1.Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
2.Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3.Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
### 1 задание
```py
def signal_delay(current_input, delay_time, output_history, input_history):
"""
Расчет выходного сигнала устройства задержки
current_input - текущее значение входного сигнала
delay_time - время задержки
output_history - история выходных значений
input_history - история входных значений
"""
if len(input_history) < delay_time:
return 0
else:
return input_history[-delay_time]
delay = 3
output_signal = []
input_signal = [1, 2, 3, 4, 5, 6, 7]
input_history = []
for x in input_signal:
input_history.append(x)
y = signal_delay(x, delay, output_signal, input_history)
output_signal.append(y)
print("Входной сигнал:", input_signal)
Входной сигнал: [1, 2, 3, 4, 5, 6, 7]
print("Выходной сигнал (задержка 3):", output_signal)
Выходной сигнал (задержка 3): [0, 0, 1, 2, 3, 4, 5]
```
### 2 задание
```py
def raschet_giostogrammy(viborka, kol_int):
minn = min(viborka)
maxx = max(viborka)
shirina_intervala = (minn - maxx) / kol_int
w = [0] * kol_int
for znachenie in viborka:
num_int = int((znachenie - maxx) / shirina_intervala)
if num_int == kol_int:
num_int = kol_int - 1
w[num_int] += 1
print("Гистограмма:")
for i in range(kol_int):
start = maxx + i * shirina_intervala
end = maxx + (i + 1) * shirina_intervala
print(f"[{start:.2f}, {end:.2f}]: {w[i]}")
return w
import random
rand = [random.gauss(0, 1) for _ in range(100)]
kol_int = 5
res = raschet_giostogrammy(rand, kol_int)
Гистограмма:
[2.17, 1.24]: 12
[1.24, 0.32]: 26
[0.32, -0.61]: 33
[-0.61, -1.54]: 22
[-1.54, -2.47]: 7
```
### 3 задание
```py
anonim_func = lambda b1, b2, X: b1 + b2 * X
print(anonim_func (2, 3, 5))
17
```

@ -0,0 +1,8 @@
def read_number_list(filename):
number_list = []
with open(filename, 'r') as file:
for line in file:
numbers = line.strip().split()
for num in numbers:
number_list.append(float(num))
return number_list

@ -0,0 +1,22 @@
import math
def calculate_correlation(list1, list2):
if not list1 or not list2:
print("Ошибка: Один или оба списка пусты.")
return None
n = min(len(list1), len(list2)) # Используем меньшую длину
sum_x = sum(list1[:n])
sum_y = sum(list2[:n])
sum_x_squared = sum(x**2 for x in list1[:n])
sum_y_squared = sum(y**2 for y in list2[:n])
sum_xy = sum(list1[i] * list2[i] for i in range(n))
numerator = n * sum_xy - sum_x * sum_y
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
if denominator == 0:
print("Предупреждение: Деление на ноль при вычислении корреляции.")
return None
return numerator / denominator

@ -0,0 +1,14 @@
import Mod11
import Mod22
if __name__ == "__main__":
file1_name = input("Введите имя первого файла: ")
file2_name = input("Введите имя второго файла: ")
list1 = Mod11.read_number_list(file1_name)
list2 = Mod11.read_number_list(file2_name)
if list1 is not None and list2 is not None:
correlation = Mod22.calculate_correlation(list1, list2)
if correlation is not None:
print(f"Коэффициент корреляции: {correlation:.3f}")

@ -0,0 +1,3 @@
1.0 2.5 3.3
4.1 5
6.7

@ -0,0 +1,3 @@
2.1 3.0
4.2 5.5 6.1
7.8

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

@ -0,0 +1,77 @@
# Общее контрольное задание по теме 8
Бутко Захар Владимирович, А-03-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
```py
Mod11
def read_number_list(filename):
number_list = []
with open(filename, 'r') as file:
for line in file:
numbers = line.strip().split()
for num in numbers:
number_list.append(float(num))
return number_list
```
```py
Mod22
import math
def calculate_correlation(list1, list2):
if not list1 or not list2:
print("Ошибка: Один или оба списка пусты.")
return None
n = min(len(list1), len(list2)) # Используем меньшую длину
sum_x = sum(list1[:n])
sum_y = sum(list2[:n])
sum_x_squared = sum(x**2 for x in list1[:n])
sum_y_squared = sum(y**2 for y in list2[:n])
sum_xy = sum(list1[i] * list2[i] for i in range(n))
numerator = n * sum_xy - sum_x * sum_y
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
if denominator == 0:
print("Предупреждение: Деление на ноль при вычислении корреляции.")
return None
return numerator / denominator
```
```py
Mod33
import Mod11
import Mod22
if __name__ == "__main__":
file1_name = input("Введите имя первого файла: ")
file2_name = input("Введите имя второго файла: ")
list1 = Mod11.read_number_list(file1_name)
list2 = Mod11.read_number_list(file2_name)
if list1 is not None and list2 is not None:
correlation = Mod22.calculate_correlation(list1, list2)
if correlation is not None:
print(f"Коэффициент корреляции: {correlation:.3f}")
```
```py
= RESTART: C:\Users\Professional\Desktop\python-labs\TEMA8\Mod33.py
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: 0.991
```

@ -0,0 +1,324 @@
# Протокол по Теме 9
Бутко Захар Владимирович, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 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)#Отображение данных экземпляра класса
z1=Class1() #Создаём 1-й экземпляр класса
z1
<__main__.Class1 object at 0x000001F6FDDA5550>
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()
значение= Совсем новое
```
При выводе сработал метод Class2
```py
z1.otobrazh()
Новое значение атрибута у экз.1
```
Нет, не изменилось, т.к. z1 принадлежит к Class1
```py
del z1,z2,z3
```
## 3. Использование классов, содержащихся в модулях
```py
#Mod3.py
class Class1: #Объявление класса Class1 в модуле
def zad_zn(self,znach): # 1 Метод класса
self.data=znach # self - ссылка на экземпляр класса Class1
def otobrazh(self): # 2 Метод класса
print(self.data)#Отображение данных экземпляра
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2
print('значение=',self.data)#Отображение данных экземпляра
def otobrazh(objekt): #Объявление самостоятельной функции
print('значение объекта=',objekt)
```
```py
import os,sys
import importlib as imp
os.chdir('/Users/zakhar/Desktop/lab9')
os.getcwd()
'/Users/zakhar/Desktop/lab9'
from Mod3 import Class1 #Частичный импорт содержимого модуля
z4=Class1()
z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
z4.otobrazh()
File "/Users/zakhar/Desktop/lab9/Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
Ошибка возникла т.к. z4 не имеет никакого значения
```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
z5=Class3('abc') #При создании экземпляра срабатывает конструктор
z5.otobrazh()
значение= abc
z6=z5+'def'
z6.otobrazh()
значение= abcdef
z6.zad_dr_zn(3)
z6.otobrazh()
значение= abcdefabcdefabcde
```
## 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']
dir(z7.fio)==dir(Class3.fio)
True
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__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## 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#59>", line 1, in <module>
exempl.svojstvo
File "<pyshell#53>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Потому что атрибут __prm больше не существует
## 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
```py
# SAU.py
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
#testSau.py
prm=[2.5,4,1.3,0.8]
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()
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="Figure_1.png">

@ -0,0 +1,121 @@
# Общее контрольное задание по теме 9
Бутко Захар Владимирович, А-03-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
-конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
-метод для обеспечения операции повышения оклада сотрудника на заданное значение;
-метод для обеспечения перевода сотрудника из одного отдела в другой;
-метод для изменения должности сотрудника;
-свойство, содержащее перечень (список) поощрений сотрудника.
-Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобрази-те эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изме-нения должности и оклада, объявления благодарности.
```py
#task.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
import os, sys
os.chdir('/Users/zakhar/Desktop/lab9')
os.getcwd()
'/Users/zakhar/Desktop/lab9'
from task import *
emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 76000)
emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 760000)
emp1.change_department('УИТ')
Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ.
emp1.otdel
'УИТ'
emp1.change_position('Старший преподаватель')
Должность сотрудника Челышев Эдуард Артурович изменена с Ассистент на Профессор.
emp1.dolzhnost
'Профессор'
emp2.salary_raise(-100000)
Оклад сотрудника Бобряков Александр Владимирович увеличен на 1. Новый оклад: 76001
emp2.oklad
76001
emp1.add_encouragement('За победу в конкурсе "лучший преподаватель"')
Сотрудник Челышев Эдуард Артурович теперь имеет поощрение: За победу в конкурсе "лучший преподаватель"
emp1.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}")
Загрузка…
Отмена
Сохранить