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

...

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

Автор SHA1 Сообщение Дата
VatariShin ad7c31afbf done IKZ
2 месяцев назад
VatariShin 0dec7f90aa done lab9
2 месяцев назад
VatariShin 378525e808 done ikz
2 месяцев назад
VatariShin af70130e47 fix
2 месяцев назад
VatariShin f91acc56b1 done lab8
2 месяцев назад
VatariShin 04b23627ee fix ikz
2 месяцев назад
VatariShin 3798e702d7 done IKZ
2 месяцев назад
VatariShin df857e3665 done lab7
2 месяцев назад
VatariShin b002f1a69f fixes
3 месяцев назад
VatariShin fd575b9283 done test
3 месяцев назад
VatariShin a4b5016d5f done lab6
3 месяцев назад
VatariShin e74b731f64 done IKZ
3 месяцев назад
VatariShin 039e74c207 done lab5
3 месяцев назад
VatariShin 13ca6d37d0 done IKZ
3 месяцев назад
VatariShin aa1136f111 Done lab4
4 месяцев назад
VatariShin 26d1583e1b done test 1
4 месяцев назад
VatariShin 5533367117 done lab3
4 месяцев назад
VatariShin 7c69ea6f76 done test
4 месяцев назад
VatariShin 669cf0a11c done lab2
4 месяцев назад
VatariShin 619fdaa6fb test done
5 месяцев назад
VatariShin 0d14f1d582 done lab1
5 месяцев назад

@ -0,0 +1,2 @@
print('This line was executed from .txt file!')
print('And this is two lines programm')

@ -0,0 +1,3 @@
#Программа по Теме 1 Коваленко Дмитрий Максимович
print('Hello')
h=input('Your name=')

@ -0,0 +1,98 @@
# Отчет по теме 1
Коваленко Дмитрий, А-01-23
## 1 Изучение среды IDLE
### 1.1 Работа с интерпретатором Python
Открыл интерпретатор python в терминале
```
vatarishin@MacBook-Air python-labs % python3
```
Попробовал пару простых комманд
```
>>> print('Hello')
Hello
>>> h=input('Your name=')
Your name=Dmitriy
```
Завершил раборту с интерпретатором в терминале
```
>>> exit()
vatarishin@MacBook-Air python-labs %
```
### 1.2 Работа с python в IDE
Создал файл [Pr0.py](Pr0.py) и непенес в него команды из предыдущего пункта.
Запустил файл на выполнение посредством GUI IDE VS CODE
```
vatarishin@MacBook-Air python-labs % /usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/TEMA1/Pr0.py
Hello
Your name=Dmitriy
```
Попробовал альтернативный варинат запуска программы
```
vatarishin@MacBook-Air TEMA1 % python3 Pr0.py
Hello
Your name=Shin
```
Запустил на выполнение файл [prb1.py](prb1.py)
```
vatarishin@MacBook-Air python-labs % /usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/TEMA1/prb1.py
Как Вас зовут? Дмитрий
Привет, Дмитрий
```
### 1.3 Изучение справки
```
help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Help on built-in function input in module builtins:
```
Попробовал вызвать две команды справки на одной строке
```
help(print); help(input)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt=None, /)
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.4 Изучение примеров
Запустил файл [tdemo_chaos.py](tdemo_chaos.py)
Открылось окно GUI, где в случайном порядке рисуются точки, соедененные линиями

@ -0,0 +1,22 @@
# Индивидуальное контрольное задание по теме 1
Коваленко Дмитрий, А-01-23
## Вопрос 8
Как можно запустить на выполнение программу, исходный код которой находится в тексто-вом файле ABC.txt?
## Ответ
Запустить код написанный в .txt файле можно при помощи функции ```exec()```
Пример файла [ABC.txt](ABC.txt)
Способ запуска кода из txt файла приведен в [test.py](test.py)
Результат выполнения
```
vatarishin@MacBook-Air python-labs % /Library/Developer/CommandLineTools/usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/
TEMA1/test.py
This line was executed from .txt file!
And this is two lines programm
```

@ -0,0 +1,2 @@
with open('/Users/vatarishin/lab_sem_5/python-labs/TEMA1/ABC.txt', 'r') as textScript:
exec(textScript.read())

@ -0,0 +1,4 @@
gg1=1.6 #значение в виде вещественного числа
hh1='Строка' #значение в виде символьной строки
73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика!

@ -0,0 +1,255 @@
# Отчет по теме 2
Коваленко Дмитрий, А-01-23
## 2 Базовые типы объектов
### 2.1 Изучение простых объектов
```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__', '__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_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
TypeError: type() takes 1 or 3 arguments
>>> type(f2)
<class 'int'>
>>> del f1,f2
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
```
Видим, что переменные имеют тип `int`. При помощи `dir(var)` можно узнать методы объекта, а при вызове `dir()` можно посмотреть, какие переменные есть в памяти. Как можно видеть из последнего запуска `dir()`, переменные `f1`, `f2` были удалены из памяти программы.
### 2.2 Изучение правил именования
Создал программу [prog1.py](prog1.py) и записал в неё несколько комманд для проверки правил именования. Ожидаемо, получил ошибку на неправильном имени файла
```
vatarishin@MacBook-Air python-labs % /Library/Developer/CommandLineTools/usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/
TEMA2/prog1.py
File "/Users/vatarishin/lab_sem_5/python-labs/TEMA2/prog1.py", line 3
73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
^
SyntaxError: invalid syntax
```
### 2.3 Изучение списка ключевых слов
```
>>> import keyword
>>> kw = keyword.kwlist
>>> print(kw)
['False', 'None', 'True', '__peg_parser__', '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']
```
### 2.4 Выведение списка встроенных идентификаторов
```
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', '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', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', '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']
```
Изучим функцию `zip()`
```
Help on class zip in module builtins:
class zip(object)
| zip(*iterables) --> A zip object yielding tuples until an input is exhausted.
|
| >>> list(zip('abcdefg', range(3), range(4)))
| [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
|
| The zip object yields n-length tuples, where n is the number of iterables
| passed as positional arguments to zip(). The i-th element in every tuple
| comes from the i-th iterable argument to zip(). This continues until the
| shortest argument is exhausted.
```
### 2.5 Рассмотрим значимость регистров
```
>>> Gg1=45
>>> gg1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'gg1' is not defined
>>> Gg1
45
```
### 2.6 Изучим простые типы объектов
Логический тип
```
>>> bb1=True; bb2=False
>>> bb1;bb2
True
False
>>> type(bb1)
<class 'bool'>
```
Прочие типы
```
>>> ii1=-1234567890
>>> ff1=-8.9876e-12 #экспоненциальная форма записи вещественного числа
>>> dv1=0b1101010 #Это – двоичное число. В объекте какого класса оно сохранено?
>>> vsm1=0o52765 #Это – восьмеричное число
>>> shest1=0x7109af6 #Это – шестнадцатеричное число
>>> cc1=2-3j
>>> a=3.67; b=-0.45
>>> cc2=complex(a,b) #Создается комплексное число
>>> cc2
(3.67-0.45j)
```
Символьные строки
```
>> ss1='Это - строка символов'
>>> ss1="Это - строка символов"
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках";print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1b= 'Меня зовут: \n Коваленко Д.М.'
>>> print(ss1b)
Меня зовут:
Коваленко Д.М.
>>> mnogo="""Нетрудно заметить , что в результате операции
... над числами разных типов получается число,
... имеющее более сложный тип из тех, которые участвуют в операции."""
>>> print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
>>> ss1="Это - строка символов"
>>> ss1[0] #Это – символ «Э»
'Э'
>>> ss1[8] #А это – символ «р»
'р'
>>> ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки)
'о'
ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!)
ss1[13:] #Это часть строки – с 13-го индекса и до конца
ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно
ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца
ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[4]='='
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> ss1
'Это = строка символов'
```
### 2.7 Изучим более сложные типы объектов
```
>>> spis1=[111,'Spisok',5-9j]
>>> 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]
>>> stup[-8::2]
[0, 1, 1, 1]
>>> spis1[1]='Список'
>>> spis1
[111, 'Список', (5-9j)]
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+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
>>> spis1.pop(1)
'Список'
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2
[[111, (5-9j), 'New item'], [4, 5, 6, 7]]
>>> spis2[0][1]
(5-9j)
>>> spis2[0][1]=78
>>> spis1
[111, 78, 'New item']
```
Видим, что при изменении вложенного списка, изменяется и сам исходный список. Это происходит потому что при создании `spis2` была использована ссылка на `spis1`. Чтобы списки были независимы, в `spis2` надо передовать копию списка.
Создадим свой объект-список
```myList1 = [1, '1', True, [1, '1', True]]```
### 2.8 Изучим кортежи
```
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1
(222, 'Kortezh', (77+8j))
>>> kort1= kort1+(1,2)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2)
>>> kort1= kort1+(ss1b,)
>>> kort2=kort1[:2]+kort1[3:]
>>> kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Коваленко Д.М.')
>>> kort1.index(2)
4
>>> kort1.count(222)
1
>>> kort1[2]=90
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
kort0 = (0, '0', [False, False], (0, '0', False))
```
### 2.9 Изучим словари
```
>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1['Orel']
56
>>> dic1['Pskov']=78
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
>>> sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>> sorted(dic1.values())
[45, 56, 78, 145]
>>> dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>> dic3['statistics'][2]
'standart deviation'
>>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>> AVTI['Курс III'][5]
15
```
### 2.10 Изучим множества
```
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'двигатель', 'датчик', 'линия связи', 'микропроцессор'}
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'микропроцессор', 'реле', 'двигатель', 'датчик'}
>>> set1 = {1, 1, '1', "1", True, True, (1, '1')}
>>> set1
{1, '1', (1, '1')}
>>> len(set1)
3
```

@ -0,0 +1,41 @@
# Общее контрольное задание по теме 2
Коваленко Дмитрий, А-01-23
## Задание
• Создать переменную с именем `familia` и со значением - символьной строкой – своей фамилией в латинской транскрипции.
• Создать переменную со значением, совпадающим с первой буквой из `familia`.
• Создать переменную с именем `sp_kw` со значением – списком всей ключевых слов языка Python.
• Удалите из списка `sp_kw` значение `'nonlocal'`. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
• Создайте кортеж `kort_nam` с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это `tuple`.
• Напишите инструкцию, добавляющую в `kort_nam` имена еще двух студентов.
• Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
• Создайте словарь `dict_bas`, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## Решение
```py
import keyword
familia = 'Kovalenko'
withLetK = familia[0]
sp_kw = keyword.kwlist
sp_kw.remove('nonlocal')
sp_kw
kort_nam = ('Дмитрий', 'Максим', 'Даниил', 'Дима')
type(kort_nam)
kort_nam = kort_nam+('Александр', 'Елизавета')
kort_nam.count('Дима')
dict_bas = {'строка': familia, 'Список': sp_kw, 'Кортеж': kort_nam}
```
```
['False', 'None', 'True', '__peg_parser__', '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']
>>> type(kort_nam)
<class 'tuple'>
>>> kort_nam.count('Дима')
1
```

@ -0,0 +1,32 @@
# Индивидуальное контрольное задание по теме 2
Коваленко Дмитрий, А-01-23
## Задание 9
Создайте два объекта
`u=[1,2,3,4,5]`
`v=[11,22,33,44,55]`
К какому классу относятся эти объекты? Напишите инструкцию создания нового объекта-множества `z` с элементами из `u` и `v`.
## Решение
```py
u = [1,2,3,4,5]
v = [11,22,33,44,55]
type(u)
type(v)
z = {*u, *v}
```
Вывод:
```py
>>> type(u)
<class 'list'>
>>> type(v)
<class 'list'>
>>> z = {*u, *v}
>>> z
{1, 2, 3, 4, 5, 33, 11, 44, 22, 55}
```

@ -0,0 +1,452 @@
# Отчет по теме 3
Коваленко Дмитрий, А-01-23
## 3 Операции с объектами
### 3.1 Преобразование в логический тип с помощью функции bool(<Объект>).
```
>>> logiz1=bool(56)
>>> logiz2=bool(0)
>>> logiz3=bool("Beta")
>>> logiz4=bool("")
>>> logiz1
True
>>> logiz2
False
>>> logiz3
True
>>> logiz4
False
```
### 3.2 Преобразование в целочисленный тип int и вещественный float
```
>>> tt1=int(198.6)
>>> tt2=int("-76")
>>> tt3=int("B",16)
>>> tt4=int("71",8)
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '98.76'
```
В последней иструкции видим ошибку. Это происходит из-за того, что `int()` не может перевести строку в целочисленный тип, если указана дробная часть.
```
>>> flt1=float(789)
flt2=float(-6.78e2)
flt3=float("Infinity")
flt4=float("-inf")>>> flt2=float(-6.78e2)
>>> flt3=float("Infinity")
>>> flt4=float("-inf")
>>> flt1
789.0
>>> flt2
-678.0
>>> flt3
inf
>>> flt4
-inf
```
### 3.3 Преобразование десятичных чисел в другие системы счисления
```
>>> hh=123
>>> dv1=bin(hh)
>>> vos1=oct(hh)
>>> shs1=hex(hh)
>>> dv1
'0b1111011'
>>> vos1
'0o173'
>>> shs1
'0x7b'
>>> nDv1 = int(dv1, 2)
>>> nDv1
123
>>> nVos1 = int(vos1, 8)
>>> nVos1
123
>>> nShs1 = int(shs1, 16)
>>> nShs1
123
```
### 3.4 Преобразование в строку символов с помощью функции str(<Объект>)
```
>>> strk1=str(23.6)
>>> strk2=str(logiz3)
>>> strk3=str(["A","B","C"])
>>> strk4=str(("A","B","C"))
>>> strk5=str({"A":1,"B":2,"C":9})
>>> strk3
"['A', 'B', 'C']"
```
### 3.5 Преобразование элементов объекта в список с помощью функции list(<Объект>)
```
>>> spis1=list("Строка символов")
>>> spis2=list((124,236,-15,908))
>>> spis3=list({"A":1,"B":2,"C":9})
>>> spis3
['A', 'B', 'C']
```
### 3.6 Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
```
>>> kort7=tuple('Строка символов')
>>> kort8=tuple(spis2)
>>> kort9=tuple({"A":1,"B":2,"C":9})
>>> kort9
('A', 'B', 'C')
```
### 3.7 Удаление объектов
```
>>> del strk5, kort8
>>> strk5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'strk5' is not defined
```
### 3.8 Арифметические операции
Сложение и вычитание (+ и -)
```
>>> 12+7+90
109
>>> 5.689e-1 - 0.456
0.11289999999999994
>>> 23.6+54
77.6
>>> 14-56.7+89
46.3
```
Умножение (*)
```
>>> -6.7*12
-80.4
```
Деление (/)
```
>>> -234.5/6
-39.083333333333336
>>> a=178/45
>>> a
3.9555555555555557
```
Деление с округлением вниз (//)
```
>>> b=178//45
>>> c=-24.6//12.1
>>> b
3
>>> c
-3.0
```
Получение остатка от деления (%)
```
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
```
Возведение в степень (**).
```
>>> 14**3
2744
>>> e=2.7**3.6
>>> e
35.719843790663525
```
### 3.9 Операции с двоичными представлениями целых чисел
Двоичная инверсия
```
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```
>>> 7&9
1
>>> 7&8
0
```
Двоичное «ИЛИ» (|)
```
>>> 7|9
15
>>> 7|8
15
>>> 14|5
15
```
Двоичное «исключающее ИЛИ»(^)
```
>>> 14^5
11
```
Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>)
```
>>> h=14
>>> g=h<<2
>>> g1=h>>1
>>> g2=h>>2
>>> g
56
>>> g1
7
>>> g2
3
```
### 3.10 Операции при работе с последовательностями (строками, списками, кортежами).
Объединение последовательностей (конкатенация)(+)
```
>>> 'Система '+'регулирования'
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
Повторение (*)
```
>>> 'ля-'*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)
```
Проверка наличия заданного элемента в последовательности (in)
```
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka
True
>>> 'ку' in ['ку','-']*3
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
Подстановка значений в строку с помощью оператора «%»
```
>>> stroka='Температура = %g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
### 3.11 Оператор присваивания
Обычное присваивание значения переменной (=)
```
zz=-12
```
Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```
>>> zz +=5
>>> zz
-7
>>> zz -=3
>>> zz
-10
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> stroka
'Система регулирования'
```
Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```
>>> zz /= 2
>>> zz
-5.0
>>> zz *= 5
>>> zz
-25.0
```
Изучим оперции `//=`, `%=`, `**=`
```
>>> zz //= 2
>>> zz
-13.0
>>> zz %= 2
>>> zz
1.0
>>> zz **= 3
>>> zz
1.0
```
Множественное присваивание
```
>>> w=v=10
>>> n1,n2,n3=(11,-3,'all')
>>> n2
-3
>>> m1 = m2 = {1: '1', 2: '2'}
>>> m1
{1: '1', 2: '2'}
```
### 3.12 Логические операции
Операции сравнение
```
>>> w != v
False
```
Проверка наличия заданного элемента в последовательности или во множестве
```
>>> 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
```
Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
```
>>> a=17
>>> b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
```
Проверка ссылок переменных на один и тот же объект (is)
```
>>> w=v=10
w is v
w1=['A','B']
v1=['A','B']
w1 is v1>>> w is v
True
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1 is v1
False
```
результат последней проверки выдал Flase потому что мы создали два фактически разных списка, так как они находятся в разных ячейках памяти
### 3.13 Операции с объектами, выполняемые с помощью методов.
Методы для работы со строками
```
>>> stroka='Микропроцессорная система управления'
>>> stroka.find('пр')
5
>>> stroka.count("с")
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ')
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22)
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```
Изучим `format`
```
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'
```
Методы для работы со списками
```
>>> spsk = [1, 2, 3, 4, 5, 6]
>>> spsk.pop(2)
3
>>> spsk.append('c')
>>> spsk.insert(2,'a')
>>> spsk.count('a')
1
```
### 3.14 Изучим методы кортежей, множеств, словарей
```
tup = (1, 2, 3, 4)
>>> tup=tup+(5,7)
>>> tup
(1, 2, 3, 4, 5, 7)
>>> tup.count(2)
>>> len(tup)
6
set1 = {1, 1, '1', True}
>>> set1
{1, '1'}
>>> set1.pop()
1
>>> dir(set1)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>> map1 = {1: '1', 2: '2'}
>>> map1.keys()
dict_keys([1, 2])
>>> dir(map1)
['__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']
```

@ -0,0 +1,55 @@
# Общее контрольное задание по теме 3
Коваленко Дмитрий, А-01-23
## Задание
• Преобразовать восьмеричное значение 45 в целое число.\
• Создать объект-словарь `D` со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?\
• Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.\
• Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.\
• Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.\
• Определить список методов, доступных у ранее созданного словаря `D`. Поочередно использовать его методы `keys` и `values`, определить, что можно получить с применением этих методов.\
• Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
```py
int('45', 8)
37
D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
dKeys = list(D.keys())
dVals = list(D.values())
dTup = (*dKeys, *dVals)
((1788 // 24.8) % 3) ** 2.4
0.0
((~(13 & 27)) ^ 14) << 2
-32
listt = ['колебат'] * 4
'аткол' in (listt[1] + listt[2])
True
dir(D)
['__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.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
D.values()
dict_values([23, 12, 78])
longS = 'Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.'
longS = longS.split(' ')
longS[longS.index('-')] = ','
longS.remove('данного')
longS
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения.', 'Из', 'символьной', 'строки', 'создать', 'список,', 'элементами', 'которого', 'будут', 'отдельные', 'слова', 'из', 'созданной', 'строки.', '', 'Заменить', 'в', 'списке', 'элемент', '«-»', 'на', '«,».', '', 'Удалить', 'из', 'списка', 'элемент', 'со', 'значением', '«данного».', 'Отобразить', 'получившийся', 'список.']
```

@ -0,0 +1,48 @@
# Тест 1 вариант 5
Коваленко Дмитрий, А-01-23
## Задание
1) Для чего предназначено предложение "Окно (Window)" главного меню?
2) Создайте объект-словарь с 8 элементами: ключи - фамилии студентов группы, значения - средние баллы по итогам сессии. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Пополните словарь еще двумя элементами. Отобразите получившийся объект. Напишите инструкцию, позволяющую для указанного студента из словаря получить значение его среднего балла. Напишите инструкцию для получения списка всех студентов, представленных в словаре.
4) У одного из студентов средний балл оказался на 0.2 меньше указанного в словаре. Напишите инструкцию, исправляющую это значение в словаре. Отобразите полученный объект. Напишите инструкцию, вычисляющую общий средний балл для всех студентов, представленных в словаре.
5) Создайте список из названий 4-х учебных дисциплин и список с числом часов в неделю на изучение каждой из 4-х дисциплин. Напишите инструкцию, позволяющую создать словарь, объединяющий эти два списка.
## Решение
1) Предложение "Окно (Window)" в IDLE предназначено для переключения между открытыми вкладками (окнами)
2)
```py
marks = {'Иванов' : 4.3, 'Сидоров': 5, 'Смитт': 4, 'Гордеев': 4.5, 'Лыкова': 3.9, 'Кравченко': 4.1, 'Смирнов': 3, 'Ходюк': 4.8}
print(type(marks))
print(dir(marks))
```
3)
```py
marks['Ивачев'] = 4.3
marks['Мамакин'] = 3.8
print(marks)
print(f'Средний балл студента Смитта: {marks["Смитт"]}')
print(*marks.keys())
```
4)
```py
marks['Лыкова'] -= 0.2
print(marks)
print(f'Общий средний балл свех студентов в словаре: {sum(marks.values()) / len(marks)}')
```
5)
```py
subjects = ['Интеллектуальный анализ данных', 'Спортивные секции', 'Элементы систем управления', 'ПОАС']
hours = [2, 4, 3, 2]
subHour = dict(zip(subjects, hours))
print(subHour)
```

@ -0,0 +1,17 @@
### Предложение "Окно (Window)" в IDLE предназначено для переключения между открытыми вкладками (окнами)
marks = {'Иванов' : 4.3, 'Сидоров': 5, 'Смитт': 4, 'Гордеев': 4.5, 'Лыкова': 3.9, 'Кравченко': 4.1, 'Смирнов': 3, 'Ходюк': 4.8}
print(type(marks))
print(dir(marks))
marks['Ивачев'] = 4.3
marks['Мамакин'] = 3.8
print(marks)
print(f'Средний балл студента Смитта: {marks["Смитт"]}')
print(*marks.keys())
marks['Лыкова'] -= 0.2
print(marks)
print(f'Общий средний балл свех студентов в словаре: {sum(marks.values()) / len(marks)}')
subjects = ['Интеллектуальный анализ данных', 'Спортивные секции', 'Элементы систем управления', 'ПОАС']
hours = [64, 64, 60, 48]
subHour = dict(zip(subjects, hours))
print(subHour)

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

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

После

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

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

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

После

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

@ -0,0 +1,206 @@
# Отчет по теме 4
Коваленко Дмитрий, А-01-23
## 4 Встроенные функции
### 4.1 Изучим стандартные функции
функция `round`
```py
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> round(123.456)
123
```
функция `range`
```py
>>> gg=range(76,123,9)
>>> list(gg)
[76, 85, 94, 103, 112, 121]
>>> range(23)
range(0, 23)
```
Получили последовательность от 0 до 22 с шагом 1
функция `zip`
```py
>>> qq = ['Kovalenko', 'Ivanov', 'Mahnov', 'Hodyuk']
>>> ff=zip(gg,qq)
>>> tuple(ff)
((76, 'Kovalenko'), (85, 'Ivanov'), (94, 'Mahnov'), (103, 'Hodyuk'))
```
функция `eval`
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=2
>>> dan
-146.0
```
функция `exec`
```py
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
```
самостоятельно изучим функции `divmod` и `map`
```py
a = map(lambda val: len(val), qq)
>>> print(list(a))
[9, 6, 6, 6]
>>> divmod(10, 3)
(3, 1)
```
### 4.2 Изучим функции модуля math
```py
>> import math
>>> dir(math)
['__doc__', '__file__', '__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)
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
>>> math.sin(2 * math.pi / (7 + math.exp(0.23)))
0.6895048136223224
```
### 4.3 Изучим функции модуля cmath
```py
import cmath
>>> dir(cmath)
['__doc__', '__file__', '__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
```
### 4.4 Изучим функции модуля 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)
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>> random.seed()
random.seed()
>>> randoms = [random.gauss(0, 1), random.random(), random.betavariate(1, 2), random.gammavariate(2, 3)]
randoms
[0.6215069973322431, 0.08807819378198645, 0.5664749235248212, 4.506587762379303]
```
### 4.5 Изучим функции модуля time
```py
>>> import time
>>> dir(time)
['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', 'CLOCK_UPTIME_RAW', '_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock_getres', 'clock_gettime', 'clock_gettime_ns', 'clock_settime', 'clock_settime_ns', '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', 'tzset']
>>> c1=time.time()
>>> c1
1760084296.501437
>>> c2=time.time()-c1
>>> c2
19.090100049972534
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=8, tm_min=19, tm_sec=3, tm_wday=4, tm_yday=283, tm_isdst=0)
>>> dat.tm_mon
10
>>> dat.tm_min
19
>>> time.localtime()
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=11, tm_min=22, tm_sec=32, tm_wday=4, tm_yday=283, tm_isdst=0)
>>> time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=11, tm_min=18, tm_sec=16, tm_wday=4, tm_yday=283, tm_isdst=0)
```
### 4.6 Изучим графические функции
```py
>>> import pylab
>>> x=list(range(-3,55,4))
>>> t=list(range(15))
pylab.plot(t,x)
pylab.title('Первый график')
pylab.xlabel('время')
pylab.ylabel('сигнал')
pylab.show()
```
Полученный график сохранил как [Ris1.png](Ris1.png)
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
pylab.plot(X1)
pylab.plot(X2)
pylab.show()
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.pie(naselen,labels=region)
pylab.show()
```
Полученный график сохранил как [Ris2.png](Ris2.png)
```py
X1=[12,6,8,10,7, 7, 7, 6, 12, 12, 12]
pylab.hist(X1)
pylab.show()
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.bar(region, naselen)
pylab.show()
```
### 4.7 Изучим функции модуля statistics
```py
import statistics
>>> dir(statistics)
>>> a = [1, 2, 3, 4, 5]
>>> statistics.mean(a)
3
>>> statistics.sqrt(9)
3.0
>>> statistics.exp(3)
20.085536923187668
```

@ -0,0 +1,36 @@
# Общее контрольное задание по теме 4
Коваленко Дмитрий, А-01-23
## Задание
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа `0.2+0.8j`, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.\
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.\
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. \
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.\
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.\
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.\
## Решение
```py
from cmath import *
from time import localtime, mktime
from random import sample, choice, gauss
from string import ascii_letters
tuple(divmod(round(phase(0.2+0.8j), 2) * 20, 3))
now = localtime()
nowStr = f'{now.tm_hour}:{now.tm_min}'
days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']
rDays = sample(days, 3)
rNum = choice(range(14, 32, 3))
nNum = round(gauss(15, 4))
rLets = sample(list(ascii_letters), nNum)
updNow = localtime()
diff = (mktime(updNow) - mktime(now)) // 60
```

@ -0,0 +1,19 @@
# Индивидуальное контрольное задание по теме 4
Коваленко Дмитрий, А-01-23
## Задание 4
Напишите инструкцию определения текущего Московского времени. С задержкой на 5 секунд выведите его на экран по шаблону: «В Москве <> часов и <> минут».
## Решение
```py
from time import localtime, sleep
print('Смотрю время и вывожу на экран через 5 секунд')
time = localtime()
sleep(5)
print(f'В Москве {time.tm_hour} часов и {time.tm_min} минут')
```

@ -0,0 +1,6 @@
from time import localtime, sleep
print('Смотрю время и вывожу на экран через 5 секунд')
time = localtime()
sleep(5)
print(f'В Москве {time.tm_hour} часов и {time.tm_min} минут')

@ -0,0 +1,138 @@
# Отчет по теме 5
Коваленко Дмитрий, А-01-23
## 5 Блоки инструкций, управляющие инструкции
### 5.1 Изучим ветвления if
```py
porog = 12
rashod1 = 5
rashod2 = 7
dohod = 0
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
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 5:
dohod = 3
else:
dohod = 0
>>> dohod=2 if porog>=4 else 0
>>> if porog>=5 : rashod1=6; rashod2=0
```
### 5.2 Изучим цикл for
```py
temperatura = 5
for i in range(3, 18, 3):
temperatura += i
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]
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)
301
...
...
436
```
Как можно видеть, программа не всегда выводит значения на экран. Это происходит из-за оперратора `break`, который завершает цикл, если сумма ss первысила 500. В этом случае `else` не выполняется.
```py
stroka='Это – автоматизированная система'
stroka1=""
for ss in stroka:
stroka1+=" "+ss
import math, pylab
sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
pylab.plot(sps2)
pylab.show()
```
Полученный график: ![ris1.png](ris1.png)
### 5.3 Изучим цикл while
```py
rashod = 300
while rashod:
print("Расход=",rashod)
rashod-=50
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
import math, pylab
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
else:
pylab.plot(sps2)
pylab.show()
```
Полученный график: ![ris2.png](ris2.png)
```py
for chislo in range(250, 501):
kandidat =chislo // 2
while kandidat > 1:
if chislo%kandidat == 0:
print(chislo, ' имеет множитель ', kandidat)
break
kandidat -= 1
else:
print(chislo, ' является простым!')
267 имеет множитель 89
```

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

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

После

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

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

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

После

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

@ -0,0 +1,42 @@
# Общее контрольное задание по теме 5
Коваленко Дмитрий, А-01-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:\
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.\
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).\
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
from string import ascii_lowercase
text = '''Bury the light deep within
Cast aside, there's no coming home'''
for el in text:
index = ascii_lowercase.find(el.lower())
print(index + 1 if index != -1 else el, end='')
print()
words = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
keyWord = input('Введите слово, искомое в списке: ')
result = f'есть в списке' if keyWord in words else 'отсутствует в списке'
print(f'Введенное Вами слово {keyWord} {result}')
surnames1 = ['Коваленко', 'Лыкова', 'Ходюк']
marks1 = [4.75, 3.75, 4.75]
surnames2 = ['Лыкова', 'Коваленко', 'Ходюк']
marks2 = [3.25, 4.5, 4.75]
student = input('Введите фамилию студента: ')
if student in surnames1:
print(f'Средний балл студента {student} за летнюю сессию {marks1[surnames1.index(student)]} и {marks2[surnames2.index(student)]} за зимнюю')
else:
print('Студент отсутствует в списке')
```

@ -0,0 +1,25 @@
from string import ascii_lowercase
text = '''Bury the light deep within
Cast aside, there's no coming home'''
for el in text:
index = ascii_lowercase.find(el.lower())
print(index + 1 if index != -1 else el, end='')
print()
words = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
keyWord = input('Введите слово, искомое в списке: ')
result = f'есть в списке' if keyWord in words else 'отсутствует в списке'
print(f'Введенное Вами слово {keyWord} {result}')
surnames1 = ['Коваленко', 'Лыкова', 'Ходюк']
marks1 = [4.75, 3.75, 4.75]
surnames2 = ['Лыкова', 'Коваленко', 'Ходюк']
marks2 = [3.25, 4.5, 4.75]
student = input('Введите фамилию студента: ')
if student in surnames1:
print(f'Средний балл студента {student} за летнюю сессию {marks1[surnames1.index(student)]} и {marks2[surnames2.index(student)]} за зимнюю')
else:
print('Студент отсутствует в списке')

@ -0,0 +1,24 @@
# Индивидуальное контрольное задание по теме 5
Коваленко Дмитрий, А-01-23
## Задание 1
Запишите свой e-mail – адрес в виде символьной строки. Напишите инструкции, разделяющие эту строку на две: строка1, содержащая все буквы из состава адреса, и строка 2, содержащая все остальные символы.
## Решение
```py
from string import ascii_lowercase as letters
email = 'KovalenkoDM@mpei.ru'
emailLetters = ''
emailSimbols = ''
for el in email:
if letters.find(el.lower()) != -1:
emailLetters += el
else:
emailSimbols += el
print(f'Letters in email are {emailLetters}\nSimbols in email are {emailSimbols}')
```

@ -0,0 +1,12 @@
from string import ascii_lowercase as letters
email = 'KovalenkoDM@mpei.ru'
emailLetters = ''
emailSimbols = ''
for el in email:
if letters.find(el.lower()) != -1:
emailLetters += el
else:
emailSimbols += el
print(f'Letters in email are {emailLetters}\nSimbols in email are {emailSimbols}')

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

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

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

@ -0,0 +1,239 @@
# Отчет по теме 6
Коваленко Дмитрий, А-01-23
## 6 Ввод-вывод данных и операции с файлами
### 6.1. Вывод данных на экран дисплея.
```py
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
>>> fff=234.5;gg='Значение температуры = '
```
#### 6.1.1 функция `print`
```py
>>> print(gg, fff)
Значение температуры = 234.5
>>> print(gg, fff, sep='/')
Значение температуры = /234.5
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
>>> print()
>>> print(""" Здесь может выводиться
... большой текст,
... занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
... "большой текст,",
... "занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
#### 6.1.2 метод `write`
```py
import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
### 6.2 Ввод данных с клавиатуры
```py
>>> psw=input('Введите пароль:')
Введите пароль:qwerty
>>> psw
'qwerty'
>>> type(psw)
<class 'str'>
>>> while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
... znach=float(input('Задайте коэф.усиления = '))
... if znach<17.5 or znach>23.8:
... print('Ошибка!')
... else:
... break
...
Задайте коэф.усиления = 1
Ошибка!
Задайте коэф.усиления = 19
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
### 6.3 Ввод-вывод при работе с файлами
#### 6.3.1 Функции для работы с путем к файлу
```py
>>>
>>> import os
>>> workPath = os.getcwd()
>>> print(workPath)
'/Users/vatarishin/lab_sem_5/python-labs'
>>> os.chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
>>>
>>> os.getcwd()
'/Users/vatarishin/lab_sem_5/python-labs/TEMA6'
>>> fil = os.path.abspath("report.md")
>>> drkt=os.path.dirname()
>>> os.path.basename(fil)
'report.md'
>>> os.path.split(fil)
('/Users/vatarishin/lab_sem_5/python-labs/TEMA6', 'report.md')
>>> os.path.exists('path.md')
False
>>> os.path.isfile('task.md')
False
>>> os.path.isfile('report.md')
True
```
#### 6.3.2 Открытие файла для записи или чтения данных – функция `open`
```py
>>> fp=open('zapis1.txt','w')
>>> type(fp)
<class '_io.TextIOWrapper'>
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__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']
```
#### 6.3.3. Закрытие файла
```py
>>> fp.close()
>>>
```
#### 6.3.4. Запись информации в файл с помощью метода `write`
```py
sps=list(range(1,13))
fp2=open('zapis3.txt','w')
fp2.write(str(sps[:4])+'\n')
fp2.write(str(sps[4:8])+'\n')
fp2.write(str(sps[8:])+'\n')
fp2.close()
```
[Созданный файл](zapis3.txt)
```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)
fp3.close()
```
[Созданный файл](zapis4.txt)
```py
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(f'{r[0]} {str(r[1])}\n')
gh.close()
```
#### 6.3.5. Первый способ чтения информации из текстового файла.
```py
>>> sps1=[]
fp=open('zapis3.txt')
sps1=[]
>>> for stroka in fp:
... stroka=stroka.rstrip('\n')
... stroka=stroka.replace('[','')
... stroka=stroka.replace(']','')
... sps1=sps1+stroka.split(',')
...
>>> fp.close()
>>> sps1
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
```
#### 6.3.6. Чтение информации с помощью методов readline и readlines
```py
>>> with open('zapis3.txt') as fl:
... print(fl.readline())
... print(fl.readlines())
...
[1, 2, 3, 4]
['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
#### 6.3.7 Ввод-вывод объектов с использованием функций из модуля `pickle`
```py
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'}
fp=open('zapis6.mnz','wb')
pickle.dump(mnoz1,fp)
fp.close()
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
>>> mnoz2
{'pen', 'table', 'iPhone', 'book'}
>>> mnoz1
{'pen', 'table', 'iPhone', 'book'}
>>> mnoz1 == mnoz2
True
fp=open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
pickle.dump(sps3,fp)
fp.close()
fp=open('zapis7.2ob','rb')
obj1=pickle.load(fp)
obj2=pickle.load(fp)
fp.close()
>>> obj1
{'pen', 'table', 'iPhone', 'book'}
>>> obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
### 6.4. Перенаправление потоков ввода и вывода данных
```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
while True:
try:
line = input()
print(line)
except EOFError:
break
fd.close()
sys.stdin=tmp_in
```

@ -0,0 +1,20 @@
# Общее контрольное задание по теме 6
Коваленко Дмитрий, А-01-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:\
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.\
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.\
• Записывается кортеж в бинарный файл.\
• Записывается в этот же файл список и закрывается файл.\
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.\
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.\
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение представлено в файле [task.py](task.py)

@ -0,0 +1,20 @@
from random import randint
from pickle import dump, load
from os import chdir
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
intTuple = ()
for _ in range(125): intTuple += (str(randint(6, 56)), )
surnames = ['Kovalenko', 'Hoduyk', 'Ivanov', 'Mahnov']
with open('bin_task.bin', mode='wb') as file:
dump(intTuple, file)
dump(surnames, file)
with open('bin_task.bin', mode='rb') as file:
binObj1 = load(file)
binObj2 = load(file)
print(f'tuples are indentical: {binObj1 == intTuple}\nlists are indentical: {surnames == binObj2}')

@ -0,0 +1,63 @@
# Тест 2 вариант 1
Коваленко Дмитрий, А-01-23
## Задание
1) Запросите у пользователя и введите имя и число элементов кортежа (от 10 до 100). Проверьте введенное число элементов на соответствие заданному диапазону значений и, при необходимости, повторите ввод.
2) Создайте кортеж с заданными при вводе именем и числом элементов. Элементами должны быть случайные целые числа в диапазоне от 101 до 201.
3) Запишите кортеж в текстовый файл с некоторым именем по одному элементу на строке.
4) Удалите из памяти все созданные объекты-переменные.
5) Прочитайте из файла элементы, подсчитайте их сумму и отобразите на экране по шаблону: "Сумма элементов кортежа = <рассчитанное значение>".
## Решение
1)
```py
from random import randint
from os import chdir
def getTupleNumbers():
try:
numbers = int(input('Enter tuple elements numbers from 10 to 100: '))
if numbers >= 10 and numbers <= 100:
return numbers
except Exception:
print('Please enter number')
print('Enter number from required range')
return getTupleNumbers()
name = input('Enter your name: ')
numbers = getTupleNumbers()
```
2)
```py
intTuple = ()
for _ in range(numbers): intTuple += (str(randint(101, 201)), )
```
3)
```py
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
with open('test.txt', mode='w') as fl:
for el in intTuple:
fl.write(f'{el}\n')
```
4)
```py
del name, numbers, intTuple
```
5)
```py
with open('test.txt') as fl:
nums = fl.readlines()
nums = map(int, nums)
print(f'Сумма элементов кортежа = {sum(nums)}')
```

@ -0,0 +1,32 @@
from random import randint
from os import chdir
def getTupleNumbers():
try:
numbers = int(input('Enter tuple elements numbers from 10 to 100: '))
if numbers >= 10 and numbers <= 100:
return numbers
except Exception:
print('Please enter number')
print('Enter number from required range')
return getTupleNumbers()
name = input('Enter your name: ')
numbers = getTupleNumbers()
intTuple = ()
for _ in range(numbers): intTuple += (str(randint(101, 201)), )
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
with open('test.txt', mode='w') as fl:
for el in intTuple:
fl.write(f'{el}\n')
del name, numbers, intTuple
with open('test.txt') as fl:
nums = fl.readlines()
nums = map(int, nums)
print(f'Сумма элементов кортежа = {sum(nums)}')

@ -0,0 +1,11 @@
134
191
113
196
155
165
157
127
122
127
133

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

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

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

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

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

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

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

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

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

После

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

@ -0,0 +1,346 @@
# Отчет по теме 7
Коваленко Дмитрий, А-01-23
## 7 Создание пользовательских функций
## 7.1 Создание пользовательской функции.
```py
>>> def uspeh():
... """Подтверждение успеха операции"""
... print('Выполнено успешно!')
...
>>> uspeh()
Выполнено успешно!
>>> dir()
['PS1', 'REPLHooks', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'get_last_command', 'is_wsl', 'original_ps1', 'platform', 'readline', 'sys', 'uspeh']
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
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
>>> sravnenie('a', ',')
a больше ,
def logistfun(b,a):
"""Вычисление логистической функции"""
import math
return a/(1+math.exp(-b))
>>> v,w=1,0.7;z=logistfun(w,v)
>>> z
0.6681877721681662
def slozh(a1,a2,a3,a4):
""" Сложение значений четырех аргументов"""
return a1+a2+a3+a4
slozh(1,2,3,4)
slozh('1','2','3','4')
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]
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)
```
## 7.2 Функции как объекты.
```py
>> dir(inerz)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> inerz.__doc__
' Модель устройства с памятью:\n x- текущее значение вх.сигнала,\n T -постоянная времени,\n ypred - предыдущее значение выхода устройства'
>>> fnkt=sravnenie
>>> v=16
>>> fnkt(v,23)
16 меньше 23
typ_fun=8
if typ_fun==1:
def func():
print('Функция 1')
else:
def func():
print('Функция 2')
func()
Функция 2
```
## 7.3 Аргументы функции
```py
def fun_arg(fff,a,b,c):
"""fff-имя функции, используемой
в качестве аргумента функции fun_arg"""
return a+fff(c,b)
zz=fun_arg(logistfun,-3,1,0.7)
def logistfun(a,b=1):
"""Вычисление логистической функции"""
import math
return b/(1+math.exp(-a))
logistfun(0.7)
logistfun(0.7,2)
>>> logistfun(b=0.5,a=0.8)
0.34498724056380625
>>> b1234=[b1,b2,b3,b4]
>>> qq=slozh(*b1234)
>>> qq
[1, 2, -1, -2, 0, 2, -1, -1]
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
qqq=slozh(**dic4)
>>> qqq
10
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
>>> qqqq=slozh(*e1,**dd2)
>>> qqqq
17
def func4(*kort7):
"""Произвольное число аргументов в составе кортежа"""
smm=0
for elt in kort7:
smm+=elt
return smm
>>> func4(-1,2)
1
>>> func4(-1,2,0,3,6)
10
def func4(a,b=7,*kort7):
"""Кортеж - сборка аргументов - должен быть последним!"""
smm=0
for elt in kort7:
smm+=elt
return a*smm+b
>>> func4(-1,2,0,3,6)
-7
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 "<stdin>", line 1, in <module>
File "<stdin>", line 2, in func2
TypeError: 'tuple' object does not support item assignment
```
## 7.4 Анонимные функции
```py
>>> anfun1=lambda: 1.5+math.log10(17.23)
>>> anfun1()
2.7362852774480286
>>> anfun2=lambda a,b : a+math.log10(b)
>>> anfun2(17,234)
19.369215857410143
>>> anfun3=lambda a,b=234: a+math.log10(b)
>>> anfun3(100)
102.36921585741014
>>> 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 "<stdin>", line 1, in <module>
StopIteration
```
## 7.5 Локализация объектов в функциях
```py
glb=10
def func7(arg):
loc1=15
glb=8
return loc1*arg
>>> res=func7(glb)
>>> res
150
>>> glb
10
def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
res=func8(glb)
# получаем ошибку, потому что функция не видит глобальную переменную, а локальная ещё не была объявлена
glb=11
def func7(arg):
loc1=15
global glb
print(glb)
glb=8
return loc1*arg
>>> res=func7(glb)
11
>>> glb
8
>>> globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
>>> locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
def func8(arg):
loc1=15
glb=8
print(globals().keys())
print(locals().keys())
return loc1*arg
hh=func8(glb)
>>> 'glb' in globals().keys()
True
def func9(arg2,arg3):
def func9_1(arg1):
loc1=15
glb1=8
print('glob_func9_1:',globals().keys())
print('locl_func9_1:',locals().keys())
return loc1*arg1
loc1=5
glb=func9_1(loc1)
print('loc_func9:',locals().keys())
print('glob_func9:',globals().keys())
return arg2+arg3*glb
>>> kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1=float(znach[0])
T=float(znach[1])
k2=float(znach[2])
Xm=float(znach[3])
A=float(znach[4])
F=float(znach[5])
N=float(znach[6])
import math
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
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)
```

@ -0,0 +1,30 @@
0.0
0.929446344087537
1.6459677317873127
1.985417748196108
1.8700324853708297
1.3262453164815904
0.47863132857511537
-0.47863132857511487
-1.32624531648159
-1.8700324853708294
-1.985417748196108
-1.645967731787314
-0.9294463440875368
1.2864981197413093e-15
0.9294463440875359
1.6459677317873116
1.9854177481961077
1.8700324853708299
1.3262453164815913
0.47863132857511753
-0.47863132857511614
-1.3262453164815902
-1.870032485370828
-1.9854177481961082
-1.6459677317873123
-0.9294463440875372
2.5729962394826186e-15
0.9294463440875355
1.6459677317873114
1.985417748196108

@ -0,0 +1,85 @@
# Общее контрольное задание по теме 7
Коваленко Дмитрий, А-01-23
## Задание
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.\
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: вы-борка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.\
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
## Решение
```py
import random
def delay_signal(signal, T):
delayed_signal = signal.copy()
if T < len(signal):
delayed_signal = [0] * T + signal[:-T]
else:
delayed_signal = [0] * len(signal)
return delayed_signal
y = [random.gauss(3, 1.5) for _ in range(10)]
>>> y
[3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328, 3.009437226477874, 2.6526954887061165, 2.2993461230571697]
yd = delay_signal(y, 3)
>>> yd
[0, 0, 0, 3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328]
import matplotlib.pyplot as plt
import numpy as np
def calculate_histogram(data, num_bins):
min_val, max_val = min(data), max(data)
bins = np.linspace(min_val, max_val, num_bins + 1)
counts = [0] * num_bins
for value in data:
for i in range(num_bins):
if bins[i] <= value < bins[i + 1]:
counts[i] += 1
break
if value == max_val:
counts[-1] += 1
return counts, bins
def plot_histogram(data, bins, counts):
plt.hist(data, bins=bins, alpha=0.7, edgecolor='black')
plt.xlabel('Значения выборки')
plt.ylabel('Число элементов')
plt.title('Гистограмма выборки')
plt.show()
def histo(data, num_bins):
counts, bins = calculate_histogram(data, num_bins)
plot_histogram(data, bins, counts)
return counts
sample = [random.gauss(random.random(), random.random()) for _ in range(random.randint(1,100))]
intervals = int(input("Введите количество интервалов разбиения: "))
output = histo(sample, intervals)
Введите количество интервалов разбиения: 5
Список с числами элементов в интервалах: [3, 10, 12, 6, 1]
linreg = lambda b1, b2, x: b1 + b2 * x
>>> b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
Введите коэффициент b1 линейной регрессии: 4
>>> b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
Введите коэффициент b2 линейной регрессии: 6
>>> x_val = float(input("Введите значение x: "))
Введите значение x: 56
>>> print(linreg(b1, b2, x_val))
340.0
```
Созданная гистограмма: ![hist](Figure_okz.png)

@ -0,0 +1,43 @@
# Индивидуальное контрольное задание по теме 7
Коваленко Дмитрий, А-01-23
## Задание 1
Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
## Решение
```py
import math
from os import chdir
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA7')
def sinusoid(amplitude, period, phase, num_samples, filename="sinusoid_signal.txt"):
signal_list = []
for i in range(num_samples):
value = amplitude * math.sin(2 * math.pi * i / period + phase)
signal_list.append(value)
with open(filename, 'w') as file:
for value in signal_list:
file.write(f"{value}\n")
return signal_list
A = 2
T = 13
phi = 0
N = 30
signal = sinusoid(A, T, phi, N)
print(f"Значения сигнала: {signal}")
```
## Вывод программы:
```py
Значения сигнала: [0.0, 0.929446344087537, 1.6459677317873127, 1.985417748196108, 1.8700324853708297, 1.3262453164815904, 0.47863132857511537, -0.47863132857511487, -1.32624531648159, -1.8700324853708294, -1.985417748196108, -1.645967731787314, -0.9294463440875368, 1.2864981197413093e-15, 0.9294463440875359, 1.6459677317873116, 1.9854177481961077, 1.8700324853708299, 1.3262453164815913, 0.47863132857511753, -0.47863132857511614, -1.3262453164815902, -1.870032485370828, -1.9854177481961082, -1.6459677317873123, -0.9294463440875372, 2.5729962394826186e-15, 0.9294463440875355, 1.6459677317873114, 1.985417748196108]
```

@ -0,0 +1,3 @@
from math import pi, exp
calc = lambda x, a, b: exp(-(x - a)**2 / b) / (2 * pi * b)**0.5

@ -0,0 +1,15 @@
3.48132629866869e-05,0.00011105198605141639
0.0003270125124308196,0.0008889121702194339
0.0022305387662290435,0.005166746338522999
0.011047930833002735,0.021807264658486272
0.039735426919319354,0.06683608675088461
0.10377687435514844,0.14874644656436697
0.1968108579285715,0.24038532470982668
0.27103369677621564,0.28209479177387814
0.27103369677621597,0.24038532470982732
0.19681085792857225,0.1487464465643677
0.1037768743551491,0.06683608675088512
0.03973542691931971,0.021807264658486494
0.011047930833002859,0.005166746338523063
0.0022305387662290756,0.0008889121702194466
0.00032701251243082483,0.00011105198605141855

@ -0,0 +1,16 @@
from IKZ import calc
from numpy import arange
a = int(input('Enter a value: '))
b = int(input('Enter b value: '))
res = []
xRange = arange(a - 3 * b**0.5, a + 3 * b ** 0.5, 0.2 * b ** 0.5)
for i in range(len(xRange)):
res.append(calc(xRange[i], a, b))
with open('IKZ_res.txt', 'w') as file:
resString = ''
for i in range(len(res)):
divider = ',' if i % 2 == 0 else '\n'
resString += f'{res[i]}{divider}'
file.write(resString)

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

@ -0,0 +1,21 @@
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp = kk1 * xtt #усилитель
yti1 = yp + yti1 #Интегратор
ytin1 = (yti1+TT*ytin1)/(TT+1)
return [yti1, ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp = kk2 * xtt #усилитель
yti2 = yp + yti2 #интегратор
return yti2
def nechus(xtt,gran):
if (xtt < gran) and (xtt > (-gran)):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt

@ -0,0 +1,23 @@
znach = input('k1,T,k2,Xm,A,F,N=').split(',')
k1 = float(znach[0])
T = float(znach[1])
k2 = float(znach[2])
Xm = float(znach[3])
A = float(znach[4])
F = float(znach[5])
N = int(znach[6])
import math
vhod = []
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
import MM1 as mod
yi1 = 0; yin1 = 0; yi2 = 0
vyhod=[]
for xt in vhod:
xt1 = xt - yi2 #отрицательная обратная связь
[yi1,yin1] = mod.realdvig(xt1,k1,T,yi1,yin1)
yi2 = mod.tahogen(yin1,k2,yi2)
yt = mod.nechus(yin1,Xm)
vyhod.append(yt)

@ -1,6 +1,8 @@
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 *= 3
print('new perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)

@ -4,8 +4,6 @@ def alpha():
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
expi = int(alpha())*math.pi
return math.exp(expi)

@ -0,0 +1,6 @@
def reading (file):
nums = []
with open(file) as file:
for line in file:
nums.extend(map(float, line.split()))
return nums

@ -0,0 +1,18 @@
import math
def correlation(l1, l2):
n = min(len(l1), len(l2))
sum1 = sum(l1[:n])
sum2 = sum(l2[:n])
sum1sq = sum(now ** 2 for now in l1)
sum2sq = sum(now ** 2 for now in l2)
sum12 = sum(x * y for x, y in zip(l1, l2))
part1 = n * sum12 - sum1 * sum2
part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))
try:
corr = part1 / part2
return corr
except ZeroDivisionError:
print("Ошибка деления на ноль!")
return

@ -0,0 +1,15 @@
from OKZ1 import reading
from OKZ2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
print("Не удалось считать данные из файлов.")
else:
corr = correlation(arr1, arr2)
if corr is not None:
print(f"Коэффициент корреляции: {corr:.2f}")

@ -0,0 +1,2 @@
4.0 3.0 2.0 1.0 6.0
5.0 6.0 7.0 8.0 9.0

@ -0,0 +1,2 @@
11.0 10.5 10.0 9.5 9.0
8.5 8.0 7.5 7.0 10.0

@ -0,0 +1,136 @@
# Отчет по теме 8
Коваленко Дмитрий, А-01-23
## 8 Модули и структурирование программы
### 8.1 Настройка текущего каталога
```py
import os,sys,imp
os.chdir("/Users/vatarishin/lab_sem_5/python-labs/TEMA8")
os.getcwd()
'/Users/vatarishin/lab_sem_5/python-labs/TEMA8'
```
### 8.2 Создание и использование модулей в среде Python
```py
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> Mod1.perm1
'5'
>>> import Mod1
>>> imp.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
>>> Mod1.perm1
'3'
>>> print(sorted(sys.modules.keys()))
['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
>>> print(sorted(sys.modules.keys()))
['__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
>>> import Mod1
Mod1:Введите значение = 6
Mod1:Значение perm1= 6
>>> sys.modules.pop('Mod1')
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
>>> perm1
'3'
>>> from Mod1 import perm1
Mod1:Введите значение = 7
Mod1:Значение perm1= 7
>>> Mod1
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
>>> perm1
'7'
>>> from Mod2 import beta
>>> g=beta(2)
****BETA****
>>> g
535.4916555247646
>>> print(sorted(sys.modules.keys()))
['Mod1', 'Mod2', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
>>> alpha()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=3
'3'
>>> del al,beta
>>> from Mod2 import alpha as al, beta as bt
>>> del al, bt
>>> from Mod2 import *
>>> tt=alpha()
****ALPHA****
Значение t=0.12
>>> uu=beta(float(tt))
****BETA****
>>> uu
1.4578913609506803
```
### 8.3 Создание многомодульных программ
```py
>>> sys.modules.pop('Mod1')
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
>>> sys.modules.pop('Mod2')
<module 'Mod2' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod2.py'>
>>> import Mod0
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=2
tt= 2
****BETA****
qq= 535.4916555247646
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2'
535.4916555247646
'5'
>>> import MM0
k1,T,k2,Xm,A,F,N=1,2,3,4,5,6,7
y = [0, 0, 0, 0, -3.430711797903516, -4.909726376383112, 0]
```
Проведите следующие эксперименты:
- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha.
- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi.
> Будет выведена ошибка так как `t`, `expi` – локальные переменные, который существуют только внутри функций
- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране.
```py
imp.reload(Mod0)
perm1= 5
new perm1= 555
```
- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq
```py
>>> Mod0.tt *= 2
>>> Mod0.tt
'22'
```

@ -0,0 +1,75 @@
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8
Выполнил: Коваленко Д.М. Проверил: Козлюк Д.А.
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
Первый модуль
```
def reading (file):
nums = []
with open(file) as file:
for line in file:
nums.extend(map(float, line.split()))
return nums
```
Второй модуль
```
import math
def correlation(l1, l2):
n = min(len(l1), len(l2))
sum1 = sum(l1[:n])
sum2 = sum(l2[:n])
sum1sq = sum(now ** 2 for now in l1)
sum2sq = sum(now ** 2 for now in l2)
sum12 = sum(x * y for x, y in zip(l1, l2))
part1 = n * sum12 - sum1 * sum2
part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))
try:
corr = part1 / part2
return corr
except ZeroDivisionError:
print("Ошибка деления на ноль!")
return
```
Третий модуль
```
from OKZ1 import reading
from OKZ2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
print("Не удалось считать данные из файлов.")
else:
corr = correlation(arr1, arr2)
if corr is not None:
print(f"Коэффициент корреляции: {corr:.2f}")
```
Содержимое файлов:
```
data1.txt
4.0 3.0 2.0 1.0 6.0
5.0 6.0 7.0 8.0 9.0
data2.txt
11.0 10.5 10.0 9.5 9.0
8.5 8.0 7.5 7.0 10.0
```
```
>>> import OKZ3
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.52
```

@ -0,0 +1,37 @@
# Индивидуальное контрольное задание по теме 8
Коваленко Дмитрий, А-01-23
## Задание 12
Разработайте анонимную функцию с 3 аргументами: х, a, b, вычисляющую значение exp(-(x-a)2/b)/(2*π*b)1/2. Рассчитайте значения функции в диапазоне значений х от a-3*b1/2 до a+3*b1/2 с шагом 0.2*b1/2 и запишите эти значения в текстовый файл по два значения на строке, разделенных запятыми.
на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
## Решение
Модуль-реализация
```py
from math import pi, exp
calc = lambda x, a, b: exp(-(x - a)**2 / b) / (2 * pi * b)**0.5
```
Модуль-проверка
```py
from IKZ import calc
from numpy import arange
a = int(input('Enter a value: '))
b = int(input('Enter b value: '))
res = []
xRange = arange(a - 3 * b**0.5, a + 3 * b ** 0.5, 0.2 * b ** 0.5)
for i in range(len(xRange)):
res.append(calc(xRange[i], a, b))
with open('IKZ_res.txt', 'w') as file:
resString = ''
for i in range(len(res)):
divider = ',' if i % 2 == 0 else '\n'
resString += f'{res[i]}{divider}'
file.write(resString)
```

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

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

После

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

@ -0,0 +1,7 @@
import M2
from numpy import frombuffer, float64
with open('Res456.bin', 'rb') as file:
data = file.read()
decoded = frombuffer(data, dtype=float64)
print(f'Оценка мат. ожидания {decoded[-2]}\nОценка медианы {decoded[-1]}')

@ -0,0 +1,7 @@
from numpy import median, mean
def func1(SPS, KL):
return sorted(SPS, reverse=KL)
def func2(data):
return median(data), mean(data)

@ -0,0 +1,19 @@
from numpy.random import normal
from math import sqrt
from pylab import plot, show
import M1
print('Введите параметры выборки случайной велечины')
n = int(input('Введите число элементов: '))
m = int(input('Введите мат ожидание: '))
d2 = int(input('Введите дисперсию: '))
data = normal(m, sqrt(d2), n)
KL = int(input('Введите значение бинарного ключа: '))
orderedData = M1.func1(data, KL)
me, mede = M1.func2(orderedData)
with open('Res456.bin', 'wb') as file:
data.tofile(file)
me.tofile(file)
mede.tofile(file)
plot(data)
show()

@ -0,0 +1,10 @@
class Class1: #Объявление класса Class1 в модуле
def zad_zn(self,znach): # 1 Метод класса
self.data=znach # self - ссылка на экземпляр класса Class1
def otobrazh(self): # 2 Метод класса
print(self.data)#Отображение данных экземпляра
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2
print('значение=',self.data)#Отображение данных экземпляра
def otobrazh(objekt): #Объявление самостоятельной функции
print('значение объекта=',objekt)

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

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

@ -0,0 +1,21 @@
class SAU:
def __init__(self, zn_param):
self.param = zn_param
self.ypr = [0, 0]
def zdn_zn(self, upr):
self.x = upr
def model(self):
def inerz(x, T, yy):
return (x + T * yy) / (T + 1)
y0 = self.x - self.ypr[1] * self.param[3] # Обр.связь с усилителем 2
y1 = self.param[0] * y0 # Усилитель1
y2 = inerz(y1, self.param[1], self.ypr[0]) # Инерционное звено1
y3 = inerz(y2, self.param[2], self.ypr[1]) # Инерционное звено2
self.ypr[0] = y2
self.ypr[1] = y3
def otobraz(self):
print('y=', self.ypr[1])

@ -0,0 +1,30 @@
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):
if summa > 0:
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
else:
print("Сумма для повышения оклада должна быть больше нуля.")
def change_department(self, new_department):
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
self.otdel = new_department
def change_position(self, new_position):
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
self.dolzhnost = new_position
@property
def pooshrenia(self):
return self._pooshrenia
def add_encouragement(self, tekst):
self._pooshrenia.append(tekst)
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")

@ -0,0 +1,25 @@
from employee_module import Employee
emp1 = Employee("Сидорова Е.Ю.", "Кафедра Управления и информационных технологий", "Старший преподаватель", 75000)
emp2 = Employee("Бауэр В.Ю.", "Дир. ИВТИ", "Заместитель директора института", 150000)
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
# Операции с сотрудниками
emp1.salary_raise(15000)
emp2.change_department("Дир. ЭНМИ")
emp1.change_position("Заместитель заведующего кафедрой")
emp2.add_encouragement("За преданность делу")
emp1.add_encouragement("За смелость")
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
# Вывод итоговых данных
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
print(f"Поощрения {emp1.fio}: {emp1.pooshrenia}")
print(f"Поощрения {emp2.fio}: {emp2.pooshrenia}")

@ -0,0 +1,230 @@
# Отчет по теме 9
Коваленко Дмитрий А-01-23
## 9. Создание пользовательских классов и объектов
### 9.1 Импорт библиотек и настройка текущего каталога
```py
import os
os.chdir("/Users/vatarishin/lab_sem_5/python-labs/TEMA9")
os.getcwd()
'/Users/vatarishin/lab_sem_5/python-labs/TEMA9'
```
### 9.2 Создание автономного класса
```py
class Class1:
def zad_zn(self, znach):
self.data = znach
def otobrazh(self):
print(self.data)
>>> z1 = Class1()
>>> z2 = Class1()
>>> z1.zad_zn('экз.класса 1')
>>> z2.zad_zn(-632.453)
>>> z1.otobrazh()
экз.класса 1
>>> z2.otobrazh()
-632.453
>>> z1.data = 'Новое значение атрибута у экз. 1'
>>> z1.otobrazh()
Новое значение атрибута у экз. 1
```
### 9.3. Создание класса-наследника
```py
class Class2(Class1):
def otobrazh(self):
print('значение =', self.data)
>>> z3 = Class2()
>>> dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
>>> z3.zad_zn('Совсем новое')
>>> z3.otobrazh()
значение = Совсем новое
>>> z1.otobrazh()
Новое значение атрибута у экз. 1
>>> del z1, z2, z3
```
### 9.4 Использование классов, содержащихся в модулях
```py
>>> from Mod3 import Class1
>>> z4 = Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/vatarishin/lab_sem_5/python-labs/TEMA9/Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
del z4
>>> import Mod3
>>> z4 = Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение = Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта = Объект
```
### 9.5. Использование специальных методов
```py
class Class3(Class2):
def __init__(self,znach):
self.data=znach
def __add__(self,drug_zn):
return Class3(self.data + drug_zn)
def zad_dr_zn(self,povtor):
self.data *= povtor
>>> z5 = Class3('abc')
>>> z5.otobrazh()
значение = abc
>>> z6 = z5 + 'def'
>>> z6.otobrazh()
значение = abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение = abcdefabcdefabcdef
```
### 9.6. Присоединение атрибутов к классу
```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='Иванов И.И.'
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> z7 = Class3(123)
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> dir(z7)==dir(Class3)
False
>>> z7.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']
```
### 9.7 Выявление родительских классов
```py
>>> Class3.__bases__
(<class '__main__.Class2'>,)
>>> Class2.__bases__
(<class '__main__.Class1'>,)
>>> Class1.__bases__
(<class 'object'>,)
>>> object.__bases__
()
>>> 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'>)
```
### 9.8. Создание свойства класса.
```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
>>> exempl.svojstvo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in chten
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
### 9.9
```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 ===
```py
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Вывод:
```
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
```
График сохранен в файле ![Figure_1](Figure_1.png).

@ -0,0 +1,98 @@
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 9
Выполнил: Коваленко Д.М. Проверил: Козлюк Д.А.
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, измене-ния должности и оклада, объявления благодарности.
## Решение
employee_module.py
```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):
if summa > 0:
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
else:
print("Сумма для повышения оклада должна быть больше нуля.")
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}")
```
main.py
```py
from employee_module import Employee
emp1 = Employee("Сидорова Е.Ю.", "Кафедра Управления и информационных технологий", "Старший преподаватель", 75000)
emp2 = Employee("Бауэр В.Ю.", "Дир. ИВТИ", "Заместитель директора института", 150000)
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
# Операции с сотрудниками
emp1.salary_raise(15000)
emp2.change_department("Дир. ЭНМИ")
emp1.change_position("Заместитель заведующего кафедрой")
emp2.add_encouragement("За преданность делу")
emp1.add_encouragement("За смелость")
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
# Вывод итоговых данных
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
print(f"Поощрения {emp1.fio}: {emp1.pooshrenia}")
print(f"Поощрения {emp2.fio}: {emp2.pooshrenia}")
```
Вывод:
```
=== НАЧАЛЬНЫЕ ДАННЫЕ ===
Сидорова Е.Ю., Кафедра Управления и информационных технологий, Старший преподаватель, оклад: 75000
Бауэр В.Ю., Дир. ИВТИ, Заместитель директора института, оклад: 150000
=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===
Оклад сотрудника Сидорова Е.Ю. увеличен на 15000. Новый оклад: 90000
Сотрудник Бауэр В.Ю. переведен из отдела Дир. ИВТИ в отдел Дир. ЭНМИ.
Должность сотрудника Сидорова Е.Ю. изменена с Старший преподаватель на Заместитель заведующего кафедрой.
Сотрудник Бауэр В.Ю. теперь имеет поощрение: За преданность делу
Сотрудник Сидорова Е.Ю. теперь имеет поощрение: За смелость
=== ИТОГОВЫЕ ДАННЫЕ ===
Сидорова Е.Ю., Кафедра Управления и информационных технологий, Заместитель заведующего кафедрой, оклад: 90000
Бауэр В.Ю., Дир. ЭНМИ, Заместитель директора института, оклад: 150000
=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===
Поощрения Сидорова Е.Ю.: ['За смелость']
Поощрения Бауэр В.Ю.: ['За преданность делу']
```

@ -0,0 +1,66 @@
# Индивидуальное контрольное задание по теме 9
Коваленко Дмитрий, А-01-23
## Задание 12
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргумент - список SPS и бинарный ключ KL; функция должна создавать новый список с элементами из SPS, упорядоченными по возрастанию (при KL=0) или по убыванию величины (при KL=1);
- функция 2: аргумент - список или кортеж; функция должна рассчитать по нему медиану и среднее значение.
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
- по запросу вводятся параметры выборки случайной величины, подчиняющейся нормальному распределению: N - число элементов выборки, M - её математическое ожидание, D2-дисперсия,
- создаётся выборка с заданными параметрами,
- у пользователя запрашивается значение бинарного ключа;
- с помощью функции 1 по выборке рассчитывается упорядоченный ряд и по нему - медиана и среднее значение;
- с помощью функции 2 по выборке рассчитываются оценка матожидания и медиана;
- исходная выборка и результаты расчета записываются в бинарный файл Res456.bin.
- выборка представляется в виде графика.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
4) Проведите расчеты при 3-х разных наборах значений параметров.
## Решение
Модуль-реализация M1
```py
from numpy import median, mean
def func1(SPS, KL):
return sorted(SPS, reverse=KL)
def func2(data):
return median(data), mean(data)
```
Модуль-реализация M2
```py
from numpy.random import normal
from math import sqrt
from pylab import plot, show
import M1
print('Введите параметры выборки случайной велечины')
n = int(input('Введите число элементов: '))
m = int(input('Введите мат ожидание: '))
d2 = int(input('Введите дисперсию: '))
data = normal(m, sqrt(d2), n)
KL = int(input('Введите значение бинарного ключа: '))
orderedData = M1.func1(data, KL)
me, mede = M1.func2(orderedData)
with open('Res456.bin', 'wb') as file:
data.tofile(file)
me.tofile(file)
mede.tofile(file)
plot(data)
show()
```
Модуль-проверка
```py
import M2
from numpy import frombuffer, float64
with open('Res456.bin', 'rb') as file:
data = file.read()
decoded = frombuffer(data, dtype=float64)
print(f'Оценка мат. ожидания {decoded[-2]}\nОценка медианы {decoded[-1]}')
```

@ -0,0 +1,14 @@
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
Загрузка…
Отмена
Сохранить