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

...

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

Автор SHA1 Сообщение Дата
f306323f80 done lab9 2025-12-19 11:56:29 +03:00
a9286dbd80 done lab8 2025-12-05 12:38:31 +03:00
924bdbc20d done lab7 2025-12-05 10:52:25 +03:00
9f07039661 lab6 and test module 2 2025-11-21 13:04:03 +03:00
35a8e9c4e5 done lab 5 2025-11-07 10:28:57 +03:00
2ff5382146 re:lab4; re:task; test 2025-10-24 10:46:52 +03:00
6a5e2f9a4c rework report lab3, test lab3; report and task lab4 2025-10-10 12:18:48 +03:00
4bc65ebc86 lab 3 report and task; redact version of example task.md 2025-10-09 23:24:42 +03:00
c5c51546df lab2 redact and test.md lab2 2025-09-26 10:45:15 +03:00
c2bb92e32d report lab2 and task lab2 2025-09-25 21:19:47 +03:00
7b5538000c lab1 final and task.md 2025-09-12 11:20:03 +03:00
d23001446f re: lab1 2025-09-12 10:57:15 +03:00
2163eef623 revert c31b925579
revert lab1
2025-09-12 07:54:43 +00:00
c31b925579 lab1 2025-09-12 10:52:37 +03:00
78 изменённых файлов: 4311 добавлений и 12 удалений

Просмотреть файл

@@ -1,15 +1,10 @@
# Общее контрольное задание по теме 0 # Общее контрольное задание по теме
Иванов Иван, А-01-25 Махнов Георгий, А-01-23
## Задание ## Задание
Создать переменную `name`, содержащую ваше имя. Определить тип этой переменной.
## Решение ## Решение
```py
>>> name = 'Иван'
>>> type(name)
'str'
```

Просмотреть файл

@@ -1,6 +1,6 @@
# Индивидуальное контрольное задание по теме 0 # Индивидуальное контрольное задание по теме 0
Иванов Иван, А-01-25 Махнов Георгий, А-01-23
## Задание ## Задание

6
TEMA1/prb0.py Обычный файл
Просмотреть файл

@@ -0,0 +1,6 @@
#Программа по Теме 1 Махнов Георгий
print('Hello')
name = input("Как Вас зовут? ")
print("Привет,", name)
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA1")

112
TEMA1/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,112 @@
# Отчет по теме 1
Махнов Георгий, А-01-23
## Тема 1. Знакомство с интерпретатором и интерактивной оболочкой IDLE
## 2 задание
```
PS C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA1> & C:/Users/gmack/AppData/Local/Programs/Python/Python312/python.exe
Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Ctrl click to launch VS Code Native REPL
>>>
```
## 3 задание
```
>>> print('Hello')
Hello
```
## 4 задание
```
>>> h=input('Your name=')
Your name=Gosha
```
## 5 задание
```
>>> exit()
```
## 8 задание
```
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA1")
```
## 10 задание
![Файл prb0.py](prb0.py)
```
```
## 11 задание
```PS C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA1> python prb0.py```
```
Hello
Как Вас зовут? Gosha
Привет, Gosha
```
## 12 задание.
Открыл каталог __pycaсhe__, нашел там файл Pr0.cpython-34.pyc
После открытия в тектстовом редакторе обнаружил символы - байт-код, который был создан при запуске программы Pr0.py и служит для ускорения повторного запуска программы
## 14 задание
```
>>> help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
```
```
>>> help(print); help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
```
## 15 задание
```
>>> import prb0
Hello
Как Вас зовут? Gosha
Привет, Gosha
>>> import tdemo_chaos
```

11
TEMA1/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,11 @@
# Общее контрольное задание по теме 1
Махнов Георгий, А-01-23
## Задание
Если требуется повторить с небольшим изменением ранее введенную инструкцию, работая в командном окне IDLE, как это лучше сделать?
## Ответ на вопрос
Можно в командном окне IDLE навести курсор на нужную команду, нажать Enter и редактированием изменить её на нужную.

352
TEMA2/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,352 @@
# Отчет по теме 2
Махнов Георгий, А-01-23
## Тема 2. Базовые типы объектов
## задание 2
#### Изучим операторы присваивания, функцию для определения существующих объектов dir и функцию для определения типа объекта type
```
>>> f1 = 16; f2 = 3
>>> f1,f2
(16, 3)
>>> f1;f2
16
3
>>> 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__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> type(f2)
<class 'int'>
>>> del f1,f2
>>> f1,f2
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
f1,f2
NameError: name 'f1' is not defined
```
## задание 3.
#### Изучим правила именования объектов в Python
```
>>> ggl = ,6
SyntaxError: invalid syntax
>>> ggl = 1,6
>>> hh='Строка'
>>> 73sr=3
SyntaxError: invalid syntax
>>> and=7
SyntaxError: invalid syntax
```
## задание 4.
#### Выведем список ключевых слов
```
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', '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']
```
## задание 5.
#### Выведем список встроенных идентификаторов
```
>>> 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', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all',
'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals',
'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round',
'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
```
#### Изучим и проверим назначение функций abs, len, max, min, pow, round, sorted, sum, zip
```
>>> x = -3
>>> abs(x)
3
>>> a = [1,2,3,4,5,8]
>>> len(a)
6
>>> max(a)
8
>>> min(a)
1
>>> pow(x,2)
9
>>> round(2.1989)
2
>>> b = [13,5,2,9,1,0]
>>> sorted(b)
[0, 1, 2, 5, 9, 13]
>>> sum(a)
23
>>> x = zip(a,b)
>>> print(list(x))
[(1, 13), (2, 5), (3, 2), (4, 9), (5, 1), (8, 0)]
```
## задание 6.
#### Убедимся, что Python чувствителен к регистру и что переменные, которые различаются размером буквы, будут разными
```
>>> Gg1=45
>>> gg1,Gg1
(1.6, 45)
```
## задание 7.
#### Изучим простые базовые типы объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
### 7.1 Логический объект
```
>>> bb1=True; bb2=False
>>> bb1;bb2
True
False
>>> type(bb1)
<class 'bool'>
```
### 7.2 Целочисленные, комплексные объекты, объекты с разной системой счисления
```
>>>ii1=-1234567890
>>>ff1=-8.9876e-12
>>>dv1=0b1101010
>>> type(dv1)
<class 'int'>
>>>vsm1=0o52765
>>>shest1=0x7109af6
>>>cc1=2-3j
>>>a=3.67; b=-0.45
>>>cc2=complex(a,b)
>>> cc2
(3.67-0.45j)
```
### 7.3 Строки
```
>>>ss1='Это - строка символов'
>>>ss1="Это - строка символов"
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>> print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1b= 'Меня зовут: \n Георгий'
>>> print(ss1b)
Меня зовут: \n Георгий
>>>mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
>>>print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
>>> ss1[0]
'Э'
>>> ss1[8]
'р'
>>> ss1[-2]
'о'
>>> ss1[6:9]
'стр'
>>> ss1[13:]
'символов'
>>> ss1[5:-8]
' строка '
>>> ss1[3:17:2]
' тоасм'
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[17] = ss1[-4]
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
ss1[17] = ss1[-4]
TypeError: 'str' object does not support item assignment
>>> ss1[4]='=' # Будет диагностика!
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
ss1[4]='=' # Будет диагностика!
TypeError: 'str' object does not support item assignment
>>> ss1b = ss1b[0:4] + ss1b[11:] + " " + ss1b[5:10]
>>> ss1b
'Меня \n Георгий зовут'
```
#### Самостоятельно придумаем значения и создадим объекты разных типов. После этого отобразим типы и значения созданных объектов.
```
>>> six_int = 0x7109af6
>>> num_one = 1
>>> num_two = 3.75
>>> compl = complex(num_one, num_two)
>>> print(f"six_int => {six_int} => {type(six_int)} \n num_one => {num_one} => {type(num_one)}
\n num_two => {num_two} => {type(num_two)} \n compl => {compl} => {type(compl)}")
six_int => 118528758 => <class 'int'>
num_one => 1 => <class 'int'>
num_two => 3.75 => <class 'float'>
compl => (1+3.75j) => <class 'complex'>
```
## задание 8. Изучим более сложные типы объектов: списки (list), кортежи (tuple), словари (dict), множества (set).
### 8.1 Списки (list)
```
>>> spis1=[111,'Spisok',5-9j]
>>> stup=[0,0,1,1,1,1,1,1,1]
>>> spis=[1,2,3,4,
5,6,7,
8,9,10]
>>> spis1[-1]
(5-9j)
>>> stup[-8::2]
[0, 1, 1, 1]
>>> spis1[1]='Список'
>>> spis1
[111, 'Список', (5-9j)]
>>> len(spis1)
3
>>> spis1[1]='Список'
>>> spis1
[111, 'Список', (5-9j)]
>>> len(spis1)
3
>>> spis1.append('New item')
>>> spis1+["New item"]
[111, 'Список', (5-9j), 'New item', 'New item']
>>> spis1.append(ss1b)
>>> spis1
[111, 'Список', (5-9j), 'New item', 'Меня \n Георгий зовут']
>> spis1.pop(1)
'Список'
>>> spis1
[111, (5-9j), 'New item', 'Меня \n Георгий зовут']
>>> spis1.extend([1,2,3])
>>> spis1
[111, (5-9j), 'New item', 'Меня \n Георгий зовут', 1, 2, 3]
>>> spis_1 = spis1.copy()
>>> spis_1
[111, (5-9j), 'New item', 'Меня \n Георгий зовут', 1, 2, 3]
>>> spis_1.index(1)
4
>>> spis_1.count(3)
1
>>> spis_1.reverse()
>>> spis_1
[3, 2, 1, 'Меня \n Георгий зовут', 'New item', (5-9j), 111]
>>> spis_1.clear()
>>> spis_1
[]
>>> spis_1.extend([1,2,3,2,5,4,6])
>>> spis_1.sort()
>>> spis_1
[1, 2, 2, 3, 4, 5, 6]
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2
[[111, (5-9j), 'New item', 'Меня \n Георгий зовут', 1, 2, 3], [4, 5, 6, 7]]
>>> spis2[0][1]
(5-9j)
>>> spis2[0][1]=78
>>> spis2[0][1]
78
>>> spis1
[111, 78, 'New item', 'Меня \n Георгий зовут', 1, 2, 3]
```
#### Придумаем и создадим свой объект-список, элементами которого будут объекты разных типов: число, строка, логическое значение, список
```
>>> rand_list = [2, 'stringgg', True, [1,2,3]]
>>> rand_list
[2, 'stringgg', True, [1, 2, 3]]
```
### 8.2 Кортежи (tuple)
```
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1
(222, 'Kortezh', (77+8j))
>>> kort1= kort1+(1,2)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2)
>>> kort1 = kort1 + (ss1b,)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня \n Георгий зовут')
>>> kort2=kort1[:2]+kort1[3:]
>>> kort2
(222, 'Kortezh', 1, 2, 'Меня \n Георгий зовут')
>>> kort2.index(2)
3
>>> 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
```
#### Создадим объект-кортеж с элементами разных типов: число, строка, список, кортеж.
```
>>> kort_rand = (1, 'string', [1,4,2], (3,'r'))
>>> kort_rand
(1, 'string', [1, 4, 2], (3, 'r'))
```
### 8.3 Словарь (dict)
```
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 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'}
>>> dic2
{1: 'mean', 2: 'standart deviation', 3: 'correlation'}
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>> dic3
{'statistics': {1: 'mean', 2: 'standart deviation', 3: 'correlation'}, 'POAS': ['base', 'elementary', 'programming']}
>>> dic3['statistics'][2]
'standart deviation'
>>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>> dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня \n Георгий зовут'}
>>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>> dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня \n Георгий зовут'}
```
#### Самостоятельно придумаем объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. В словаре будет всего лишь 5 объектов, так как функция zip будет объединять с первых элементов обоих объектов до тех пор, пока не закончится значения одного из объектов
```
>>> cort_1 = {87, 83, 84, 85, 95, 82, 86}
>>> list_1 = ["ESU", "IAD", "TAU", "NODES", "Nets"]
>>> dict_1 = dict(zip(cort_1, list_1))
>>> dict_1
{82: 'ESU', 83: 'IAD', 84: 'TAU', 85: 'NODES', 86: 'Nets'}
```
### 8.4 Множество (set)
```
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'линия связи', 'двигатель', 'датчик', 'микропроцессор'}
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1
{'датчик', 'линия связи', 'реле', 'микропроцессор', 'двигатель'}
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'датчик', 'реле', 'микропроцессор', 'двигатель'}
```
#### Самостоятельно придумаем объект-множество с элементами разных типов и попробуйте с ним выполнить разные операции.
```
>>> mnoz_2 = {2, 15, 'hi', 15, 7j-13, 'hi', True}
>>> mnoz_2
{True, 2, 'hi', (-13+7j), 15}
>>> mnoz_2.remove(2)
>>> mnoz_2
{True, 'hi', (-13+7j), 15}
>>> mnoz_2.add(2)
>>> mnoz_2
{True, 2, 'hi', (-13+7j), 15}
>>> len(mnoz_2)
5
```

57
TEMA2/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,57 @@
# Общее контрольное задание по теме
Махнов Георгий, А-01-23
## Задание
Общее контрольное задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
• Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
• Создать переменную со значением, совпадающим с первой буквой из familia.
• Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
• Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
• Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
• Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
• Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
• Создайте словарь dict_bas, в котором ключами являются русские названия типов перемен-ных, использованных в предыдущих операторах, а значениями – ранее созданные пере-менные, соответствующие этим типам.
## Решение
```
>>> familia = "Mahnov"
>>> familia
'Mahnov'
>>> firstFamiliaLetter = familia[0]
>>> firstFamiliaLetter
'M'
>>> sp_kw = keyword.kwlist
>>> sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> kort_nam = ("Георгий", "Данил", "Дима", "Артём")
>>> kort_nam
('Георгий', 'Данил', 'Дима', 'Артём')
>>> type(kort_nam)
<class 'tuple'>
>>> kort_nam += ("Паша","Максим")
>>> kort_nam
('Георгий', 'Данил', 'Дима', 'Артём', 'Паша', 'Максим')
>>> kort_nam.count("Дима")
1
>>> dict_bas = {"Строка":familia,"Список":sp_kw,"Кортеж":kort_nam}
>>> dict_bas
{'Строка': 'Mahnov', 'Список': ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'], 'Кортеж': ('Георгий', 'Данил', 'Дима', 'Артём', 'Паша', 'Максим')}
```

31
TEMA2/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,31 @@
# Индивидуальное контрольное задание по теме 2
Махнов Георгий, А-01-23
## Задание 3
Пусть созданы два объекта с помощью инструкций:
b1={'d':23,'f':11,'k':45}
b2={'u':6,'v':67}
К какому классу относятся эти объекты? Как создать объект того же класса со всеми 5 элементами?
## Решение
Оба объекта относятся к классу словарь (dict), так как в них присутствуют пара "ключ:значение". Также это можно проверить путем команды:
```
>>> b1={'d':23,'f':11,'k':45}
>>> b2={'u':6,'v':67}
>>> type(b1)
<class 'dict'>
>>> type(b2)
<class 'dict'>
```
Создать объект класса dict со всеми 5 элементами можно путем создания нового объекта с добавлением распакованных словарей b1 и b2
```
>>> b_combined = {**b1, **b2}
>>> b_combined
{'d': 23, 'f': 11, 'k': 45, 'u': 6, 'v': 67}
```

509
TEMA3/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,509 @@
# Отчет по теме 3
Махнов Георгий, А-01-23
## Тема 3. Операции с объектами
## Задание 2 Преобразование простых базовых типов объектов.
### 2.1 Преобразование в логический тип с помощью функции bool(<Объект>).
```
>>> logiz1=bool(56)
>>> logiz2=bool(0)
>>> logiz3=bool("Beta")
>>> logiz4=bool("")
>>>
>>> type(logiz1)
<class 'bool'>
>>> type(logiz2)
<class 'bool'>
>>> type(logiz3)
<class 'bool'>
>>> type(logiz4)
<class 'bool'>
```
### 2.2 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления осуществ-ляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объ-ект>]). По умолчанию система счисления принимается десятичной.
```
>>> tt1=int(198.6) #Отбрасывается дробная часть
>>> tt2=int("-76")
>>> tt3=int("B",16)
>>> tt3=int("B",16)
>>> tt4=int("71",8)
>>> tt1
198
>>> tt2
-76
>>> tt3
11
>>> tt4
57
>>> 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")
>>> flt1
789.0
>>> flt2
-678.0
>>> flt3
inf
>>> flt4
-inf
```
### 2.3 Преобразование десятичных чисел в другие системы счисления
```
>>> hh=123
>>> dv1=bin(hh)
>>> vos1=oct(hh)
>>> shs1=hex(hh)
>>> hh
123
>>> dv1
'0b1111011'
>>> vos1
'0o173'
>>> shs1
'0x7b'
>>> int(dv1, 2)
123
>>> int(vos1, 8)
123
>>> int(shs1, 16)
123
```
## Задание 3.Изучим преобразования более сложных базовых типов объектов
### 3.1 Преобразование в строку символов с помощью функции 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})
>>> strk1
'23.6'
>>> strk2
'True'
>>> strk3
"['A', 'B', 'C']"
>>> strk4
"('A', 'B', 'C')"
>>> strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
### 3.2 Преобразование элементов объекта в список с помощью функции list(<Объект>).
```
>>> spis2=list((124,236,-15,908))
>>> spis3=list({"A":1,"B":2,"C":9})
>>> spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2
[124, 236, -15, 908]
>>> spis3
['A', 'B', 'C']
>>> spis_val = list({"A":1,"B":2,"C":9}.values())
>>> spis_val
[1, 2, 9]
```
### 3.3 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
```
>>> kort7=tuple('Строка символов')
>>> kort8=tuple(spis2)
>>> kort9=tuple({"A":1,"B":2,"C":9})
>>> kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>> kort8
(124, 236, -15, 908)
>>> kort9
('A', 'B', 'C')
```
### 3.4 Удаление объектов.
```
>>> del strk5, kort8
>>> strk5, kort8
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>> kort8
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
>>> my_fio = "Махнов Г.А."
>>> list_fio = list(my_fio)
>>> list_fio
['М', 'а', 'х', 'н', 'о', 'в', ' ', 'Г', '.', 'А', '.']
>>> tuple_fio = tuple(list_fio)
>>> tuple_fio
('М', 'а', 'х', 'н', 'о', 'в', ' ', 'Г', '.', 'А', '.')
>>> new_str_fio = "".join(tuple_fio)
>>> new_str_fio
'Махнов Г.А.'
```
## Задание 4 Арифмитические операции
### 4.1 Сложение и вычитание (+ и -)
```
>>> 12+7+90
109
>>> 5.689e-1 - 0.456
0.11289999999999994
>>> 23.6+54
77.6
>>> 14-56.7+89
46.3
```
### 4.2 Умножение (*)
```
>>> -6.7*12
-80.4
```
### 4.3 Деление (/).
```
>>> -234.5/6
-39.083333333333336
>>> a=178/45
>>> type(a)
<class 'float'>
>>> a
3.9555555555555557
```
### 4.4 Деление с округлением вниз (//).
```
>>> b=178//45
>>> c=-24.6//12.1
>>> b, c
(3, -3.0)
>>> bc = 115//34
>>> bc
3
```
### 4.5 Получение остатка от деления (%).
```
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
```
### 4.6 Возведение в степень (**).
```
>>> 14**3
2744
>>> e = 2.7**3.6
>>> e
35.719843790663525
>>> compl = complex(3, 6)
>>> compl
(3+6j)
>>> compl**2
(-27+36j)
>>> compl%33
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
>>> compl//3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
>>> compl/3
(1+2j)
>>> compl+13
(16+6j)
>>> compl+11.4
(14.4+6j)
```
## Задание 5 Операции с двоичными представлениями целых чисел
### 5.1 Двоичная инверсия (~).
```
>>> dv1 = 9
>>> dv2 = ~dv1
>>> dv2
-10
```
~1001
0110
1111 = 2^4
-1001
0110 = ~1001
~x = (2^N - 1 - x) = -(x+1)
Т.к. двоичная инверсия преобразует число по формуле -(x+1), где x - заданное число, то при задании числа 9 двоичная инверсия преобразует его в -10
### 5.2 Двоичное «И» (&)
```
>>> 7&9
1
>>> 7&8
0
```
### 5.3 Двоичное «ИЛИ» (|)
```
>>> 7|9
15
>>> 7|8
15
>>> 14|5
15
```
### 5.4 5.4. Двоичное «исключающее ИЛИ»(^)
```
>> 14^5
11
```
### 5.5 Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с допол-нением нулями, соответственно справа или слева.
```
>>> h=14
>>> g = h<<2
>>> g
56
>>> bin(g)
'0b111000'
>>> g1=h>>1
>>> g1
7
>>> g2=h>>2
>>> g2
3
```
## Задание 6. Операции при работе с последовательностями (строками, списками, кортежами).
### 6.1 Объединение последовательностей (конкатенация)(+)
```
>>> 'Система ' +'регулирования'
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2 Повторение (*)
```
>>> 'ля-'*5
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99
>>> signal2=(0,)*3+(1,)*5+(0,)*7
>>> 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, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
### 6.3 Проверка наличия заданного элемента в последовательности (in)
```
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka
True
>>> 'ку' in ['ку','-']*3
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
### 6.4 Подстановка значений в строку с помощью оператора «%»
#### Пример 1
```
>>> stroka='Температура = %g %s %g'
>>> stroka
'Температура = %g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
#### Пример 2
```
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## Задание 7 Оператор присваивания
### 7.1 Обычное присваивание значения переменной (=)
```
>>> zz = -12
>>> zz
-12
```
### 7.2 Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```
>>> zz+=5
>>> zz
-7
>>> zz-=3
>>> zz
-10
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> stroka
'Система регулирования'
```
### 7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```
>>> zz/=2
>>> zz
-5.0
>>> zz*=5
>>> zz
-25.0
```
### 7.4 Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведе-ния в степень(**=)
```
>>> zz//=5
>>> zz
-5.0
>>> zz%=2
>>> zz
1.0
>>> zz+=1
>>> zz**=3
>>> zz
8.0
```
### 7.5 Множественное присваивание
```
>>> w=v=10
>>> w,v
(10, 10)
>>> n1,n2,n3=(11,-3,'all')
>>> n1,n2,n3
(11, -3, 'all')
>>> w=v=[1,2,3]
>>> w,v
([1, 2, 3], [1, 2, 3])
>>> w=v="str"
>>> w,v
('str', 'str')
>>> w=v={1:3, 2:8}
>>> w,v
({1: 3, 2: 8}, {1: 3, 2: 8})
>>> w=v={1,2,3}
>>> w,v
({1, 2, 3}, {1, 2, 3})
```
## Задание 8 8. Логические операции – при создании логических выражений, дающих в результате вычисле-ния значения True или False.
### 8.1 Операции сравнение: равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=) – придумаем примеры этих операций. Сравним ранее созданные переменные w и v.
```
>>> 1==1
True
>>> 1!=1
False
>>> 1<1
False
>>> 1>1
False
>>> 1<=1
True
>>> 1>=1
True
>>> w==v
True
```
### 8.2 Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
```
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> 56 in dic1.values()
True
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```
### 8.3 Создание больших логических выражений с использованием соединительных слов: логиче-ское «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
```
>>> a=17
>>> b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
>>> (a<b) or (a>=b) and (a==b)
```
### 8.4 Проверка ссылок переменных на один и тот же объект (is).
```
>>> w=v=10
>>> w is v
True
>>> w1 = ["A", "B"]
>>> v1 = ["A", "B"]
>>> w1 is v1
False
```
w1 и v1 не являются одним и тем же объектом в памяти, поэтому is выдал ответ False
## Задание 9 Операции с объектами, выполняемые с помощью методов.
```
>>> stroka='Микропроцессорная система управления'
>>> dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
### 9.1 Методы для работы со строками.
```
>>> stroka.find('пр')
5
>>> stroka.count("с")
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ')
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22)
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
>>> strk1='Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
>>> strk2
'Момент времени {1}, значение = {0}:{2}'
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
>>> strk3='Момент времени {num}, значение = {znch}'
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2 Методы для работы со списками.
```
>>> spsk = [23,56,"str", 10, True]
>>> dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> spsk.append('c')
>>> spsk.insert(2,'a')
>>> spsk.count('a')
1
>>> spsk
[23, 56, 'a', 10, True, 'c']
```
### 9.3 Самостоятельно создадим кортеж и изучим применение его методов.
```
>>> my_cort = (1, "hi", 13, 5,86)
>>> dir(my_cort)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>> my_cort.count(13)
1
>>> my_cort.index("hi")
1
```
### 9.4 Также самостоятельно изучим методы словарей и множеств
```
>>> my_dict = {"math":13, "physics": 11, "history": 15}
>>> dir(my_dict)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> my_set = {31, 12, "set", 1,45}
>>> dir(my_set)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__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']
```

55
TEMA3/task.md Обычный файл
Просмотреть файл

@@ -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, определить, что можно получить с применением этих методов.
• Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
```
>>> int("45", 8)
37
>>> D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
>>> D
{'усиление': 23, 'запаздывание': 12, 'постоянная времени': 78}
>>> keys_d = list(D.keys())
>>> values_d = list(D.values())
>>> keys_d, values_d
(['усиление', 'запаздывание', 'постоянная времени'], [23, 12, 78])
>>> tuple_d = tuple(keys_d + values_d)
>>> tuple_d
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Кортежи являются неизменяемыми, в то время как списки можно изменить.
```
>>> ((1768//24.8)%3)**2.4
5.278031643091577
>>> ((~(13 & 27)) ^ 14) << 2
-32
>>> kolebat = ["колебат"]*4
>>> kolebat
['колебат', 'колебат', 'колебат', 'колебат']
>>> 'колебат' in (kolebat[1]+kolebat[2])
True
>>> D.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
>>> D.values()
dict_values([23, 12, 78])
>>> str_d = "Создать объект - символьную строку с текстом данного предложения."
>>> str_list = str_d.split()
>>> str_list
>>> str_list[str_list.index("-")] = ","
>>> str_list.remove("данного")
>>> str_list
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения.']
```

55
TEMA3/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,55 @@
# Тест по модулю 1
Махнов Георгий, А-01-23
## Задание
M1_10
1) Какова роль компилятора в среде Python? Чем отличаются файлы с расширением .pyc от файлов с расширением .py?
2) Напишите инструкцию, создающую список со словами из данного предложения. Подсчитайте и отобразите на экране число слов.
3) Создайте кортеж с именами 10 любых студентов вашей группы. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
4) Превратите кортеж во множество. Подсчитайте число элементов множества и отобразите на экране с помощью формата по шаблону: "Во множестве ХХ студентов".
5) Напишите инструкцию, создающую строку из элементов списка из п.2. Отобразите строку на экране.
## Решение
1) Компилятор в Питоне преобразует исходный код в байт-код, который может быть выполнен компьютером и помогает повысить скорость и производительность. Файл .pyc отличается от файла .py тем, что в последнем содержится читаемый человеком код, и служит для разработки, в то время как .pyc содержит в себе байт-код и служит для ускорения запуска программы.
2)
```
>>> sttr = "Напишите инструкцию, создающую список со словами из данного предложения."
>>> list_sttr = list(sttr.split())
>>> list_sttr
['Напишите', 'инструкцию,', 'создающую', 'список', 'со', 'словами', 'из', 'данного', 'предложения.']
>>> len(list_sttr)
9
```
3)
```
>>> fio_tuple = ('Дима', 'Данил','Паша','Лиза','Георгий','Катя','Максим','Вадим','Артем','Никита')
>>> fio_tuple
('Дима', 'Данил', 'Паша', 'Лиза', 'Георгий', 'Катя', 'Максим', 'Вадим', 'Артем', 'Никита')
>>> type(fio_tuple)
<class 'tuple'>
>>> dir(fio_tuple)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
```
4)
```
>>> list_tuple = set(fio_tuple)
>>> list_tuple
{'Паша', 'Максим', 'Артем', 'Данил', 'Никита', 'Лиза', 'Дима', 'Вадим', 'Катя', 'Георгий'}
>>> print("Во множестве ", len(list_tuple), " студентов")
Во множестве 10 студентов
```
5)
```
>>> print(" ".join(list_sttr))
Напишите инструкцию, создающую список со словами из данного предложения.
```

Двоичные данные
TEMA4/Ris1.png Обычный файл

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

После

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

Двоичные данные
TEMA4/Ris2.png Обычный файл

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

После

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

Двоичные данные
TEMA4/image-1.png Обычный файл

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

После

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

Двоичные данные
TEMA4/image-2.png Обычный файл

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

После

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

Двоичные данные
TEMA4/image.png Обычный файл

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

После

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

293
TEMA4/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,293 @@
# Отчет по теме 4
Махнов Георгий, А-01-23
## Тема 4. Встроенные функции
### 2.1. Функция round – округление числа с заданной точностью.
```
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> type(round(123.456,0))
<class 'float'>
```
Ответы различаются тем, что в первом вызове мы округляем до 1 знака после запятой, во втором вызове мы округляем до 0 знака после запятой (т.е. до целого числа)
```
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'>
```
### 2.2. Функция range – создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1.
```
>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
>>> list(gg)
[76, 85, 94, 103, 112, 121]
>>> list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
Получается объект с целыми числами с шагом 1 от 0 до 22.
### 2.3. Функция zip – создание общего объекта, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей (zip – застежка-«молния»)
```
>>> qq = ['Махнов','Лазарев','Коваленко','Иванов']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x0000018777428980>
>>> tuple(ff)
((76, 'Махнов'), (85, 'Лазарев'), (94, 'Коваленко'), (103, 'Иванов'))
>>> ff[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'zip' object is not subscriptable
```
В кортеже содержится 4 элемента, так как zip() объединяет 2 объекта по длине меньшего из них (в нашем случае qq, 4 объекта).
### 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.
```
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=13.48
>>> dan
-88.6
```
### 2.5. Функция exec – чтение и выполнение объекта-аргумента функции.
```
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
```
exec() отличается от eval() тем, что eval() выполняет выражения (5*fff-156, 12+fff и т.д.), а exec() выполняет инструкции (к примеру input())
### 2.6. Самостоятельно изучите и попробуйте применить функции abs, pow, max, min, sum, divmod, len, map.
```
>>> abs(-13)
13
>>> pow(-13, 2)
169
>>> max(-13, 12)
12
>>> min(-13, 12)
-13
>>> sum([-13, 12])
-1
>>> divmod(13, 3)
(4, 1)
>>> list(map(int, [14.3, 15.6]))
[14, 15]
```
## 3. Функции из стандартного модуля math – совокупность разнообразных математических функций.
```
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign',
'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
>>> from math import *
>>> sin(pi/2)
1.0
>>> acos(0.5)
1.0471975511965979
>>> degrees(13)
744.8451336700703
>>> radians(pi/2)
0.027415567780803774
>>> exp(3)
20.085536923187668
>>> log(4)
1.3862943611198906
>>> log(4,2)
2.0
>>> log10(4)
0.6020599913279624
>>> ceil(3.1)
4
>>> ceil(-13.3)
-13
>>> floor(-13.3)
-14
>>> pi
3.141592653589793
>>> sin(2*pi/(7+exp(0.23)))
0.6895048136223223
```
### 4. Функции из модуля cmath – совокупность функций для работы с комплексными числами.
```
>>> import cmath
>>> from cmath import *
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1-0.5j)
-0.4636476090008061
```
### 5. Стандартный модуль random – совокупность функций для выполнения операций с псевдослу-чайными числами и выборками.
```
>>> from random import *
>>> dir(random)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> help(seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>> seed()
```
seed() инициализирует начальное состояние генератора псевдослучайных чисел, для воспроизводимости результатов и представления случайных параметров. Без заадния seed() начальное состояние будет зависить от времени запуска программы или же текущего времени
```
>>> random()
0.9886498397075144
>>> uniform(1, 4)
2.780130303169699
>>> randint(1, 5)
5
>>> gauss(1, 4)
-1.8813369397077917
>>> lst = [1,4,3,5,6]
>>> shuffle(lst)
>>> print(lst)
[4, 6, 3, 1, 5]
>>> sample(lst, 3)
[3, 1, 5]
>>> betavariate(1, 3)
0.13265164490875223
>>> gammavariate(1,3)
6.693731601234578
>>> [uniform(1,3), gauss(1,3), betavariate(1,3), gammavariate(1,3)]
[2.727738971034954, 0.6065095462022692, 0.454597873888903, 1.6408773406150745]
```
### 6. Функции из модуля time – работа с календарем и со временем.
```
>>> from time import *
>>> dir(time)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> c1 = time()
>>> c1
1760084354.1531947
>>> c2=time()-c1
>>> c2
7.051163673400879
>>> gmtime()
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=8, tm_min=19, tm_sec=40, tm_wday=4, tm_yday=283, tm_isdst=0)
>>> dat = gmtime()
>>> dat.tm_mon
10
>>> dat.tm_hour, dat.tm_min
(8, 20)
>>> localtime()
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=11, tm_min=21, tm_sec=3, tm_wday=4, tm_yday=283, tm_isdst=0)
>>> asctime(localtime())
'Fri Oct 10 11:21:55 2025'
>>> ctime(c1)
'Fri Oct 10 11:19:14 2025'
>>> sleep(3)
>>> mktime(localtime())
1760084701.0
```
### 7. Графические функции.
```
>>> import pylab
>>> x=list(range(-3,55,4))
>>> t=list(range(15))
>>> pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000001E04A97D948>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show()
```
![alt text](image.png)
```
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x000001E04B72CDC8>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x000001E04B8746C8>]
>>> pylab.show()
```
![alt text](Ris1.png)
```
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000001E04C00AA48>, <matplotlib.patches.Wedge object at 0x000001E04C0021C8>, <matplotlib.patches.Wedge object at 0x000001E04A6BCCC8>, <matplotlib.patches.Wedge object at 0x000001E04C139A08>], [Text(-0.1910130855889933, 1.083288512416601, 'Центр'), Text(-0.8613283319035216, -0.6841882085072037, 'Урал'), Text(0.04429273729355889, -1.0991078898011077, 'Сибирь'), Text(0.9873752043868569, -0.4848610169543564, 'Юг')])
>>> pylab.show()
```
![alt text](Ris2.png)
```
>>> pylab.hist(X1, bins = 5)
(array([2., 1., 0., 1., 1.]), array([ 6. , 7.2, 8.4, 9.6, 10.8, 12. ]), <BarContainer object of 5 artists>)
>>> pylab.show()
```
![alt text](image-1.png)
```
>>> values = [13,14,10,18]
>>> categories = ['A', 'B', 'C', 'D']
>>> pylab.bar(categories, values)
<BarContainer object of 4 artists>
>>> pylab.show()
```
![alt text](image-2.png)
### 8. Самостоятельно изучите состав статистического модуля statistics. Попробуйте применить не менее 3-х функций из этого модуля.
```
>>> import statistics
>>> statistics
<module 'statistics' from 'C:\\Users\\gmack\\AppData\\Local\\Programs\\Python\\Python37\\lib\\statistics.py'>
>>> dir(statistics)
['Decimal', 'Fraction', 'StatisticsError', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_counts', '_exact_ratio', '_fail_neg', '_find_lteq', '_find_rteq', '_isfinite', '_ss', '_sum', 'bisect_left', 'bisect_right', 'collections', 'groupby', 'harmonic_mean', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'numbers', 'pstdev', 'pvariance', 'stdev', 'variance']
>>> lst = [1,4,3,5,6,7,83,5,63,5,78,12,5,7,1,4,19]
>>> mean(lst)
18.11764705882353
>>> median(lst)
5
>>> mode(lst)
5
```

49
TEMA4/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,49 @@
# Общее контрольное задание по теме 4
Махнов Георгий, А-01-23
## Задание
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стан-дартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```
>>> from math import *
>>> from cmath import *
>>> from time import *
>>> from random import *
>>> import string
>>> divmod(round(phase(0.2+0.8j), 2)*20, 3)
(8.0, 2.6000000000000014)
>>> struct_time = localtime()
>>> struct_time
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=24, tm_hour=10, tm_min=10, tm_sec=18, tm_wday=4, tm_yday=297, tm_isdst=0)
>>> struct_time = localtime()
>>> print(f"Текущее время: {struct_time.tm_hour}:{struct_time.tm_min}")
Текущее время: 10:10
>>> lst = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
>>> sample(lst)
>>> sample(lst, 3)
['вторник', 'четверг', 'понедельник']
>>> lst = list(range(14,32,3))
>>> choice(lst)
14
>>> choice(lst)
20
>>> N = round(gauss(15, 4))
>>> N
13
>>> abc_list = sample(list(string.ascii_letters), N)
>>> abc_list
['b', 'y', 's', 'a', 'm', 'U', 'A', 'u', 'X', 'o', 'k', 'Q', 't']
>>> (time() - mktime(struct_time))//60
3.0
```

24
TEMA4/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,24 @@
# Индивидуальное контрольное задание по теме 4
Махнов Георгий, А-01-23
## Задание 9
9. Напишите инструкцию, позволяющую определить и записать в переменную календарные характеристики (год, месяц, день) момента, отстоящего на 7000000 сек. вперед от текущего времени. Выведите эти сведения в виде строки вида: «Это будет ХХ-ХХ-ХХХХ». Создайте множество с 5 случайными целыми элементами, значения которых находятся в диапазоне значений от 1 до 12.
## Решение
```
>>> from time import *
>>> future_date = [localtime(time()+7000000).tm_year, localtime(time()+7000000).tm_mon, localtime(time()+7000000).tm_mday]
>>> future_date
[2026, 1, 13]
>>> print(f"Это будет {future_date[2]}-{future_date[1]}-{future_date[0]}")
Это будет 13-1-2026
>>> rand_set = set()
>>> while len(rand_set) != 5:
... rand_set.add(randint(1,12))
...
>>> rand_set
{1, 3, 4, 11, 12}
```

Двоичные данные
TEMA5/image-1.png Обычный файл

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

После

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

Двоичные данные
TEMA5/image.png Обычный файл

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

После

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

213
TEMA5/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,213 @@
# Отчет по теме 5
Махнов Георгий, А-01-23
## Тема 5. Блоки инструкций, управляющие инструкции
## 5 Блоки инструкций, управляющие инструкции
### 2 Изучим ветвление по условию – управляющую инструкцию if
```py
>>> porog = 13
>>> rashod1 = 8
>>> rashod2 = 9
>>> dohod = 5
>>> if rashod1 >= porog:
... dohod = 12
... elif rashod2 == porog:
... dohod = 0
... else:
... dohod =- 8
...
>>> dohod
-8
>>> if rashod1 >= porog:
... dohod = 12
... elif rashod2 == porog:
... dohod = 0
... else:
... dohod =- 8
...
>>> dohod
-8
>>> if porog == 3:
... dohod = 1
... elif porog == 4:
... dohod = 2
... elif porog == 5:
... dohod = 3
... else:
... dohod = 0
...
>>> dohod
0
>>> dohod=2 if porog>=4 else 0
>>> dohod
2
>>> if porog>=5 : rashod1=6; rashod2=0
...
>>> rashod1, rashod2
(6, 0)
```
### 3 Изучим цикл по перечислению – управляющую инструкцию for
#### 3.1 Простой цикл.
```py
>>> temperatura = 5
>>> for i in range(3, 18, 3):
... temperatura += i
...
>>> temperatura
50
```
#### 3.2 Более сложный цикл
```py
>>> sps = [2, 15, 14, 8]
>>> for k in sps:
... if len(sps) <= 10: sps.append(sps[0])
... else:
... break
...
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
>>> sps=[2,15,14,8]
>>> for k in sps[:]:
... if len(sps)<=10:sps.append(sps[0])
... else:break
...
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
В первом случае мы идем по каждому элементу внутри списка sps. По условию, если длина списка не больше 10, то в него добавляется первый элемент списка - 2. Но так как мы все еще идем по элементам внутри списка, то по достижению последнего изначального элемента - 8, мы пойдем дальше по добавленным в список элементам (т.е по двойкам), пока не будет удовлетворено условие `if`, из-за чего длина этого списка равна 11.
Во втором случае при помощи среза [:] мы идем по первоначальным элементам списка, но не внутри самого списка, и при добавлении двоек в изначальный список цикл не будет продолжать работать после обработки последнего элемента первоначального списка, из-за чего длина списка равна 8.
#### 3.3 Создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сум-ма чисел не превышает 500, эта сумма должна быть отображена на экране
```py
>>> import random as rn
>>> sps5=[]
>>> for i in range(10):
... sps5.append(rn.randint(1,100))
... ss=sum(sps5)
... if ss>500: break
... else:
... print(ss)
...
>>> print(ss)
501
```
Программа не всегда выводит значения на экран. Это происходит из-за оператора `break`, который завершает цикл, если сумма ss первысила 500. В этом случае `else` не выполняется.
#### 3.4 Пример с символьной строкой
```py
>>> stroka='Это – автоматизированная система'
>>> stroka1=""
>>> for ss in stroka:
... stroka1+=" "+ss
...
>>> stroka
'Это – автоматизированная система'
>>> stroka1
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
```
#### 3.5 Запись цикла в строке.
```py
>>> import math
>>> sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
>>>import pylab
>>> pylab.plot(sps2)
[<matplotlib.lines.Line2D object at 0x000001D6AA8730C8>]
>>> pylab.show()
```
Полученный график: ![alt text](image.png)
### 4 Изучим цикл «пока истинно условие» – управляющую инструкцию while
#### 4.1 Цикл со счетчиком.
```py
>>> rashod = 300
>>> while rashod:
... print("Расход=",rashod)
... rashod-=50
...
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```
Завершение цикла произошло в тот момент, когда переменная rashod стала равна нулю, завершив цикл, так как ноль как логическая переменная значит False.
#### 4.2 Пример с символьной строкой
```py
>>> 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()
...
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
Значение в момент 4 = 0.197375320224904
Значение в момент 5 = 0.2449186624037092
Значение в момент 6 = 0.2913126124515909
Значение в момент 7 = 0.3363755443363322
Значение в момент 8 = 0.3799489622552249
Значение в момент 9 = 0.421899005250008
Значение в момент 10 = 0.4621171572600098
Значение в момент 11 = 0.5005202111902354
Значение в момент 12 = 0.5370495669980353
Значение в момент 13 = 0.5716699660851172
Значение в момент 14 = 0.6043677771171636
Значение в момент 15 = 0.6351489523872873
Значение в момент 16 = 0.6640367702678489
Значение в момент 17 = 0.6910694698329307
Значение в момент 18 = 0.7162978701990245
Значение в момент 19 = 0.7397830512740043
Значение в момент 20 = 0.7615941559557649
Значение в момент 21 = 0.7818063576087741
Значение в момент 22 = 0.8004990217606297
Значение в момент 23 = 0.8177540779702878
Значение в момент 24 = 0.8336546070121553
Значение в момент 25 = 0.8482836399575129
Значение в момент 26 = 0.8617231593133063
Значение в момент 27 = 0.874053287886007
Значение в момент 28 = 0.8853516482022625
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
Значение в момент 32 = 0.9216685544064713
Значение в момент 33 = 0.9288576214547277
Значение в момент 34 = 0.935409070603099
Значение в момент 35 = 0.9413755384972874
Значение в момент 36 = 0.9468060128462683
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
```
Полученный график: ![alt text](image-1.png)
#### 4.3 Определение, является ли число простым (делится только на самого себя или 1).
```py
>>> chislo=267
>>> kandidat =chislo // 2
>>> while kandidat > 1:
... if chislo%kandidat == 0:
... print(chislo, ' имеет множитель ', kandidat)
... break
... kandidat -= 1
... else:
... print(chislo, ' является простым!')
...
267 имеет множитель 89
```

60
TEMA5/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,60 @@
# Общее контрольное задание по теме 5
Махнов Георгий, А-01-23
## Задание
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
• Создайте список со словами из задания данного пункта. Для этого списка определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его сред-ние баллы по двум сессиям.
## Решение
```py
alphabet_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
eng_str = "The quick, brown fox jumps over the lazy dog."
index_str = ""
for letter in eng_str:
try:
index_str = index_str + f"{letter} - {str(alphabet_list.index(letter.lower()) + 1)} "
except ValueError:
index_str = index_str + letter
print(index_str)
>>> T - 20 h - 8 e - 5 q - 17 u - 21 i - 9 c - 3 k - 11 , b - 2 r - 18 o - 15 w - 23 n - 14 f - 6 o - 15 x - 24 j - 10 u - 21 m - 13 p - 16 s - 19 o - 15 v - 22 e - 5 r - 18 t - 20 h - 8 e - 5 l - 12 a - 1 z - 26 y - 25 d - 4 o - 15 g - 7 .
sentence_str = "Создайте список со словами из задания данного пункта. Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом".split()
if input("Введите слово: ") in sentence_str:
print("Слово есть в предложении")
else:
print("Слова нет в предложении")
>>> Введите слово: либо
Слово есть в предложении
>>> Введите слово: лихо
Слова нет в предложении
surnames_summer = ['Коваленко', 'Лыкова', 'Лазарев']
marks_summer = [4.75, 3.75, 5.00]
surnames_winter = ['Лыкова', 'Коваленко', 'Лазарев']
marks_winter = [3.25, 4.5, 5.00]
surname = input("Введите фамилию студента: ")
if surname in surnames_summer:
print(f"Студент {surname}. Средний балл за летнюю сессию составляет {marks_summer[surnames_summer.index(surname)]},
за зимнюю сессию составляет {marks_winter[surnames_winter.index(surname)]}.") #перенос сделан для удобства проверки, в файле .py строка кода не переносится
else:
print(f"Студент {surname}. отсутствует в списке")
>>>Введите фамилию студента: Лазарев
Студент Лазарев. Средний балл за летнюю сессию составляет 5.0, за зимнюю сессию составляет 5.0.
>>>Введите фамилию студента: Махнов
Студент Махнов. отсутствует в списке
```

29
TEMA5/task.py Обычный файл
Просмотреть файл

@@ -0,0 +1,29 @@
alphabet_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
eng_str = "The quick, brown fox jumps over the lazy dog."
index_str = ""
for letter in eng_str:
try:
index_str = index_str + f"{letter} - {str(alphabet_list.index(letter.lower()) + 1)} "
except ValueError:
index_str = index_str + letter
print(index_str)
if input("Введите слово: ") in sentence_str:
print("Слово есть в предложении")
else:
print("Слова нет в предложении")
surnames_summer = ['Коваленко', 'Лыкова', 'Лазарев']
marks_summer = [4.75, 3.75, 5.00]
surnames_winter = ['Лыкова', 'Коваленко', 'Лазарев']
marks_winter = [3.25, 4.5, 5.00]
surname = input("Введите фамилию студента: ")
if surname in surnames_summer:
print(f"Студент(ка) {surname}. Средний балл за летнюю сессию составляет {marks_summer[surnames_summer.index(surname)]}, за зимнюю сессию составляет {marks_winter[surnames_winter.index(surname)]}.")
else:
print(f"Студент(ка) {surname}. отсутствует в списке")

23
TEMA5/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,23 @@
# Индивидуальное контрольное задание по теме 5
Махнов Георгий, А-01-23
## Задание 9
9. Напишите инструкции создания списка с 20 случайными нормально распределенными (математическое ожидание равно -50, дисперсия равна 64) числами. Из этого списка перепишите в другой список только те элементы, которые не превышают среднего значения.
## Решение
```py
import random as rn
sps = [rn.gauss(-50, 64**0.5) for i in range(20)]
print(f"{sps}, среднее = {sum(sps)/len(sps)} \n")
new_sps = [sps[i] for i in range(len(sps)) if sps[i]<=sum(sps)/len(sps)]
print(new_sps)
>>> [-48.42767862148211, -43.69035462933621, -61.0702207089155, -53.983411522362914, -46.71703779699627, -43.0128636534661, -36.739016417150715, -57.8461158532874, -40.051722914719875, -54.69110069704356, -53.21044543510062, -56.15437523954474, -63.130702927718104, -54.448990465321415, -54.90985201111035, -61.41046778390321, -83.6761467075842, -39.79673632158901, -46.536576715447765, -40.71362490760454], среднее = -52.010872066484225
[-61.0702207089155, -53.983411522362914, -57.8461158532874, -54.69110069704356, -53.21044543510062, -56.15437523954474, -63.130702927718104, -54.448990465321415, -54.90985201111035, -61.41046778390321, -83.6761467075842]
```

15
TEMA5/test.py Обычный файл
Просмотреть файл

@@ -0,0 +1,15 @@
'''
Напишите инструкции создания списка с 20 случайными нормально распределенными
(математическое ожидание равно -50, дисперсия равна 64) числами.
Из этого списка перепишите в другой список только те элементы, которые не превышают среднего значения.
'''
import random as rn
sps = [rn.gauss(-50, 64**0.5) for i in range(20)]
print(f"{sps}, среднее = {sum(sps)/len(sps)} \n")
new_sps = [sps[i] for i in range(len(sps)) if sps[i]<=sum(sps)/len(sps)]
print(new_sps)

1
TEMA6/Stroka.txt Обычный файл
Просмотреть файл

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

273
TEMA6/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,273 @@
# Отчет по теме 6
Махнов Георгий, А-01-23
## Тема 6. Ввод-вывод данных и операции с файлами
### 2. Вывод данных на экран дисплея.
```py
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
>>> fff=234.5;gg='Значение температуры = '
```
#### 2.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("Здесь может выводиться",
... "большой текст,",
... "занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
#### 2.2 метод `write`
```py
import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
Выводимое число - количество символов, включая пробелы и переносы.
sys.stdout.write() - функция, которая выводит на экран дисплея (или любой другой поток стандартного вывода) эхо-выводом строку, которую внесли в функцию, и возвращает число - количество символов. В отличие от print() требует передачи только строковых аргументов и на выводе не переносит на новую строку.
### 3. Ввод данных с клавиатуры
```py
>>> psw=input('Введите пароль:')
Введите пароль:12345
>>> psw
'12345'
>>> type(psw)
<class 'str'>
>>> while True:
... znach = float(input("Задайте коэф.усиления = "))
... if znach < 17.5 or znach > 23.8:
... print("Ошибка!")
... else:
... break
...
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
### 4 Ввод-вывод при работе с файлами
#### 4.1 Функции для работы с путем к файлу
```py
>>>
>>> import os
>>> Makhnov = os.getcwd()
>>> print(Makhnov)
"C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs"
>>> os.chdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/TEMA6")
>>> os.getcwd()
'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6'
>>> os.mkdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/LAB6")
>>> os.rmdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs/LAB6")
>>> os.listdir("C:/Users/gmack/OneDrive/Рабочий стол/3 KURS/LABS/python-labs")
['.git', '.gitignore', 'README.md', 'TEMA0', 'TEMA1', 'TEMA2', 'TEMA3', 'TEMA4', 'TEMA5', 'TEMA6', 'TEMA7', 'TEMA8', 'TEMA9']
>>> fil = os.path.abspath("report.md")
>>> fil
'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6\\report.md'
>>> drkt=os.path.dirname(fil)
>>> drkt
'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6'
>>> os.path.basename(fil)
'report.md'
>>> os.path.split(fil)
('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA6', 'report.md')
```
Возвращает кортеж с двумя объектами - путем к директории и именем файла
```py
>>> os.path.exists('some.md')
False
>>> os.path.isfile('task.md')
False
>>> os.path.isfile('report.md')
True
```
#### 4.3 Открытие файла для записи или чтения данных – функция `open`
```py
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
>>> fp=open(drkt+'\\zapis1.txt','w')
>>> 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']
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
```
#### 4.4. Закрытие файла
```py
>>> fp.close()
>>>
```
#### 4.5 Запись информации в файл с помощью метода `write`
```py
>>> sps=list(range(1,13))
>>> fp2=open('zapis3.txt','w')
>>> fp2.write(str(sps[:4])+'\n')
>>> fp2.write(str(sps[4:8])+'\n')
>>> fp2.write(str(sps[8:])+'\n')
>>> fp2.close()
```
[Созданный файл](zapis3.txt)
```py
>>> fp3=open('zapis4.txt','w', encoding="utf-8")
>>> for i in range(len(sps3)):
... stroka4=sps3[i][0]+' '+str(sps3[i][1])
... fp3.write(stroka4)
...
11
11
12
>>> 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()
```
[Созданный файл](zapis5.txt)
#### 4.6. Первый способ чтения информации из текстового файла.
```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']
```
#### 4.7. Чтение информации из файла с помощью метода read.
```py
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> stroka1, stroka2
('[1, 2, 3, 4]', '\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n')
```
#### 4.8 Чтение информации с помощью методов 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']
```
#### 4.9 Ввод-вывод объектов с использованием функций из модуля `pickle`
```py
>>> import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> fp=open('zapis6.mnz','wb')
>>> pickle.dump(mnoz1,fp)
>>> fp.close()
```
[Созданный файл](zapis6.mnz)
```py
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, obj2, sps3
({'iPhone', 'book', 'pen', 'table'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]], [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]])
```
### 5. Перенаправление потоков ввода и вывода данных
```py
>>> import sys
>>> vr_out=sys.stdout
>>> fc=open('Stroka.txt','w', encoding='utf-8')
>>> sys.stdout=fc
>>> print('запись строки в файл')
>>> sys.stdout=vr_out
>>> print('запись строки на экран')
запись строки на экран
>>> fc.close()
>>> tmp_in = sys.stdin
>>> fd = open("Stroka.txt", "r")
>>> sys.stdin = fd
>>> sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
>>> fd = open("Stroka.txt", "r", encoding='utf-8')
>>> sys.stdin = fd
>>> sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='utf-8'>
>>> while True:
... try:
... line = input()
... print(line)
... except EOFError:
... break
...
запись строки в файл
>>> fd.close()
>>> sys.stdin=tmp_in
```

37
TEMA6/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,37 @@
# Общее контрольное задание по теме 6
Махнов Георгий, А-01-23
## Задание
* Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
* Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
* Записывается кортеж в бинарный файл.
* Записывается в этот же файл список и закрывается файл.
* Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
* Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
* Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
```py
from random import *
from pickle import dump, load
tpl = tuple(str(randint(6, 56)) for _ in range(125))
surnameTuple = ['Махнов', 'Коваленко', 'Лазарев', 'Анисенков']
print(tpl, surnameTuple)
with open('test.bin', 'wb') as fil:
dump(tpl, fil)
dump(surnameTuple, fil)
with open('test.bin', 'rb') as fil2:
obj1 = load(fil2)
obj2 = load(fil2)
print(obj1, obj2, '\n', tpl == obj1, surnameTuple == obj2)
for i in range(25):
exec(f'list{i}=list(tpl[{i*5}:{i*5+5}])')
exec(f"print(list{i})")
#print(list3) #для проверки
```

50
TEMA6/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,50 @@
# Индивидуальное контрольное задание по модулю 2
Махнов Георгий, А-01-23
## Задание 4
1) Создайте словарь с 7 элементами, в которых ключами являются логины пользователей, а значениями - их пароли.
2) Запросите у пользователя логин и пароль, проверьте их наличие в качестве элемента словаря. Если такой элемент найден, выдайте сообщение "Access granted", иначе - "Access denied".
3) Запишите словарь в бинарный файл и после этого удалите словарь из памяти.
4) Прочитайте словарь из файла. Отобразите его на экране.
5) Запросите у пользователя логин и пароль нового пользователя и добавьте соответствующий элемент в словарь.
## Решение
```py
from pickle import dump, load
user_dict = {'user1':'passwd1', 'user2':'passwd2', 'user3':'passwd3', 'user4':'passwd4', 'user5':'passwd5', 'user6':'passwd6', 'user7':'passwd7'}
login = input("Enter your login: ")
passw = input("Enter your password: ")
if login in user_dict.keys() and user_dict[login] == passw:
print("Access granted")
else:
print("Access denied")
with open("users.bin", 'wb') as fl:
dump(user_dict, fl)
del(user_dict)
with open('users.bin', 'rb') as fl:
user_dict_new = load(fl)
print(f"{user_dict_new} is new user dictionary")
login_new = input("Enter your login: ")
user_dict_new[login_new] = input("Enter your password: ")
print(user_dict_new)
>>> Enter your login: user1
Enter your password: passwd1
Access granted
{'user1': 'passwd1', 'user2': 'passwd2', 'user3': 'passwd3', 'user4': 'passwd4', 'user5': 'passwd5', 'user6': 'passwd6', 'user7': 'passwd7'} is new user dictionary
Enter your login: user_new
Enter your password: passw_new
{'user1': 'passwd1', 'user2': 'passwd2', 'user3': 'passwd3', 'user4': 'passwd4', 'user5': 'passwd5', 'user6': 'passwd6', 'user7': 'passwd7', 'user_new': 'passw_new'}
```

35
TEMA6/testing.py Обычный файл
Просмотреть файл

@@ -0,0 +1,35 @@
'''
M2_4
1) Создайте словарь с 7 элементами, в которых ключами являются логины пользователей, а значениями - их пароли.
2) Запросите у пользователя логин и пароль, проверьте их наличие в качестве элемента словаря.
Если такой элемент найден, выдайте сообщение "Access granted", иначе - "Access denied".
3) Запишите словарь в бинарный файл и после этого удалите словарь из памяти.
4) Прочитайте словарь из файла. Отобразите его на экране.
5) Запросите у пользователя логин и пароль нового пользователя и добавьте соответствующий элемент в словарь.
'''
from pickle import dump, load
user_dict = {'user1':'passwd1', 'user2':'passwd2', 'user3':'passwd3', 'user4':'passwd4', 'user5':'passwd5', 'user6':'passwd6', 'user7':'passwd7'}
login = input("Enter your login: ")
passw = input("Enter your passw: ")
if login in user_dict.keys() and user_dict[login] == passw:
print("Access granted")
else:
print("Access denied")
with open("users.bin", 'wb') as fl:
dump(user_dict, fl)
del(user_dict)
with open('users.bin', 'rb') as fl:
user_dict_new = load(fl)
print(f"{user_dict_new} is new user dictionary")
login_new = input("Enter your login: ")
user_dict_new[login_new] = input("Enter your password: ")
print(user_dict_new)

0
TEMA6/zapis1.txt Обычный файл
Просмотреть файл

0
TEMA6/zapis2.bin Обычный файл
Просмотреть файл

3
TEMA6/zapis3.txt Обычный файл
Просмотреть файл

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

1
TEMA6/zapis4.txt Обычный файл
Просмотреть файл

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

3
TEMA6/zapis5.txt Обычный файл
Просмотреть файл

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

Двоичные данные
TEMA6/zapis6.mnz Обычный файл

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

Двоичные данные
TEMA6/zapis7.2ob Обычный файл

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

Двоичные данные
TEMA7/image-1.png Обычный файл

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

После

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

Двоичные данные
TEMA7/image.png Обычный файл

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

После

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

447
TEMA7/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,447 @@
# Отчет по теме 7
Махнов Георгий, А-01-23
## Тема 7. Создание пользовательских функций
### 2. Создание пользовательской функции.
### 2.1. Первый пример: функция – без аргументов.
```py
>>> def uspeh():
... """Подтверждение успеха операции"""
... print('Выполнено успешно!')
...
>>> uspeh()
Выполнено успешно!
>>> dir()
['PS1', 'REPLHooks', '__annotations__', '__builtins__', '__cached__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'get_last_command', 'is_wsl', 'original_ps1', 'platform', 'sys', 'uspeh']
>>> help(uspeh)
Help on function uspeh in module __main__:
uspeh()
юфЄтхЁцфхэшх єёяхїр юяхЁрЎшш
```
Вывелась надпись "Подтверждение успешно". В комментариях стоит писать назначение функции и переменные, которые нужно подавать в неё (при надобности)
### 2.2. Пример функции с аргументами.
```py
>>> def sravnenie(a,b):
... """Сравнение a и b"""
... if a>b:
... print(a,' больше ',b)
... elif a<b:
... print(a, ' меньше ',b)
... else:
... print(a, ' равно ',b)
...
>>> n,m=16,5;sravnenie(n,m)
16 больше 5
>>> sravnenie('aaa', 'bbb')
aaa меньше bbb
```
Функция сравнивает символы по лексикографическому порядку, начиная с самого первого символа. Лексикографический порядок служит для того, чтобы сравнивать последовательности символом по алфавитному порядку
### 2.3. Пример функции, содержащей return.
```py
>>> def logistfun(b,a):
... import math
... return a/(1+math.exp(-b))
...
>>> v,w=1,0.7;z=logistfun(w,v)
>>> print(z)
0.6681877721681662
```
### 2.4. Сложение для разных типов аргументов
```py
>>> def slozh(a1,a2,a3,a4):
... """ Сложение значений четырех аргументов"""
... return a1+a2+a3+a4
...
>>> slozh(1,2,3,4)
10
>>> slozh('1','2','3','4')
'1234'
>>> b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
>>> q=slozh(b1,b2,b3,b4)
>>> q
[1, 2, -1, -2, 0, 2, -1, -1]
b1={9:12};b2={1:-3};b3={4:6};b4={-2:8}
>>> b1={9,12};b2={1,-3};b3={4,6};b4={-2,8}
>>> slozh(b1,b2,b3,b4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in slozh
TypeError: unsupported operand type(s) for +: 'set' and 'set'
>>> b1={9:12};b2={1:-3};b3={4:6};b4={-2:8}
>>> slozh(b1,b2,b3,b4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in slozh
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
```
### 2.5. Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
```py
>>> def inerz(x,T,ypred):
... """ Модель устройства с памятью:
... x- текущее значение вх.сигнала,
... T -постоянная времени,
... ypred - предыдущее значение выхода устройства"""
... y=(x+T*ypred)/(T+1)
... return y
...
>>> sps=[0]+[1]*100
>>> spsy=[]
>>> TT=20
>>> yy=0
>>> for xx in sps:
... yy=inerz(xx,TT,yy)
... spsy.append(yy)
...
>>> import pylab
>>> pylab.plot(spsy,sps)
[<matplotlib.lines.Line2D object at 0x000001663A9DD5C8>]
>>> pylab.show()
```
![Изображение графика](image.png)
### 3. Функции как объекты.
### 3.1. Получение списка атрибутов объекта-функции.
```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 - предыдущее значение выхода устройства'
>>> help(inerz)
Help on function inerz in module __main__:
inerz(x, T, ypred)
юфхы єёЄЁющёЄтр ё ярь Є:
x- Єхъєхх чэрўхэшх тї.ёшуэрыр,
T -яюёЄю ээр тЁхьхэш,
ypred - яЁхффєхх чэрўхэшх тїюфр єёЄЁющёЄтр
```
### 3.2. Сохранение ссылки на объект-функцию в другой переменной.
```py
>>> fnkt=sravnenie
>>> v=16
>>> fnkt(v,23)
16 меньше 23
```
### 3.3. Возможность альтернативного определения функции в программе.
```py
>>> typ_fun=8
>>> if typ_fun==1:
... def func():
... print('Функция 1')
... else:
... def func():
... print('Функция 2')
...
>>> func()
Функция 2
```
Вывелось надпись "Функция 2", т.к. typ_fun не равна 1.
### 4. Аргументы функции.
### 4.1. Изучите возможность использования функции в качестве аргумента другой функции
```py
>>> def fun_arg(fff,a,b,c):
... """fff-имя функции, используемой
... в качестве аргумента функции fun_arg"""
... return a+fff(c,b)
...
>>> zz=fun_arg(logistfun,-3,1,0.7)
>>> zz
-2.3318122278318336
```
### 4.2. Обязательные и необязательные аргументы.
```py
>>> def logistfun(a,b=1):
... """Вычисление логистической функции"""
... import math
... return b/(1+math.exp(-a))
...
>>> logistfun(0.7)
0.6681877721681662
>>> logistfun(0.7,2)
1.3363755443363323
```
### 4.3. Изучите возможность обращения к функции с произвольным (непозиционным) расположением аргументов. При этом надо в обращении к функции указывать имена аргументов:
```py
>>> logistfun(b=0.5,a=0.8)
0.34498724056380625
```
### 4.4. Пример со значениями аргументов функции, содержащимися в списке или кортеже.
```py
>>> b1234=[b1,b2,b3,b4]
>>> qq=slozh(*b1234)
>>> qq
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 4.5. Пример со значениями аргументов функции, содержащимися в словаре
```py
>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4}
>>> qqq=slozh(**dic4)
>>> qqq
10
```
### 4.6. Смешанные ссылки
```py
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
>>> qqqq=slozh(*e1,**dd2)
>>> qqqq
17
```
*args **kwargs используются при передаче неопределенного количества аргументов. **kwargs в функции slozh распаковывает именованные объекты в соответствии с именами переменных в функции (в def slozh(a1,a2,a3,a4) **dd2 распакует из словаря значения по их именам, иначе выйдет ошибка)
### 4.7. Переменное число аргументов у функции.
```py
>>> def func4(*kort7):
... smm = 0
... for elt in kort7:
... smm+=elt
... return smm
...
>>> func4(-1,2)
1
>>> func4(-1,2,0,3,6)
10
```
### 4.8. Комбинация аргументов
```py
>>> 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
```
### 4.9. Изменение значений объектов, используемых в качестве аргументов функции.
```py
>>> a = 90
>>> def func3(b):
... b-5*b+67
...
>>> func3(a)
>>> a
90
```
Не изменилось, переменная изменялась только в функции, в которой она не была вызвана как глобальная переменная
```py
>>> sps1=[1,2,3,4]
>>> def func2(sps):
... sps[1]=99
...
>>> func2(sps1)
>>> sps1
[1, 99, 3, 4]
>>> print(sps1)
[1, 99, 3, 4]
```
Изменилось, т.к. список передается по ссылке.
```py
>>> 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
```
### 5. Специальные типы пользовательских функций
### 5.1. Анонимные функции.
```py
>>> import math
>>> anfun1=lambda: 1.5+math.log10(17.23)
>>> anfun1()
2.7362852774480286
>>> anfun2=lambda a,b : a+math.log10(b)
>>> anfun2(17,234)
19.369215857410143
>>> anfun3=lambda a,b=234: a+math.log10(b)
>>> anfun3(100)
102.36921585741014
```
### 5.2. Функции-генераторы.
```py
>>> def func5(diap,shag):
... """ Итератор, возвращающий значения
... из диапазона от 1 до diap с шагом shag"""
... for j in range(1,diap+1,shag):
... yield j
...
>>> for mm in func5(7,3):
... print(mm)
...
1
4
7
>>> alp=func5(7,3)
>>> print(alp.__next__())
1
>>> print(alp.__next__())
4
>>> print(alp.__next__())
7
>>> print(alp.__next__())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
```
Функция дошла до конца итерации, и вывелась ошибка, обозначающее это.
### 6. Локализация объектов в функциях.
### 6.1. Примеры на локализацию объектов.
```py
>>> def func7(arg):
... loc1=15
... glb=8
... return loc1*arg
...
>>> glb=10
>>> res=func7(glb)
>>> res
150
>>> glb
10
```
glb не изменилось
```py
>>> def func8(arg):
... loc1=15
... print(glb)
... glb=8
... return loc1*arg
...
>>> res=func8(glb)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in func8
UnboundLocalError: local variable 'glb' referenced before assignment
```
Мы не обозначили glb в функции до вывода этой переменной, отсюда и ошибка.
```py
>>> glb=11
>>> def func7(arg):
... loc1=15
... global glb
... print(glb)
... glb=8
... return loc1*arg
...
>>> res=func7(glb)
11
>>> res
165
>>> glb
8
```
Теперь glb изменилась - мы взяли её как глобальную переменную, и в функции изменили значение переменной
### 6.2. Выявление локализации объекта с помощью функций locals() и globals() из builtins.
```py
>>> globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__cached__', 'platform', 'sys', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'sravnenie', 'fnkt', 'v', 'typ_fun', 'func', 'logistfun', 'w', 'z', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func7', 'glb', 'res', 'func8'])
>>> locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__cached__', 'platform', 'sys', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'sravnenie', 'fnkt', 'v', 'typ_fun', 'func', 'logistfun', 'w', 'z', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func7', 'glb', 'res', 'func8'])
```
Различий нет, т.к. мы находимся в рабочем пространстве, и все переменные в нем будут как глобальными, так и локальными (т.е. локальные и глобальные переменные будут совпадать).
```py
>>> def func8(arg):
... loc1=15
... glb=8
... print(globals().keys())
... print(locals().keys())
... return loc1*arg
...
>>> hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__cached__', 'platform', 'sys', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'sravnenie', 'fnkt', 'v', 'typ_fun', 'func', 'logistfun', 'w', 'z', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func7', 'glb', 'res', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
>>> 'glb' in globals().keys()
True
```
Теперь мы вывели глобальные и локальные переменные в пространстве функции. Глобальные переменные останутся неизменными, а локальные переменные будут соответствовать тем локальным переменным, что были заданы в самой функции.
```py
```
### 6.3. Локализация объектов при использовании вложенных функций.
```py
>>> def func9(arg2,arg3):
... def func9_1(arg1):
... loc1=15
... glb1=8
... print('glob_func9_1:',globals().keys())
... print('locl_func9_1:',locals().keys())
... return loc1*arg1
... loc1=5
... glb=func9_1(loc1)
... print('loc_func9:',locals().keys())
... print('glob_func9:',globals().keys())
... return arg2+arg3*glb
...
>>> kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__cached__', 'platform', 'sys', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'sravnenie', 'fnkt', 'v', 'typ_fun', 'func', 'logistfun', 'w', 'z', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func7', 'glb', '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__', '__cached__', 'platform', 'sys', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'sravnenie', 'fnkt', 'v', 'typ_fun', 'func', 'logistfun', 'w', 'z', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func7', 'glb', 'res', 'func8', 'hh', 'func9'])
```
Были выведены локальные и глобальные переменные внутренней функции (func9_1) и внешней функции (func9).
### 6.4. Большой пример – моделирование системы, состоящей из последовательного соединения ре-ального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нели-нейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
```py
>>> znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
>>> 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])
>>> N=int(znach[6])
>>> import math
>>> vhod = []
>>> for i in range(N):
... vhod.append(A*math.sin((2*i*math.pi)/F))
...
>>> vhod
[0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, ...]
```
Полнst полученные данные входа в [этом файле](vhod_and_vyhod.md)
```py
>>> def realdvig(xtt,kk1,TT,yti1,ytin1):
... #Модель реального двигателя
... yp=kk1*xtt #усилитель
... yti1=yp+yti1 #Интегратор
... ytin1=(yti1+TT*ytin1)/(TT+1)
... return [yti1,ytin1]
...
>>> def tahogen(xtt,kk2,yti2):
... #Модель тахогенератора
... yp=kk2*xtt #усилитель
... yti2=yp+yti2 #интегратор
... return yti2
...
>>> def nechus(xtt,gran):
... #зона нечувствит
... if xtt<gran and xtt>(-gran):
... ytt=0
... elif xtt>=gran:
... ytt=xtt-gran
... elif xtt<=(-gran):
... ytt=xtt+gran
... return ytt
...
>>> 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)
```
Полнst полученные данные выхода в [этом файле](vhod_and_vyhod.md)

67
TEMA7/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,67 @@
# Общее контрольное задание по теме 7
Махнов Георгий, А-01-23
## Задание
* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
* Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращае-мый результат функции: список с числами элементов выборки в интервалах разбиения.
* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
## Решение
```py
from matplotlib.pyplot import *
from random import *
def delaySignal (signal, T):
""""Расчёт выхода y(t) для устройства задержки"""
output=[]
for i in range(len(signal)):
if i < T:
output.append(0)
else:
output.append(signal[i-T])
return output
print(delaySignal([random() for _ in range(randint(1,10))], randint(1,5)))
>>> [0, 0, 0, 0.6929623452667151, 0.8432441392717085, 0.7135246417254248]
def histogram(sample, number):
bins = (max(sample) - min(sample))/number
intervals = []
for i in range(number):
intervals.append((min(sample)+i*bins, min(sample)+(i+1)*bins))
objectInIntervals = [0]*number
for objects in sample:
objectInterval = int((objects - min(sample))/bins)
if objectInterval == number:
objectInterval -=1
objectInIntervals[objectInterval] +=1
print("Границы интервалов | Число элементов")
for i in range(number):
lowerInterval, upperInterval = intervals[i]
print(lowerInterval, "-", upperInterval, " |", objectInIntervals[i])
hist(sample, number)
xlabel("Значения элементов выборки")
ylabel("Количество элементов в интервале")
show()
return objectInIntervals
data = [gauss(1, 20) for _ in range(10)]
histogram(data, 3)
>>> Границы интервала | Число элементов
-25.04980446710405 - -5.836770357068186 | 3
-5.836770357068186 - 13.376263752967677 | 4
13.376263752967677 - 32.58929786300354 | 3
```
![alt text](image-1.png)
```py
lineal_regression = lambda b1, b2, X: b1+b2*X
print(lineal_regression(3,2,5))
>>> 13
```

44
TEMA7/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,44 @@
# Индивидуальное контрольное задание по теме 7
Махнов Георгий, А-01-23
## Задание 6
6. Разработайте функцию с 3 аргументами: x, А и В, реализующую преобразование входного сигнала x по формуле:
y=B, если x>A;
y= 2B*x/A-B*x^2/A^2 , если 0≤ x ≤ А;
y= 2B * x/A +B*x^2 /A^2 , если -A≤ x <0;
y=-B, если x< -A.
Создайте список со 100 значениями входного сигнала х – случайными, равномерно распределенными числами в диапазоне значений от -5 до 12. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при трех разных парах значений А и В. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
## Выполнение
```py
from random import *
def func(x, A, B):
"""Преобразование входного сигнала"""
if x>A:
y = B
elif 0<= x <= A:
y = 2*B*x/A - B*x**2/A**2
elif -A<= x <=0:
y = 2*B*x/A + B*x**2/A**2
else:
y = -B
return x, y
sample = [uniform(-5, 12) for _ in range(100)]
final_list= []
with open("TEMA7\\test.txt", "w+") as f:
for _ in range(3):
A = randint(1, 10)
B = randint(1, 10)
#f.write(f"x|y for A={A} and B={B}\n")
final_list.append(f"(A = {A},B = {B})")
for i in range(len(sample)):
res = func(sample[i], A, B)
final_list.append(res)
f.write(f"{res[0]}|{res[1]}\n")
print(final_list)
```

41
TEMA7/test.py Обычный файл
Просмотреть файл

@@ -0,0 +1,41 @@
"""
6. Разработайте функцию с 3 аргументами: x, А и В,
реализующую преобразование входного сигнала x по формуле:
y=B, если x>A;
y= 2B*x/A-B*x2/A2 , если 0≤ x ≤ А;
y= 2B * x/A +B*x2/A2 , если -A≤ x <0;
y=-B, если x< -A.
Создайте список со 100 значениями входного сигнала х – случайными, равномерно распределенными числами в диапазоне значений от -5 до 12.
Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при трех разных парах значений А и В.
Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
"""
from random import *
def func(x, A, B):
"""Преобразование входного сигнала"""
if x>A:
y = B
elif 0<= x <= A:
y = 2*B*x/A - B*x**2/A**2
elif -A<= x <=0:
y = 2*B*x/A + B*x**2/A**2
else:
y = -B
return x, y
sample = [uniform(-5, 12) for _ in range(100)]
final_list= []
with open("TEMA7\\test.txt", "w+") as f:
for _ in range(3):
A = randint(1, 10)
B = randint(1, 10)
#f.write(f"x|y for A={A} and B={B}\n")
final_list.append(f"(A = {A},B = {B})")
for i in range(len(sample)):
res = func(sample[i], A, B)
final_list.append(res)
f.write(f"{res[0]}|{res[1]}\n")
print(final_list)

300
TEMA7/test.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,300 @@
-1.9777032384570803|-4.367118717366521
11.135855406531|9
-4.884084921202556|-8.177676130895073
0.9137312153330788|2.1962447046347218
-4.15755500923055|-7.516011393266264
-2.794962360032754|-5.752222979961801
0.712131468739349|1.7380486531069022
0.36951385710231577|0.9250996240729819
2.612295705136045|5.463927738520238
9.259925904277322|9
-1.5780866550779296|-3.600524512681708
8.684012091766938|9
9.556476939895022|9
3.322279952044809|6.515701576322781
2.5472891331125584|5.358373335165763
2.3739804015682466|5.069377226006691
7.312422423029796|9
11.061772890916266|9
-3.0893944535752107|-6.1911118029070416
-1.347512762976796|-3.1315202513797566
1.7905827341876428|4.015464199100101
7.31482415237757|9
8.172591957485094|9
0.9864195591417539|2.3577888271825365
-3.580562597410845|-6.8523883805707975
-0.5809326090517546|-1.431840091309877
-1.1823346958437808|-2.783529258762293
5.110017562257022|8.34391219316751
8.146887339196109|9
3.2190108597855307|6.374226328453515
-3.3469561680638007|-6.548927282807674
5.470008082396298|8.570043318134818
6.16871332178753|8.87307473729874
8.473191536875081|9
-3.9396085042397897|-7.279715000696067
5.180256357055784|8.391771380932184
-1.1025394668524964|-2.611829251830777
2.54383643673855|5.352723605656106
6.16948876265899|8.87331142371128
11.003077744454764|9
-3.716079130667951|-7.019240275830387
4.4663407033242635|7.820921124802398
-0.9461397216171825|-2.268509827925887
0.7903434862854866|1.9175815068397193
3.8535757506546116|7.181635305881261
7.510865431981255|9
8.472759898914282|9
4.81102121774129|8.119905041171236
0.6119775277993131|1.5048677561618617
6.160916013252335|8.870682501401078
-2.267475331473432|-4.886303925634437
4.570350303979643|7.915739207992933
-4.789794385999109|-8.10275347539899
5.187681431454301|8.396724748060004
-0.5811812745729741|-1.4324264394074762
3.0558380315345666|6.142699536706079
9.235585914584195|9
-2.3056636124195014|-4.952425569839573
1.9058576652738228|4.233620915550098
10.20359964129758|9
10.165290101721107|9
-0.5054341904585984|-1.252766010404542
9.307052700830864|9
5.898279569876797|8.777059364176374
10.281056304716651|9
11.149554175525285|9
7.634571026116863|9
-0.9131221479772256|-2.1948829006324804
4.845645605567663|8.147526822218584
6.987453821935967|8.99997108858661
-3.382169022673978|-6.595952881132698
9.006759501539955|9
-2.917640967426152|-5.938961276784989
6.350782423027912|8.922584670199067
2.174547558954961|4.723164870467597
-3.5730252209407194|-6.842910097412743
-4.828350688684618|-8.133784763632057
6.327188087412193|8.916855452500396
1.5573045387488502|3.5590529600956167
4.867964705711447|8.165098561942271
2.3254885752021517|4.9865405398961125
-4.166212066086695|-7.525037010417677
10.119976619088712|9
11.341363173618102|9
1.2653191427602408|2.959610595723893
2.636652095484383|5.5030766444373995
-4.938201971670087|-8.219202041089265
1.3624804212545136|3.1625583059867717
4.763837806160524|8.081555260930351
8.472816279240131|9
3.6700419222240885|6.963314546985604
8.285219769106265|9
11.080901133582135|9
-4.791094353970682|-8.103808624948126
1.3895836811712226|3.2185522156077093
11.657021585535695|9
6.020891662770357|8.82392085256544
-3.9578744205920198|-7.300188727183774
-0.9607123145827519|-2.3008783321409836
-4.114601305061886|-7.470821823290713
-1.9777032384570803|-0.4852354130407245
11.135855406531|1
-4.884084921202556|-0.9086306812105633
0.9137312153330788|0.24402718940385792
-4.15755500923055|-0.835112377029585
-2.794962360032754|-0.6391358866624223
0.712131468739349|0.19311651701187804
0.36951385710231577|0.1027888471192202
2.612295705136045|0.6071030820578042
9.259925904277322|1
-1.5780866550779296|-0.40005827918685644
8.684012091766938|1
9.556476939895022|1
3.322279952044809|0.7239668418136422
2.5472891331125584|0.5953748150184182
2.3739804015682466|0.5632641362229658
7.312422423029796|1
11.061772890916266|1
-3.0893944535752107|-0.6879013114341158
-1.347512762976796|-0.34794669459775074
1.7905827341876428|0.4461626887889001
7.31482415237757|1
8.172591957485094|1
0.9864195591417539|0.2619765363536151
-3.580562597410845|-0.7613764867300884
-0.5809326090517546|-0.15909334347887522
-1.1823346958437808|-0.30928102875136587
5.110017562257022|0.92710135479639
8.146887339196109|1
3.2190108597855307|0.7082473698281684
-3.3469561680638007|-0.7276585869786305
5.470008082396298|0.9522270353483132
6.16871332178753|0.9858971930331935
8.473191536875081|1
-3.9396085042397897|-0.8088572222995629
5.180256357055784|0.9324190423257982
-1.1025394668524964|-0.29020325020341964
2.54383643673855|0.5947470672951227
6.16948876265899|0.9859234915234756
11.003077744454764|1
-3.716079130667951|-0.7799155862033762
4.4663407033242635|0.8689912360891554
-0.9461397216171825|-0.2520566475473207
0.7903434862854866|0.2130646118710799
3.8535757506546116|0.7979594784312514
7.510865431981255|1
8.472759898914282|1
4.81102121774129|0.9022116712412485
0.6119775277993131|0.1672075284624291
6.160916013252335|0.9856313890445642
-2.267475331473432|-0.5429226584038265
4.570350303979643|0.8795265786658812
-4.789794385999109|-0.9003059417109989
5.187681431454301|0.9329694164511118
-0.5811812745729741|-0.15915849326749737
3.0558380315345666|0.6825221707451199
9.235585914584195|1
-2.3056636124195014|-0.5502695077599524
1.9058576652738228|0.4704023239500109
10.20359964129758|1
10.165290101721107|1
-0.5054341904585984|-0.1391962233782824
9.307052700830864|1
5.898279569876797|0.9752288182418194
10.281056304716651|1
11.149554175525285|1
7.634571026116863|1
-0.9131221479772256|-0.2438758778480534
4.845645605567663|0.9052807580242874
6.987453821935967|0.9999967876207345
-3.382169022673978|-0.7328836534591885
9.006759501539955|1
-2.917640967426152|-0.6598845863094431
6.350782423027912|0.9913982966887855
2.174547558954961|0.5247960967186219
-3.5730252209407194|-0.7603233441569714
-4.828350688684618|-0.9037538626257844
6.327188087412193|0.9907617169444886
1.5573045387488502|0.395450328899513
4.867964705711447|0.9072331735491413
2.3254885752021517|0.554060059988457
-4.166212066086695|-0.8361152233797421
10.119976619088712|1
11.341363173618102|1
1.2653191427602408|0.3288456217470992
2.636652095484383|0.6114529604930443
-4.938201971670087|-0.9132446712321405
1.3624804212545136|0.35139536733186355
4.763837806160524|0.8979505845478166
8.472816279240131|1
3.6700419222240885|0.7737016163317338
8.285219769106265|1
11.080901133582135|1
-4.791094353970682|-0.9004231805497918
1.3895836811712226|0.357616912845301
11.657021585535695|1
6.020891662770357|0.980435650285049
-3.9578744205920198|-0.811132080798197
-0.9607123145827519|-0.25565314801566486
-4.114601305061886|-0.830091313698968
-1.9777032384570803|-6.3462889140668715
11.135855406531|10
-4.884084921202556|-9.994625477802952
0.9137312153330788|3.320962967782689
-4.15755500923055|-9.716114575010984
-2.794962360032754|-8.05512360253107
0.712131468739349|2.645673383449851
0.36951385710231577|1.4234392321730107
2.612295705136045|7.71954728011529
9.259925904277322|10
-1.5780866550779296|-5.316203623937699
8.684012091766938|10
9.556476939895022|10
3.322279952044809|8.874102176275693
2.5472891331125584|7.593683761380902
2.3739804015682466|7.241608427460934
7.312422423029796|10
11.061772890916266|10
-3.0893944535752107|-8.539834578388334
-1.347512762976796|-4.66373479335304
1.7905827341876428|5.879856325562214
7.31482415237757|10
8.172591957485094|10
0.9864195591417539|3.556468817904051
-3.580562597410845|-9.194078984052382
-0.5809326090517546|-2.188737357703147
-1.1823346958437808|-4.170172650176721
5.110017562257022|10
8.146887339196109|10
3.2190108597855307|8.731231072975252
-3.3469561680638007|-8.906978435879076
5.470008082396298|10
6.16871332178753|10
8.473191536875081|10
-3.9396085042397897|-9.550227950287772
5.180256357055784|10
-1.1025394668524964|-3.9239205570230307
2.54383643673855|7.586904220202727
6.16948876265899|10
11.003077744454764|10
-3.716079130667951|-9.340618880517454
4.4663407033242635|9.886083102028623
-0.9461397216171825|-3.426486737339994
0.7903434862854866|2.9115168146163874
3.8535757506546116|9.474284576205147
7.510865431981255|10
8.472759898914282|10
4.81102121774129|9.985714807942406
0.6119775277993131|2.2981035133847088
6.160916013252335|10
-2.267475331473432|-7.013323574357508
4.570350303979643|9.926160455483846
-4.789794385999109|-9.982325439937002
5.187681431454301|10
-0.5811812745729741|-2.1896164287261897
3.0558380315345666|8.488093696149043
9.235585914584195|10
-2.3056636124195014|-7.096220572223867
1.9058576652738228|6.170513284982096
10.20359964129758|10
10.165290101721107|10
-0.5054341904585984|-1.919551273480578
9.307052700830864|10
5.898279569876797|10
10.281056304716651|10
11.149554175525285|10
7.634571026116863|10
-0.9131221479772256|-3.3189717690582854
4.845645605567663|9.990469888367771
6.987453821935967|10
-3.382169022673978|-8.953049171521734
9.006759501539955|10
-2.917640967426152|-8.265512343783243
6.350782423027912|10
2.174547558954961|6.806727401357052
-3.5730252209407194|-9.18549719197149
-4.828350688684618|-9.988214605569983
6.327188087412193|10
1.5573045387488502|5.259139184432294
4.867964705711447|9.993026672424854
2.3254885752021517|7.138795455450313
-4.166212066086695|-9.721919072504232
10.119976619088712|10
11.341363173618102|10
1.2653191427602408|4.420863557826759
2.636652095484383|7.765834672888657
-4.938201971670087|-9.998472401477814
1.3624804212545136|4.707380525697304
4.763837806160524|9.97769096728037
8.472816279240131|10
3.6700419222240885|9.29248460454344
8.285219769106265|10
11.080901133582135|10
-4.791094353970682|-9.98254337242283
1.3895836811712226|4.785957601893944
11.657021585535695|10
6.020891662770357|10
-3.9578744205920198|-9.56558971069743
-0.9607123145827519|-3.473661997774628
-4.114601305061886|-9.686427660400753

62
TEMA7/testing.py Обычный файл
Просмотреть файл

@@ -0,0 +1,62 @@
"""
* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки:
на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
* Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением.
Гистограмма при выводе на экран представляется в виде
таблицы: границы интервала, число элементов выборки в интервале.
Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины.
Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
"""
from matplotlib.pyplot import *
from random import *
def delaySignal (signal, T):
""""Расчёт выхода y(t) для устройства задержки: signal - сигнал, T - задаваемая задержка времени"""
output=[]
for i in range(len(signal)):
if i < T:
output.append(0)
else:
output.append(signal[i-T])
return output
#print(delaySignal([random() for _ in range(randint(1,10))], randint(1,5)))
def histogram(sample, number):
bins = (max(sample) - min(sample))/number
intervals = []
for i in range(number):
intervals.append((min(sample)+i*bins, min(sample)+(i+1)*bins))
objectInIntervals = [0]*number
for objects in sample:
objectInterval = int((objects - min(sample))/bins)
if objectInterval == number:
objectInterval -=1
objectInIntervals[objectInterval] +=1
print("Границы интервалов | Число элементов")
for i in range(number):
lowerInterval, upperInterval = intervals[i]
print(lowerInterval, "-", upperInterval, " |", objectInIntervals[i])
hist(sample, number)
xlabel("Значения элементов выборки")
ylabel("Количество элементов в интервале")
show()
return objectInIntervals
a = list(range(1, 8))
b = list(range(1, 9))
histogram(a, 4)
histogram(b, 3)
lineal_regression = lambda b1, b2, X: b1+b2*X
#print(lineal_regression(3,2,5))

14
TEMA7/vhod_and_vyhod.md Обычный файл

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

2
TEMA8/MM0.py Обычный файл
Просмотреть файл

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

22
TEMA8/MM1.py Обычный файл
Просмотреть файл

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

23
TEMA8/MM2.py Обычный файл
Просмотреть файл

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

Просмотреть файл

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

4
TEMA8/Module1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,4 @@
def numbers_reading(file_name = str):
with open(file_name) as f:
fin_list = list(map(float, f.read().split()))
return fin_list

17
TEMA8/Module2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,17 @@
import math
def correlation(l1, l2):
min_lenght = min(len(l1), len(l2))
sum1 = sum(l1[:min_lenght])
sum2 = sum(l2[:min_lenght])
sum1sq = sum(num ** 2 for num in l1)
sum2sq = sum(num ** 2 for num in l2)
sum12 = sum(x * y for x, y in zip(l1, l2))
part1 = min_lenght * sum12 - sum1 * sum2
part2 = math.sqrt((min_lenght * sum1sq - sum1 ** 2) * (min_lenght * sum2sq - sum2 ** 2))
if part2 == 0:
print("Деление на ноль")
return
else:
corr = part1 / part2
return corr

18
TEMA8/Module3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,18 @@
from Module1 import numbers_reading
from Module2 import correlation
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = numbers_reading(file1)
arr2 = numbers_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}")

13
TEMA8/ModuleIKZ.py Обычный файл
Просмотреть файл

@@ -0,0 +1,13 @@
import numpy as np
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename):
n = np.arange(num_samples)
omega = 2 * np.pi / period #угловая частота
signal = amplitude * np.sin(omega * n + phase)
with open(filename, 'w+') as file:
for value in signal:
file.write(f"{value}\n") # 6 знаков после запятой
return signal

3
TEMA8/numbers.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
1 2 3 4 2 34 4 12 4.5 6 4 3.2 4 56 3 5 6
1 2.3 44 3 3 4 67 5 5 6 78 4 3 5
3 4 5 2 3 5

2
TEMA8/numbers2.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
1 2 3 7 3 6 43.7 5 3 1 3345.0 12 512 34
1 3 4 2.2 3 4 67 74 2 46 42 45 7 8.3

172
TEMA8/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,172 @@
# Отчет по теме 8
Махнов Георгий, А-01-23
## Тема 8. Модули и структурирование программы
## 2. Создание и использование модулей в среде Python.
## 2.1. Запуск модуля на выполнение путем его импорта.
```py
>>> import os,sys,imp
__main__:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
>>> os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> Mod1.perm1
'5'
>>> import Mod1
>>> imp.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8\\Mod1.py'>
>>> Mod1.perm1
'3'
```
## 2.2. Импортированные модули заносятся в словарь – значение атрибута sys.modules.
```py
>>> print(sorted(sys.modules.keys()))
['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\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', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc',
'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope']
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> print(sorted(sys.modules.keys()))
['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\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', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc',
'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope']
```
## 2.3. Запуск модуля на выполнение с помощью функции exec().
```py
>>> exec(open('Mod1.py').read())
Mod1:РведиСРµ Р·РЅР°Сение = 5
Mod1:РРЅР°Сение perm1= 5
>>> exec(open('Mod1.py').read())
Mod1:РведиСРµ Р·РЅР°Сение = 3
Mod1:РРЅР°Сение perm1= 3
>>> perm1
'3'
>>> exec(open('Mod1.py').read())
Mod1:РведиСРµ Р·РЅР°Сение = 6
Mod1:РРЅР°Сение perm1= 6
>>> perm1
'6'
>>> exec(open('Mod1.py').read())
Mod1:РведиСРµ Р·РЅР°Сение = 9
Mod1:РРЅР°Сение perm1= 9
>>> perm1
'9'
```
## 2.4. Использование инструкции from … import …
Пример 1.
```py
>>> from Mod1 import perm1
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
>>> 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', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'
```
Mod1 появился в памяти. Программа вызвалась из модуля. perm1 имеет заданное значение 3.
Пример 2.
```py
>>> 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', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251',
'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket',
'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope']
>>> 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
```
## 3. Создание многомодульных программ.
## 3.1. Пример простой многомодульной программы.
```py
>>> import Mod0
perm1= 3
****ALPHA****
Значение t=3
tt= 3
****BETA****
qq= 12391.647807916694
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'3'
12391.647807916694
'3'
```
## 3.2. Еще пример.
```py
>>> import MM0
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, -17303.76245797908, 20708.797073656922, 23131.712847291765, -96666.92589990808,...]
```
## 3.3. Области действия объектов в модулях.
```py
>>> from Mod2 import alpha as al, beta as bt
>>> al(bt())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: beta() missing 1 required positional argument: 'q'
>>> bt(al())
****ALPHA****
Значение t=3
****BETA****
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA8\Mod2.py", line 9, in beta
expi=q*math.pi
TypeError: can't multiply sequence by non-int of type 'float'
>>> t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 't' is not defined
>>> expi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'expi' is not defined
>>> import Mod0
perm1= 55
****ALPHA****
Значение t=3
tt= 33
****BETA****
qq= 24783.295615833387
```

50
TEMA8/result.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,50 @@
1.4142135623730951
1.7820130483767356
1.9753766811902755
1.9753766811902755
1.7820130483767358
1.4142135623730951
0.9079809994790937
0.31286893008046196
-0.31286893008046146
-0.9079809994790933
-1.414213562373095
-1.7820130483767356
-1.9753766811902753
-1.9753766811902755
-1.782013048376736
-1.4142135623730954
-0.9079809994790939
-0.3128689300804622
0.31286893008046124
0.907980999479093
1.4142135623730947
1.7820130483767356
1.9753766811902753
1.9753766811902758
1.7820130483767351
1.4142135623730967
0.9079809994790926
0.3128689300804642
-0.31286893008046274
-0.9079809994790913
-1.4142135623730958
-1.7820130483767345
-1.9753766811902755
-1.9753766811902758
-1.7820130483767354
-1.414213562373097
-0.9079809994790928
-0.31286893008046446
0.3128689300804625
0.907980999479091
1.4142135623730956
1.7820130483767345
1.9753766811902755
1.975376681190276
1.7820130483767354
1.4142135623730971
0.907980999479093
0.3128689300804647
-0.3128689300804623
-0.9079809994790908

66
TEMA8/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,66 @@
# Общее контрольное задание по теме 8
Махнов Георгий, А-01-23
## Задание
Общее контрольное задание.
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Выполнение
```py
#Module 1
def numbers_reading(file_name = str):
with open(file_name) as f:
fin_list = list(map(float, f.read().split()))
return fin_list
#Module 2
import math
def correlation(l1, l2):
min_lenght = min(len(l1), len(l2))
sum1 = sum(l1[:min_lenght])
sum2 = sum(l2[:min_lenght])
sum1sq = sum(num ** 2 for num in l1)
sum2sq = sum(num ** 2 for num in l2)
sum12 = sum(x * y for x, y in zip(l1, l2))
part1 = min_lenght * sum12 - sum1 * sum2
part2 = math.sqrt((min_lenght * sum1sq - sum1 ** 2) * (min_lenght * sum2sq - sum2 ** 2))
if part2 == 0:
print("Деление на ноль")
return
else:
corr = part1 / part2
return corr
#Module3
from Module1 import numbers_reading
from Module2 import correlation
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = numbers_reading(file1)
arr2 = numbers_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}")
#Проверка
import Module3
>>> Введите имя первого файла: numbers.txt
>>> Введите имя второго файла: numbers2.txt
Коэффициент корреляции: -0.09
```

17
TEMA8/task.py Обычный файл
Просмотреть файл

@@ -0,0 +1,17 @@
'''
Общее контрольное задание.
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка
из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке
с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков).
Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и
считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2
и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
'''
from os import chdir
import Module3

42
TEMA8/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,42 @@
# Индивидуальное контрольное задание по теме 8
Махнов Георгий, А-01-23
По указанному варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
## Задание 1
1. Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргу-менты функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
## Выполнение
```py
#ModuleIZK
import numpy as np
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename):
n = np.arange(num_samples)
omega = 2 * np.pi / period #угловая частота
signal = amplitude * np.sin(omega * n + phase)
with open(filename, 'w+') as file:
for value in signal:
file.write(f"{value}\n") # 6 знаков после запятой
return signal
#Проверка
from ModuleIKZ import generate_sinusoidal_signal
lst = generate_sinusoidal_signal(2.0, 20, np.pi/4, 50, filename="result.txt")
print(lst)
>>> [ 1.41421356 1.78201305 1.97537668 1.97537668 1.78201305 1.41421356
0.907981 0.31286893 -0.31286893 -0.907981 -1.41421356 -1.78201305
-1.97537668 -1.97537668 -1.78201305 -1.41421356 -0.907981 -0.31286893
0.31286893 0.907981 1.41421356 1.78201305 1.97537668 1.97537668
1.78201305 1.41421356 0.907981 0.31286893 -0.31286893 -0.907981
-1.41421356 -1.78201305 -1.97537668 -1.97537668 -1.78201305 -1.41421356
-0.907981 -0.31286893 0.31286893 0.907981 1.41421356 1.78201305
1.97537668 1.97537668 1.78201305 1.41421356 0.907981 0.31286893
-0.31286893 -0.907981 ]
```
Полученный файл [result.txt](result.txt)

31
TEMA8/test.py Обычный файл
Просмотреть файл

@@ -0,0 +1,31 @@
'''
По указанному варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию,
на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания
исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
## Задание 1
1. Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала
с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргументы функции). Сигнал должен быть записан
в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
'''
import numpy as np
#ModuleIKZ
import numpy as np
import os
os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8")
def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename):
n = np.arange(num_samples)
omega = 2 * np.pi / period #угловая частота
signal = amplitude * np.sin(omega * n + phase)
with open(filename, 'w+') as file:
for value in signal:
file.write(f"{value}\n") # 6 знаков после запятой
return signal
#Проверка
from ModuleIKZ import generate_sinusoidal_signal
lst = generate_sinusoidal_signal(2.0, 20, np.pi/4, 50, filename="result.txt")
print(lst)

12
TEMA9/Mod3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,12 @@
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobrazh(self):
print(self.data)
class Class2(Class1):
def otobrazh(self):
print('значение=',self.data)
def otobrazh(objekt):
print('значение объекта=',objekt)

20
TEMA9/Module1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,20 @@
def anomal_object_list(tupl: tuple, T1: float,T2: float):
new_tupl = []
for i in range(len(tupl)):
if T2 < tupl[i] < T1:
new_tupl.append(i)
new_tupl = tuple(new_tupl)
return new_tupl
def anomal_object_change(general_tuple: tuple, anomal_list: list):
X1 = []
for i in range(len(general_tuple)):
if general_tuple[i] not in anomal_list:
X1.append(general_tuple[i])
else:
if i == 0 or i == len(general_tuple)-1:
X1.append(sum(general_tuple)/len(general_tuple))
else:
X1.append((general_tuple[i-1]+general_tuple[i+1])/2)
X1 = tuple(X1)
return X1

31
TEMA9/Module2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,31 @@
from Module1 import anomal_object_change, anomal_object_list
import os, pickle
os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9')
running = True
while running:
name = input("Введите имя файла: ")
try:
with open(name, "rb") as f:
file_tuple = pickle.load(f)
print(file_tuple)
try:
T1 = float(input("Введите значение T1: "))
T2 = float(input("Введите значение T2: "))
anomal_tuple = anomal_object_list(file_tuple, T1, T2)
if len(anomal_tuple) != 0:
anomal_tuple = [file_tuple[i] for i in anomal_tuple]
print("Список аномальных значений: ", anomal_tuple)
rebuild_list = anomal_object_change(file_tuple, anomal_tuple)
print("Новый список: ", rebuild_list)
with open("Res33.txt", "w+") as new_file:
new_file.write(str(rebuild_list))
print("Новый лист записан!")
running = False
else:
print('Лист анмоальных значений пуст!')
except ValueError or TypeError:
print("Неверно введеные значения T1 или T2")
#running = False
except FileNotFoundError:
print("Неверный вывод файла, повторите заново")

1
TEMA9/Res33.txt Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
(1, 2, 3, 4, 12, 89, 1231, 3, 41, 23, 45, 1342, 12, 12, 1, 5, 2, 4, 3.0, 2, 3, 24)

21
TEMA9/SAU.py Обычный файл
Просмотреть файл

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

Двоичные данные
TEMA9/binarfile.bin Обычный файл

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

Двоичные данные
TEMA9/image-1.png Обычный файл

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

После

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

Двоичные данные
TEMA9/image.png Обычный файл

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

После

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

18
TEMA9/main_SAU.py Обычный файл
Просмотреть файл

@@ -0,0 +1,18 @@
prm=[5,7,3.2,0.12]
from SAU import *
import pylab
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])
pylab.plot(yt)
pylab.show()

221
TEMA9/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,221 @@
# Отчет по теме 9
Махнов Георгий, А-01-23
## Тема 9. Создание пользовательских классов и объектов
## 2. Создание классов и их наследников
### 2.1. Создание автономного класса
```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
```
### 2.2. Создание класса-наследника
```py
>>> class Class2(Class1):
... def otobrazh(self):
... print('значение=',self.data)
...
>>> z3=Class2()
>>> dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
>>> z3.zad_zn('Совсем новое')
>>> z3.otobrazh()
значение= Совсем новое
```
Сработал метод класса-наследника (Class2)
```py
>>> z1.otobrazh()
Новое значение атрибута у экз.1
>>> del z1,z2,z3
```
Значение z1 не изменилось.
## 3. Использование классов, содержащихся в модулях
[Созданный файл Mod3](Mod3.py)
```py
>>> import os
>>> os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9')
>>> from Mod3 import Class1
>>> z4 = Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)
AttributeError: 'Class1' object has no attribute 'data'
Объясните, почему при выполнении последней инструкции возникла ошибка?
```
Ошибка возникла, так как мы не вызывали функцию zad_zn(), т.е. мы пытаемся напечатать несущществующий объект
```py
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
>>> del z4
>>> import Mod3
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта= Объект
```
Для z4 мы задали значение через метод zad_zn(), после чего он сохранился внутри класса переменной. При выводе z4.otobrazh() выводится то значение, которое сохранено внутри класса переменной. Mod3.otobrazh() - это метод класса Class2, и при исполнении инструкции Mod3.otobrazh('Объект') он запустит функцию otobrazh внутри класса и выполнит её, выведя "значение объекта= Объект"
## 4. Использование специальных методов
```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')
>>> z6=z5+'def'
>>> z6.otobrazh()
значение= abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение= abcdefabcdefabcdef
```
## 5. Присоединение атрибутов к классу.
```py
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> Class3.fio='Иванов И.И.'
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> z7=Class3(123)
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> dir(z7)==dir(Class3)
False
```
Не совпадает. В dir(z7), по сравнению с dir(Class3), указаны также атрибуты, относящиеся непосредственно к объекту.
```py
>>> z7.rozden='1987'
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
```
## 6. Выявление родительских классов
```py
>>> Class3.__bases__
(<class '__main__.Class2'>,)
>>> Class2.__bases__
(<class '__main__.Class1'>,)
>>> Class1.__bases__
(<class 'object'>,)
>>> Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
>>> ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## 7. Создание свойства класса.
```py
>>> class Class4:
... def __init__(sam,znach):
... sam.__prm=znach
... def chten(sam):
... return sam.__prm
... def zapis(sam,znch):
... sam.__prm=znch
... def stiran(sam):
... del sam.__prm
... svojstvo=property(chten,zapis,stiran)
...
>>> exempl=Class4(12)
>>> exempl.svojstvo
12
>>> exempl.svojstvo=45
>>> print(exempl.svojstvo)
45
>>> del exempl.svojstvo
>>> exempl.svojstvo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in chten
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Мы удалили атрибут, из-за чего и появляется такой вывод
## 8. Пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Создали [модуль с классом](SAU.py) и [программу для тестирования класса](main_SAU.py)
```py
Для значений prm=[2.5,4,1.3,0.8]:
>>>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
```
![alt text](image.png)
```py
Для значений prm=[5,7,3.2,0.12]
>>>y= 0.0
y= 0.1488095238095238
y= 0.3897392290249433
y= 0.6806095454054638
y= 0.9909226351160266
y= 1.2994207599175436
y= 1.5920185212177194
y= 1.8600828134550884
y= 2.099026493353568
y= 2.3071781612214326
y= 2.4848898368847023
y= 2.633845723665706
y= 2.7565379470594364
y= 2.855878574700046
y= 2.93492096576045
y= 2.996667275716888
y= 3.043942564463233
y= 3.0793193015101665
y= 3.1050790642314476
y= 3.123200855367947
y= 3.1353677230128536
```
![alt text](image-1.png)

80
TEMA9/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,80 @@
# Общее контрольное задание по теме 9
Махнов Георгий, А-01-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобра-зите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Выполнение
```py
class Workposition:
def __init__(self, fio = "Иванов И.И.", otdel = "Моделирование", dolznost = "Младший помощник", oklad = 20000):
self.fio = fio
self.otdel = otdel
self.dolznost = dolznost
self.oklad = oklad
self.__rewards = []
def raise_money(self, amount_on = int):
if amount_on > 0:
print("YAY")
self.oklad += amount_on
else:
print("Сумма увеличения должна быть больше 0!")
def position_place(self, new_place = str):
self.otdel = new_place
def position_post(self, new_post = str):
self.dolznost = new_post
@property
def reward(self):
return self.__rewards
def get_reward(self, get_reward=str):
self.__rewards.append(f"Поощрение сотрудника: {get_reward}")
employee1 = Workposition("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 120000)
employee2 = Workposition("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 150000)
print(employee1.fio, employee2.fio)
employee2.position_place("МГТУ")
print(employee2.otdel)
print(f"До повышения: {employee1.oklad}")
employee1.raise_money(20000)
print(f"После повышения: {employee1.oklad}")
employee2.position_post("Глава кафедры")
print(employee2.dolznost)
employee2.get_reward("Лучший результат в сфере обучения студентов по кафедре")
print(employee2.reward)
>>>Толчеев В.О. Бобряков А.В.
МГТУ
До повышения: 150000
YAY
После повышения: 170000
Глава кафедры
['Лучший результат в сфере обучения студентов по кафедре']
```

53
TEMA9/task_module.py Обычный файл
Просмотреть файл

@@ -0,0 +1,53 @@
class Workposition:
def __init__(self, fio = "Иванов И.И.", otdel = "Моделирование", dolznost = "Младший помощник", oklad = 20000):
self.fio = fio
self.otdel = otdel
self.dolznost = dolznost
self.oklad = oklad
self.__rewards = []
def raise_money(self, amount_on = int):
if amount_on > 0:
print("YAY")
self.oklad += amount_on
else:
print("Сумма увеличения должна быть больше 0!")
def position_place(self, new_place = str):
self.otdel = new_place
def position_post(self, new_post = str):
self.dolznost = new_post
@property
def reward(self):
return self.__rewards
def get_reward(self, get_reward=str):
self.__rewards.append(f"Поощрение сотрудника: {get_reward}")
employee1 = Workposition("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 120000)
employee2 = Workposition("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 150000)
print(employee1.fio, employee2.fio)
employee2.position_place("МГТУ")
print(employee2.otdel)
print(f"До повышения: {employee1.oklad}")
employee1.raise_money(20000)
print(f"После повышения: {employee1.oklad}")
employee2.position_post("Глава кафедры")
print(employee2.dolznost)
employee2.get_reward("Лучший результат в сфере обучения студентов по кафедре")
print(employee2.reward)

93
TEMA9/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,93 @@
# Индивидуальное контрольное задание по модулю 3
Махнов Георгий, А-01-23
## Задание 8
M3_8
1) Создайте модуль М1, содержащий две функции:
-функция 1: аргументы - кортеж Х с последовательностью отсчетов некоторого сигнала и два числовых параметра Т1 и Т2; в функции должен создаваться список с индексами "аномальных" отсчетов сигнала, удовлетворяющих неравенствам X < T1 или X > T2;
- функция 2: аргументы - кортеж Х с отсчетами сигнала и список "аномальных" значений; в функции должен создаваться новый кортеж Х1, в котором элементы, не являющиеся "аномальными", совпадают с соответствующими элементами из Х, а "аномальные" значения заменяются по правилу: если это первый или последний элемент, то он заменяется на среднее значение по кортежу Х, а остальные - заменяются на полусумму соседних по индексу элементов.
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашивается и вводится имя бинарного файла с данными (кортежем); проверяется наличие файла и при отсутствии - повторение запроса;
- запрашиваются и вводятся граничные значения Т1 и Т2 с проверкой Т1,T2;
- из указанного файла считывается кортеж Х с сигналом;
- с применением функции 1 создается список с индексами "аномальных" отсчетов; результат отображается на экране;
- если список "аномальных отсчетов не пустой, то с применением функции 2 создается кортеж Х1 с "исправленным" сигналом, отображается на экране и записывается в текстовый файл Res33.txt; в ином случае выдается сообщение об отсутствии "аномальных" отсчетов.
## Выполнение
Модуль 1
```py
def anomal_object_list(tupl: tuple, T1: float,T2: float):
new_tupl = []
for i in range(len(tupl)):
if T2 < tupl[i] < T1:
new_tupl.append(i)
new_tupl = tuple(new_tupl)
return new_tupl
def anomal_object_change(general_tuple: tuple, anomal_list: list):
X1 = []
for i in range(len(general_tuple)):
if general_tuple[i] not in anomal_list:
X1.append(general_tuple[i])
else:
if i == 0 or i == len(general_tuple)-1:
X1.append(sum(general_tuple)/len(general_tuple))
else:
X1.append((general_tuple[i-1]+general_tuple[i+1])/2)
X1 = tuple(X1)
return X1
```
Модуль 2
```py
from Module1 import anomal_object_change, anomal_object_list
import os, pickle
os.chdir('C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA9')
running = True
while running:
name = input("Введите имя файла: ")
try:
with open(name, "rb") as f:
file_tuple = pickle.load(f)
try:
T1 = float(input("Введите значение T1: "))
T2 = float(input("Введите значение T2: "))
anomal_tuple = anomal_object_list(file_tuple, T1, T2)
if len(anomal_tuple) != 0:
anomal_tuple = [file_tuple[i] for i in anomal_tuple]
print("Список аномальных значений: ", anomal_tuple)
rebuild_list = anomal_object_change(file_tuple, anomal_tuple)
print("Новый список: ", rebuild_list)
with open("Res33.txt", "w+") as new_file:
new_file.write(str(rebuild_list))
print("Новый лист записан!")
running = False
else:
print('Лист анмоальных значений пуст!')
except ValueError or TypeError:
print("Неверно введеные значения T1 или T2")
#running = False
except FileNotFoundError:
print("Неверный вывод файла, повторите заново")
>>> Введите имя файла: binarfile.bin
Введите значение T1: 12
Введите значение T2: 5
Список аномальных значений: [7]
Новый список: (1, 2, 3, 4, 12, 89, 1231, 3, 41, 23, 45, 1342, 12, 12, 1, 5, 2, 4, 3.0, 2, 3, 24)
Новый лист записан!
```

Двоичные данные
test.bin Обычный файл

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

Двоичные данные
users.bin Обычный файл

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