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

...

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

Автор SHA1 Сообщение Дата
Пользователь № 13 аудитории Ж-202 aa554d436c TEMA9\Module.md
3 недель назад
Пользователь № 14 аудитории Ж-202 34d84be93c TEMA9/report.md
1 месяц назад
Данил Гордиевских 0e1a80dbbb Изменил(а) на 'TEMA8/test.md'
1 месяц назад
Пользователь № 14 аудитории Ж-202 92864ca5b2 TEMA8/test.md
1 месяц назад
Данил Гордиевских c518d21ed4 Edited report.md
1 месяц назад
Данил Гордиевских be1a33a411 TEMA8/task.md
1 месяц назад
Данил Гордиевских b85c3f7eaa TEMA8/report.md
1 месяц назад
Пользователь № 9 аудитории Ж-202 0f5120ea57 TEMA7/test.md edited
2 месяцев назад
Пользователь № 9 аудитории Ж-202 5fdc0540d7 TEMA7/test.md
2 месяцев назад
Пользователь № 9 аудитории Ж-202 f66f431d9e TEMA7/report.md and TEMA7/task.md
2 месяцев назад
Пользователь № 13 аудитории Ж-202 26d7d72ffd TEMA6/test.md
2 месяцев назад
Пользователь № 13 аудитории Ж-202 082a884806 TEMA5/test.md
2 месяцев назад
Данил Гордиевских 5dfc6b4069 Merge branch 'main' of http://uit.mpei.ru/git/GordiyevskikDA/python-labs
2 месяцев назад
Данил Гордиевских e1d91d2417 TEMA6/task.md
2 месяцев назад
Данил Гордиевских b066616722 TEMA6/report.md
2 месяцев назад
Данил Гордиевских ede2f10565 edit report.md
2 месяцев назад
Данил Гордиевских 22d13856db TEMA5/task.md
2 месяцев назад
Данил Гордиевских 0927da3b27 TEMA5/report.md
2 месяцев назад
Данил Гордиевских e058d217ab TEMA4/test.md edited
3 месяцев назад
Пользователь № 8 аудитории Ж-202 ec8173a9c2 e branch 'main' of http://uit.mpei.ru/git/GordiyevskikDA/python-labs
3 месяцев назад
Пользователь № 8 аудитории Ж-202 2cf445a624 TEMA4/test.md
3 месяцев назад
Данил Гордиевских 18a3e4fad9 TEMA4/report.md edited
3 месяцев назад
Пользователь № 8 аудитории Ж-202 f0f3b623cf TEMA4/task.md
3 месяцев назад
Пользователь № 8 аудитории Ж-202 9067761e97 TEMA4/report.md
3 месяцев назад
Пользователь № 8 аудитории Ж-202 5ef3a40778 TEMA3/test.md
3 месяцев назад
Пользователь № 8 аудитории Ж-202 aea9a7e2a7 TEMA3/task.md
3 месяцев назад
Пользователь № 8 аудитории Ж-202 3eefb2f8ca TEMA3/report.md
3 месяцев назад
Данил Гордиевских 6d8e9face9 TEMA2/task.md
4 месяцев назад
Данил Гордиевских ebafe05594 Merge branch 'main' of http://uit.mpei.ru/git/GordiyevskikDA/python-labs
4 месяцев назад
Данил Гордиевских c0c649f765 Merge pull request 'WIP' (#3) from master into main
4 месяцев назад
Данил Гордиевских 0558a1abd6 TEMA2/report.md
4 месяцев назад
Данил Гордиевских e1eadd36b3 WIP
4 месяцев назад
Данил Гордиевских 3694fcd9f3 Merge pull request 'master' (#2) from master into main
4 месяцев назад
Данил Гордиевских 27ed910703 Fixed report.md
4 месяцев назад
Данил Гордиевских cb083c89b5 TEMA1/report.md
4 месяцев назад

@ -0,0 +1,7 @@
#Программа по Теме 1 Гордиевских Данила Александровича
print('Hello')
h=input('Your name=')
import os
os.chdir("C:\\Users\\gorda\\YandexDisk\\5 семестр\\ПОАС\\TEMA1")

@ -0,0 +1,77 @@
# Отчет по теме 1
Гордиевских Данил, А-03-23
## 1 Изучение среды IDLE
## 1.1 Работа в интерпретаторе Python 3.13 (command line)
Изучены инструкции print() и input().
```
>>> print("Hello")
Hello
>>> h = input("Your name = ")
Your name = Danil
```
## 1.2 Работа в оболочке IDLE
Для настройки рабочей директории введены инструкции:
```
import os
os.chdir("C:\\Users\\gorda\\YandexDisk\\5 семестр\\ПОАС\\TEMA1")
```
Проведены настройки окна IDLE. Настроены размер окна, шрифт и выделение комментариев. Приведены скриншоты окон настройки
![Скриншот окна настройки окна](figure0.jpg)
![Скриншот окна настройки шрифта](figure1.jpg)
![Скриншот окна настройки выделений](figure2.jpg)
## 1.3 Написание демонстрационной программы
Создан файл Pr0.py, прикреплённый к отчёту, в него вставлены инструкции из пунктов 1.1 и 1.2.
Полученный вывод:
```
================== RESTART: C:\Users\gorda\YandexDisk\5 семестр\ПОАС\TEMA1\Pr0.py ==================
Hello
Your name=Danil
```
## 1.4 Анализ каталога pycache
После запуска программы Pr0.py в рабочей директории появился каталог __pycache__, внутри которого расположен файл Pr0.cpython-34.pyc, фрагмент которого представлен на скриншоте
![фрагмент файла Pr0.cpython-34.pyc ](figure3.jpg)
Файл .pyc — это скомпилированный файл байт-кода для исходного кода Python (.py) для исполнения виртуальной машиной Python
## 1.5 Изучение HELP'а
В командную строку Python введена инструкция help(print), help(input). Вывод — описание работы данных инструкций, представлен на скриншоте
![Текст хелпа по print() и input()](figure4.jpg)
## 1.6 Пункт 15
Открыт в редакторе и запущен файл prb1.py, получен вывод:
```
================== RESTART: C:\Users\gorda\YandexDisk\5 семестр\ПОАС\TEMA1\prb1.py =================
Как Вас зовут? Danil
Привет, Danil
```
Запущен файл tdemo_chaos.py и изучено его содержимое. Скриншот окна работы программы и код приграммы приведён ниже
![Работа tdemo_chaos.py](figure5.jpg)
![Код tdemo_chaos.py](figure6.jpg)
Запущен пример clock из пакета Turtle. Окно представлено на скриншоте
![Пример Clock](figure7.jpg)

Двоичные данные
TEMA1/figure0.jpg

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

После

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

Двоичные данные
TEMA1/figure1.jpg

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

После

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

Двоичные данные
TEMA1/figure2.jpg

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

После

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

Двоичные данные
TEMA1/figure3.jpg

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

После

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

Двоичные данные
TEMA1/figure4.jpg

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

После

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

Двоичные данные
TEMA1/figure5.jpg

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

После

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

Двоичные данные
TEMA1/figure6.jpg

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

После

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

Двоичные данные
TEMA1/figure7.jpg

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

После

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

@ -0,0 +1,220 @@
# Отчет по теме 1
Гордиевских Данил, А-03-23
## Пункт 2. Использование простых объектов
Созданы простые переменные. Просмотрены существующие объекты в рабочем пространстве. Определён класс переменной, удалена переменная из рабочего пространства.
```py
>>> f1 = 16; f2 = 3
>>> f1,f2
(16, 3)
>>> f1;f2
16
3
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
>>> dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> type(f1)
<class 'int'>
>>> del f1,f2
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__' ]
```
## Пункт 3. Изучение правил именования в Python
Название переменной не может начинаться с цифры и совпадать с зарезервированныым словам в ЯП.
```py
>>> gg1 = 1.6
>>> hh1 = "String"
>>> 73sr = 3
File "<stdin>", line 1
73sr = 3
^
SyntaxError: invalid decimal literal
>>> and = 7
File "<stdin>", line 1
and = 7
^^^
SyntaxError: invalid syntax
```
## Пункт 4. Исследование ключевых слов
Подключена библиотека keyword. Выведен список ключевых слов Python. Этот список сохранён в переменной
```py
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
kluchevie_slova = keyword.kwlist
```
## Пункт5. Исследование встроенных идентификаторов
Подключена библиотека builtins. Выведено содержание всех встроенных идентификаторов Python. Изучена функция abs()
```py
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>> abs(-0.1652)
0.1652
```
## Пункт 6. Чувствительность Python к регистру символов
Python чувствителен к регистру символов в названии переменных. Переменные Gg1 и gg1 -- разные
```py
>>> Gg1 = 45
>>> gg1
1.6
>>> Gg1
45
```
## Пункт 7. Изучение базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str)
### Пункт 7.1. Изучение логических переменных
Созданы логические переменные. Проверена их работоспособность
```py
>>> bb1 = True
>>> bb2 = False
>>> bb1;bb2
True
False
>>> type(bb1)
<class 'bool'>
```
### Пункт 7.2. Изучение числовых переменных
Изучены различные виды представления переменных типа int. Числа могут быть записаны как отрицательные, в экспоненциальной форме, в двоичной, восьмиричной, комплексной форме
```py
>>> ii1=-1234567890
>>> ff1=-8.9876e-12
>>> dv1=0b1101010
>>> type(dv1)
<class 'int'>
>>> vsm1=0o52765
>>> a=3.67; b=-0.45
>>> cc2=complex(a,b)
```
### Пункт 7.3. Изучение строковвых переменных
Изучены строковые переменные Python. Строка может быть записана в одну строку, в две и более строки, к символам в строке можно обращаться как к элементам массива. Строки не изменяемы, но их можно переопределить
```py
>>> ss1='Это - строка символов'
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>> print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1[0]
'Э'
>>> ss1[3:17:2]
' тоасм'
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> print(ss1)
Это = строка символов
```
## Пункт 8. Изучение сложных типов объектов: списки (list), кортежи (tuple), словари (dict), множества (set)
### Пункт 8.1. Изучение списков
Списки -- это последовательность: упорядоченная по местоположению коллекция объектов произвольных типов, размер которых практически не ограничен. В отличие от символьных строк, списки являются изменяемыми последовательностями, т.е. их элементы могут изменяться с помощью операций присваивания
```py
>>> spis1=[111,'Spisok',5-9j]
>>> stup=[0,0,1,1,1,1,1,1,1]
>>> spis = [1,2,3,4,
... 5,6,7
... ,8,9,0]
>>> spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> stup[-8::2]
[0, 1, 1, 1]
>>> spis1[1]='Список'
>>> spis1
[111, 'Список', (5-9j)]
>>> spis1.append('New item')
>>> spis1.append(ss1b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ss1b' is not defined
>>> s1b= 'Меня зовут: \n <Gordievskikh D. A. >'
>>> spis1.append(s1b)
>>> spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n <Gordievskikh D. A. >']
>>> print(spis1)
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n <Gordievskikh D. A. >']
>>> spis1.pop(1)
'Список'
>>> spis1
[111, (5-9j), 'New item', 'Меня зовут: \n <Gordievskikh D. A. >']
```
### Пункт 8.2. Изучение кортежей
Объект-кортеж похож на список, но его нельзя изменить – кортежи являются последовательно-стями, как списки, но они являются неизменяемыми, как строки. В отличие от списка литерал кор-тежа заключается в круглые, а не в квадратные скобки. Кортежи также поддер¬живают включение в них объектов различных типов и операции, типич¬ные для последовательностей
```py
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1= kort1+(s1b,)
>>> kort1
(222, 'Kortezh', (77+8j), 'Меня зовут: \n <Gordievskikh D. A. >')
>>> kort1.count(222)
1
```
### Пункт 8.3. Изучение словаря
Объект-словарь похож на ассоциативные массивы в других языках программирования. Его содер-жанием является совокупность пар: «ключ (key)»:«значение (value)». В качестве ключей могут использоваться неизменяемые типы объектов. Значениями могут быть объекты любого типа. Ссылка на ключ обеспечивает быстрый доступ к связанному с ним значению. В отличие от списков и кортежей совокупность элементов словаря не является упорядоченной (последовательностью). Его элементы могут изменяться с помощью операции присваивания значений.
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1['Saratov']
145
>>> dic1['Saratov'] = 1989
>>> dic1['Saratov']
1989
>>> sorted(dic1.keys())
['Orel', 'Saratov', 'Vologda']
>>> sorted(dic1.values())
[45, 56, 1989]
>>> dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>> dic3['statistics'][2]
'standart deviation'
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>> AVTI['Курс III'][5]
15
```
### Пункт 8.4. Изучение множеств
Объект-множество – это неупорядоченная совокупность неповторяющихся элементов. Эти элементы могут быть разных, но только неизменяемых типов (числа, строки, кортежи).
```py
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'линия связи', 'микропроцессор', 'двигатель', 'датчик'}
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'реле', 'двигатель', 'датчик', 'микропроцессор'}
```

@ -0,0 +1,14 @@
#Индивидуальное задание №21
Гордиевских Данил, А-03-23
Создайте кортеж с элементами – названиями цветов: розы, гвоздики, лилии, сирень, хризантемы, анютины глазки. Напишите инструкцию формального определения числа элементов в кортеже. Напишите инструкции, позволяющие создать новый кортеж, отличающийся от первого тем, что в нем вместо роз будут представлены колокольчики.
```py
>>> flowers = ("розы", "гвоздики", "лилии", "сирень", "хризантемы", "анютины глазки")
>>> len(flowers)
6
>>> flowers = ("колокольчик",)+flowers[1:]
>>> flowers
('колокольчик', 'гвоздики', 'лилии', 'сирень', 'хризантемы', 'анютины глазки')
```

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

@ -0,0 +1,442 @@
# Отчет по теме 3
Гордиевских Данил, А-03-23
## Пункт 2.1
Преобразование в логический тип с помощью функции bool(<Объект>).
```py
logiz1=bool(56)
logiz2=bool(0)
logiz3=bool("Beta")
logiz4=bool("")
logiz1
True
logiz2
False
logiz3
True
logiz4
False
```
## Пункт 2.2
Преобразование в целое десятичное число объекта с заданной системой счисления
```py
tt1=int(198.6);tt1
198
tt2=int("-76");tt2
-76
tt3=int("B",16);tt3
11
tt4=int("71",8);tt4
57
```
## Пункт 2.3
Преобразование десятичных чисел в другие системы счисления
```py
hh=123
dv1=bin(hh);dv1
'0b1111011'
vos1=oct(hh);vos1
'0o173'
shs1=hex(hh);shs1
'0x7b'
int(dv1,2)
123
int(vos1,8)
123
int(shs1,16)
123
```
## Пункт 3.1
Преобразование в строку символов
```py
strk1=str(23.6)
strk2=str(logiz3)
strk3=str(["A","B","C"])
strk4=str(("A","B","C"))
strk5=str({"A":1,"B":2,"C":9})
strk1;strk2;strk3;strk4;strk5
'23.6'
'True'
"['A', 'B', 'C']"
"('A', 'B', 'C')"
"{'A': 1, 'B': 2, 'C': 9}"
```
## Пункт 3.2
Преобразование элементов объекта в список
```py
spis1=list("Строка символов")
spis2=list((124,236,-15,908))
spis3=list({"A":1,"B":2,"C":9})
spis1;spis2;spis3
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
[124, 236, -15, 908]
['A', 'B', 'C']
spis4=list({"A":1,"B":2,"C":9}.values())
spis4
[1, 2, 9]
spis5=list({"A":1,"B":2,"C":9}.keys())
spis5
['A', 'B', 'C']
```
## Пункт 3.3
Преобразование элементов объектов в кортеж
```py
kort7=tuple('Строка символов')
kort8=tuple(spis2)
kort9=tuple({"A":1,"B":2,"C":9})
kort7;kort8;kort9
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
(124, 236, -15, 908)
('A', 'B', 'C')
```
## Пункт 3.4
Преобразование элементов объектов в кортеж
```py
del strk5, kort8
strk5;kort8
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
strk5;kort8
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
fio = "GordievskikhDA"
fiospis = list(fio);fiospis
['G', 'o', 'r', 'd', 'i', 'e', 'v', 's', 'k', 'i', 'k', 'h', 'D', 'A']
fiokort = tuple(fiospis);fiokort
('G', 'o', 'r', 'd', 'i', 'e', 'v', 's', 'k', 'i', 'k', 'h', 'D', 'A')
fiostr = str(fiokort);fiostr
"('G', 'o', 'r', 'd', 'i', 'e', 'v', 's', 'k', 'i', 'k', 'h', 'D', 'A')"
```
## Пункт 4
Сложение, вычитание, умножение, деление, целочисленное деление, остаток, степень, приколюхи с комплексными числами
```py
12+7+90
109
5.689e-1 - 0.456
0.11289999999999994
23.6+54
77.6
14-56.7+89
46.3
-6.7*12
-80.4
-234.5/6
-39.083333333333336
a=178/45
a
3.9555555555555557
type(a)
<class 'float'>
b=178//45;b
3
c=-24.6//12.1;c
-3.0
7.47 // 3
2.0
148%33
16
12.6%3.8
1.2000000000000002
5%2
1
6%2
0
14**3
2744
e=2.7**3.6;e
35.719843790663525
55**complex(15,6)
(5.909952981889534e+25-1.1295250250324674e+26j)
complex(15,6)**2
(189+180j)
complex(3,4)**complex(5,6)
(-1.8608933068808367+11.83676710676438j)
```
## Пункт 5
Бинарная магия
```py
dv1=9;bin(dv1)
'0b1001'
dv2 = ~dv1;bin(dv2);dv2
'-0b1010'
-10
7&9
1
7&8
0
7|9
15
7|8
15
14^5
11
h = 256
bin(h)
'0b100000000'
h += 8
bin(h)
'0b100001000'
h>>4
16
```
## Пункт 6
Операции со строковыми данными. Строки, списки, кортежи, форматирование строк
```py
'Система '+'регулирования'
'Система регулирования'
['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
stroka='Система автоматического управления'
'автомат' in stroka
True
stroka = 'автомат по ТАУ'
'ку' in ['ку','-']*3
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
stroka='Температура = %g %s %g'
stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## Пункт 7
Операции с переменными. Присвавание, изменение
```py
zz = -12
zz+=5
zz-=3
zz
-10
stroka='Система'
stroka+=' регулирования'
stroka
'Система регулирования'
zz/=2
zz*=5
zz
-25.0
zz//=3
zz
-9.0
zz%=2
zz
1.0
w=v=10
w;v
10
10
n1,n2,n3=(11,-3,'all')
```
## Пункт 8.1
Операции сравнение: равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=)
```py
w=v=10
w==v
True
w=2*v
w>=v
True
True
Frue
False
Talse
True>False
Frue
False<False
Talse
```
## Пункт 8.2
Проверка наличия заданного элемента в последовательности или во множестве
```py
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
True
'cap' in mnoz1
False
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UIT','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UIT' in dct1['Depart']
True
dct1['Depart'][1] == 'MM'
False
```
## Пункт 8.3
Создание больших логических выражений с использованием соединительных слов
```py
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
not(not (a>=b) or not('book' in mnoz1) and not ('Pskov' in dic1))
True
not (a>=b) or not('book' in mnoz1) or not ('Pskov' in dic1)
True
```
## Пункт 8.4
Проверка ссылок переменных на один и тот же объект
```py
w=v=10
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1
False
```
## Пункт 9
```py
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
Методы для работы со строками
```py
stroka.find('пр')
5
stroka.count("с")
4
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
stroka
'Микропроцессорная система управления'
spis22=stroka.split(' ')
spis22
['Микропроцессорная', 'система', 'управления']
stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22)
stroka3
'Микропроцессорная система управления'
stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
## Пункт 9.2
Методы для работы со списками
```py
spsk = [28, "ударов", "ножом", ",", ["ты действовал наверняка, ","да"], "?"]
spsk.pop(2)
'ножом'
spsk
[28, 'ударов', ',', ['ты действовал наверняка, ', 'да'], '?']
spsk.append('c')
spsk
[28, 'ударов', ',', ['ты действовал наверняка, ', 'да'], '?', 'c']
spsk.insert(2,'a')
spsk
[28, 'ударов', 'a', ',', ['ты действовал наверняка, ', 'да'], '?', 'c']
spsk.count('a')
1
```
## Пункт 10
Выход
```py
exit()
```

@ -0,0 +1,96 @@
# Общее контрольное задание
Гордиевских Данил, А-03-23
## Задание 1
Преобразовать восьмеричное значение 45 в целое число.
```py
int("45",8)
37
```
## Задание 2
Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж
```py
d = {"усиление":23, "запаздывание":12, "постоянная времени":78}
sp1 = d.keys()
sp2 = d.values()
sp1;sp2
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
dict_values([23, 12, 78])
kort = tuple(sp1)+tuple(sp2)
kort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
## Задание 3
Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
```py
((1768//24.8)%3)**2.4
5.278031643091577
```
## Задание 4
Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
```py
((~(13&27))^14)<<2
-32
```
## Задание 5
Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
```py
spisok = ["колебат"]*4
spisok
['колебат', 'колебат', 'колебат', 'колебат']
'аткол' in spisok[1]+spisok[2]
True
```
## Задание 6
Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов
```py
help(d.keys)
Help on built-in function keys:
keys() method of builtins.dict instance
Return a set-like object providing a view on the dict's keys.
d.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
help(d.values)
Help on built-in function values:
values() method of builtins.dict instance
Return an object providing a view on the dict's values.
d.values()
dict_values([23, 12, 78])
```
## Пункт 7
Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
```py
s1 = 'Создать объект - символьную строку с текстом данного предложения'
ls2 = list(s1.split())
ls2
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
ls2[ls2.index('-')] = ','; ls2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
ls2.remove('данного'); ls2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,58 @@
# Тест по модулю 1
Гордиевских Данил, А-03-23
## Задание 1
Везде, но главное помнить, что все символы в строке ПОСЛЕ значка # не учитываются питоном. Можно комментироввать в пустой строке или после инструкции. Например:
#Комментарий в строке, всё норм
Print(“hello MPEI”) #Комментарий после инструкции, всё ок
# print(“Hello MPEI”) работать не будет
## Задание 2
Создайте объект-строку, содержащую любые 6 чисел, разделенных запятыми. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
```py
stroka = "2,4,8,16,32,64"
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']
type(stroka)
<class 'str'>
```
## Задание 3
Напишите инструкцию, позволяющую выделить из строки третье по порядку число и записать его в виде отдельной числовой переменной. Отобразите на экране получившийся объект.
```py
chislo = int(stroka[4]);chislo
8
```
## Задание 4
Преобразовать строку в список так, чтобы его элементами были только строки, содержащие числа. Отобразите полученный объект. Напишите инструкцию, заменяющую в списке третье по порядку число на 777. Отобразите полученный объект.
```py
spis = stroka.split(",")
spis
['2', '4', '8', '16', '32', '64']
spis[2] = 777
spis
['2', '4', 777, '16', '32', '64']
```
## Задание 5
Напишите инструкцию, позволяющую подсчитать сумму чисел, содержащихся во втором и пятом элементах списка. Отобразите результат. Проверьте полученный результат.
```py
aaaa = int(spis[1])+int(spis[4])
aaaa
36ssssss
```

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,237 @@
# Отчет по теме 4
Гордиевских Данил, А-03-23
## Пункт 2
### Пункт 2.1
Функция round – округление числа с заданной точностью
```py
round(123.456,1)
123.5
round(123.456,0)
123.0
round(123.456)
123
```
### Пункт 2.2
Функция range – создание последовательности целых чисел с заданным шагом
```py
gg=range(76,123,9)
gg
range(76, 123, 9)
list(gg)
[76, 85, 94, 103, 112, 121]
range(23)
range(0, 23)
list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
### Пункт 2.3
Функция zip – создание общего объекта, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей
```py
qq = ["Гордиевских","Девятова","Креветов"]
zip(gg,qq)
<zip object at 0x1130be780>
tuple(zip(gg,qq))
((76, 'Гордиевских'), (85, 'Девятова'), (94, 'Креветов'))
ff = zip(gg,qq)
ff[1][1]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
ff[1][1]
TypeError: 'zip' object is not subscriptable
fff = tuple(ff)
fff[1][1]
'Девятова'
```
### Пункт 2.4
Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки
```py
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=31
fff
31.0
dan
-1.0
```
### Пункт 2.5
Функция exec – чтение и выполнение объекта-аргумента функции
```py
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
gg
221.456
```
### Пункт 2.5
Функция divmod() возвращает кортеж из целого и остатка от деления первого аргумента от второго
```py
divmod(25,6)
(4, 1)
```
## Пункт 3
Функции из стандартного модуля math
```py
import math
dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
math.factorial(5)
120
math.pi
3.141592653589793
from math import *
sin(45)
0.8509035245341184
sin(60)
-0.3048106211022167
sin(radians(30))
0.49999999999999994
sin(2*pi/7+exp(0.23))
0.8334902641414562
```
## Пункт 4
Функции из модуля cmath
```py
import cmath
dir(cmath)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
cmath.phase(1-0.5j)
-0.4636476090008061
```
## Пункт 5
Стандартный модуль random
```py
randomnoe = [random.uniform(0, 10),random.gauss(0, 1),random.betavariate(2, 5),random.gammavariate(2, 1)]
randomnoe
[0.987945011841781, 0.3286620967978268, 0.11054691058687621, 3.3461896723529287]
```
## Пункт 6
Функции из модуля time
```py
import time
dir(time)
['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_MONOTONIC_RAW_APPROX', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', 'CLOCK_UPTIME_RAW', 'CLOCK_UPTIME_RAW_APPROX', '_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock_getres', 'clock_gettime', 'clock_gettime_ns', 'clock_settime', 'clock_settime_ns', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname', 'tzset']
c1=time.time()
c1
1761226276.074031
c2=time.time()-c1;c2
19.872960090637207
c2=time.time()-c1;c2
33.6310248374939
dat=time.gmtime();dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=23, tm_hour=13, tm_min=32, tm_sec=21, tm_wday=3, tm_yday=296, tm_isdst=0)
dat.tm_mon
10
time.localtime()
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=23, tm_hour=16, tm_min=33, tm_sec=50, tm_wday=3, tm_yday=296, tm_isdst=0)
```
## Пункт 7
Графические функции
График одной переменной
```py
import pylab
Matplotlib is building the font cache; this may take a moment.
import pylab
x=list(range(-3,55,4))
t=list(range(15))
pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x10d114410>]
pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
pylab.xlabel('время')
Text(0.5, 47.04444444444444, 'время')
pylab.ylabel('сигнал')
Text(93.94444444444443, 0.5, 'сигнал')
pylab.show()
```
Полученный график представлен на рисунке
![График переменной](Figure_1.png)
Круговая диаграмма
```py
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x10d10eba0>, <matplotlib.patches.Wedge object at 0x117c4e5d0>, <matplotlib.patches.Wedge object at 0x117c4e990>, <matplotlib.patches.Wedge object at 0x117c4ec10>], [Text(-0.19101313413904503, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.4848612919483732, 'Юг')])
pylab.show()
```
Полученный график представлен на рисунке
![График](Figure_2.png)
Испробовано построение гистограммы
```py
pylab.hist([1,2,3,4,5],3)
(array([2., 1., 2.]), array([1. , 2.33333333, 3.66666667, 5. ]), <BarContainer object of 3 artists>)
pylab.show()
```
Полученный график представлен на рисунке
![График](Figure_3.png)
## Пункт 8
Изучение состава модуля Statistics
```py
import statistics
dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtuple', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
viborka = [0.12,-1.08,-0.47,0,0.03,-0.28,0.14,0.37,1.22,-0.25,0.22,-0.6,0.78,0,1.02,0.45,2.59,-0.82,-1.14,-0.46,1.15,-0.92,1.12,1.3,-0.13,-0.83,1.01,0.34,0.04,-0.07,0.19,-0.8,1.28,0.56,0.61,0.38,-0.9,1.04,0.35,-0.15,-0.99,1.63,0.89,1.74,0.5,-0.37,-0.7,0.35,0.99,1.14]
statistics.mean(viborka)
0.2518
statistics.stdev(viborka)
0.8335801566442308
statistics.median(viborka)
0.20500000000000002
```

@ -0,0 +1,71 @@
# Общее контрольное задание
Гордиевских Данил, А-03-23
## Задание 1
Напишите и исполните единое выражение, реализующее последовательное выполнение сле-дующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления
```py
divmod((round(phase(5+6j),2)*20),3)
(5.0, 2.6000000000000014)
```
## Задание 2
Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
```py
from time import *
nowatime = localtime()
nowatime
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=23, tm_hour=20, tm_min=20, tm_sec=30, tm_wday=3, tm_yday=296, tm_isdst=0)
stri = str(nowatime.tm_hour)+":"+str(nowatime.tm_min)
stri
'20:20'
```
## Задание 3
Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели
```py
days = ["Пн","Вт","Ср","Чт","Пт","Сб","Вс"]
from random import *
ra = sample(days, 3); ra
['Чт', 'Вт', 'Пн']
```
## Задание 4
Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3
```py
nums = sample(range(14,32,3), 1); nums
[26]
```
## Задание 5
Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стан-дартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита
```py
from random import *
N = round(gauss(15,4))
alphabet = ["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"]
randlet = sample(alphabet,N)
N; randlet
9
['o', 'q', 'j', 's', 'a', 'v', 'r', 'i', 'c']
```
## Задание 6
Напишите инструкцию для определения временного интервала в минутах, прошедшего с мо-мента предыдущего (из п.2) определения временных параметров
```py
from time import *
c1 = time()
c2 = time()-c1; c2
21.224413871765137
```

@ -0,0 +1,19 @@
# Тест по модулю 4
Гордиевских Данил
Напишите инструкцию создания переменной со значением – календарными данными момента начала выполнения контрольного задания. Создайте кортеж с последовательностью элементов со значениями от -26 до 46 с шагом 9. Подсчитайте число элементов в созданном кортеже. Отобразите результат в виде строки по шаблону: «Число элементов = <значение>». Напишите инструкцию определения числа секунд, прошедших с начала выполнения контрольного задания.
```py
starttask = localtime()
starttask
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=24, tm_hour=9, tm_min=52, tm_sec=13, tm_wday=4, tm_yday=297, tm_isdst=0)
aaaa = tuple(range(-26,46,9));aaaa
(-26, -17, -8, 1, 10, 19, 28, 37)
len(aaaa)
8
print(f"Число элементов = {len(aaaa)}")
Число элементов = 8
(localtime().tm_min - starttask.tm_min)*60 + (localtime().tm_sec - starttask.tm_sec)
328
```

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

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

После

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

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

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

После

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

@ -0,0 +1,299 @@
# Отчёт по теме 5
Гордиевских Данил А-03-23
## 2. Ветвление по условию – управляющая инструкция if
Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Отступы во всех строках блока должны быть одинаковыми по отношению к первому символу управляющей инструкции. Если имеется вложенная управляющая инструкция, то она вводится с таким же отступом, а все строки ее блоков – отступают по отношению к ее первому символу. Признак конца блока – отсут-ствие отступов в очередной строке или ввод пустой строки.
```py
porog = 10
rashod1 = 3
rashod2 = 5
if rashod1>=porog:
dohod = 12
... elif rashod2 == porog:
... dohod = 0
... else:
... dohod = -8
...
...
>>> if rashod1>=3 and rashod2 == 4:
... dohod = rashod1
... if rashod2 == porog or rashod1<rashod2:
... dohod = porog
...
...
>>> 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
>>> porog
10
>>> dohod
2
>>> if porog>=5 : rashod1=6; rashod2=0
...
>>> porog
10
>>> rashod1
6
>>> rashod2
0
```
## 3. Цикл по перечислению – управляющая инструкция for
### 3.1. Простой цикл
```py
>>> temperatura = 5
>>> for i in range(3,18,3):
... temperatura+=i
...
>>> temperatura
50
```
### 3.2. Более сложный цикл
```py
>>> sps=[2,15,14,8]
>>> for k in sps:
... if len(sps)<=10:sps.append(sps[0])
... else:break
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
>>> sps=[2,15,14,8]
>>> for k in sps[:]:
... if len(sps)<=10:sps.append(sps[0])
... else:break
...
...
>>> sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
Отличия в списках объясняются тем, что в первом случае при переборе значений из списка, список дополняется и добавленные элементы тоже перебираются
Во втором случае создаётся срез списка, который не изменяется в цикле, и именно по нему проходит 4 итерации
### 3.3. Пример
Создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране
```py
>>> import random as rn
>>> sps5=[]
>>> for i in range(10):
... sps5.append(rn.randint(1,100))
... ss=sum(sps5)
... if ss>500: break
... else:
... print(ss)
...
...
>>> ss
505
```
### 3.4. Пример с символьной строкой
```py
>>> stroka='Это – автоматизированная система'
>>> stroka1=""
>>> for ss in stroka:
... stroka1+=" "+ss
...
...
>>> stroka1
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
```
### 3.5. Запись цикла в строке
Cоздание списка с синусоидальным сигналом
```py
>>> import math
>>> sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
>>> import pylab
>>> x = list(range(100))
>>> pylab.plot(x,sps2)
[<matplotlib.lines.Line2D object at 0x0000028BBFDA2990>]
>>> pylab.show()
```
![График](Figure_1.png)
## 4. Цикл «пока истинно условие» – управляющая инструкция while
### 4.1. Цикл со счетчиком
```py
>>> rashod=300
>>> while rashod:
... print("Расход=",rashod)
... rashod-=50
...
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
```
### 4.2. Пример с символьной строкой
```py
>>> import math
>>> stroka='Расчет процесса в объекте регулирования'
>>> i=0
>>> sps2=[]
>>> while i<len(stroka):
... r=1-2/(1+math.exp(0.1*i))
... sps2.append(r)
... print('Значение в момент',i,"=",r)
... i+=1
...
...
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
Значение в момент 4 = 0.197375320224904
Значение в момент 5 = 0.2449186624037092
Значение в момент 6 = 0.2913126124515909
Значение в момент 7 = 0.3363755443363322
Значение в момент 8 = 0.3799489622552249
Значение в момент 9 = 0.421899005250008
Значение в момент 10 = 0.4621171572600098
Значение в момент 11 = 0.5005202111902354
Значение в момент 12 = 0.5370495669980353
Значение в момент 13 = 0.5716699660851172
Значение в момент 14 = 0.6043677771171636
Значение в момент 15 = 0.6351489523872873
Значение в момент 16 = 0.6640367702678489
Значение в момент 17 = 0.6910694698329307
Значение в момент 18 = 0.7162978701990245
Значение в момент 19 = 0.7397830512740043
Значение в момент 20 = 0.7615941559557649
Значение в момент 21 = 0.7818063576087741
Значение в момент 22 = 0.8004990217606297
Значение в момент 23 = 0.8177540779702878
Значение в момент 24 = 0.8336546070121553
Значение в момент 25 = 0.8482836399575129
Значение в момент 26 = 0.8617231593133063
Значение в момент 27 = 0.874053287886007
Значение в момент 28 = 0.8853516482022625
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
Значение в момент 32 = 0.9216685544064713
Значение в момент 33 = 0.9288576214547277
Значение в момент 34 = 0.935409070603099
Значение в момент 35 = 0.9413755384972874
Значение в момент 36 = 0.9468060128462683
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
>>> x = list(range(len(stroka)))
>>> pylab.plot(x,sps2)
[<matplotlib.lines.Line2D object at 0x0000028BBFEABD90>]
>>> pylab.show()
```
![График](Figure_2.png)
### 4.3. Определение, является ли число простым
```py
>>> chislo=267
>>> kandidat =chislo // 2
>>> while kandidat > 1:
... if chislo%kandidat == 0:
... print(chislo, ' имеет множитель ', kandidat)
... break
... kandidat -= 1
... else:
... print(chislo, ' является простым!')
...
...
267 имеет множитель 89
>>>for chislo in range(250,301):
... kandidat =chislo // 2
... while kandidat > 1:
... if chislo%kandidat == 0:
... print(chislo, ' имеет множитель ', kandidat)
... break
... kandidat -= 1
... else:
... print(chislo, ' является простым!')
...
...
250 имеет множитель 125
251 является простым!
252 имеет множитель 126
253 имеет множитель 23
254 имеет множитель 127
255 имеет множитель 85
256 имеет множитель 128
257 является простым!
258 имеет множитель 129
259 имеет множитель 37
260 имеет множитель 130
261 имеет множитель 87
262 имеет множитель 131
263 является простым!
264 имеет множитель 132
265 имеет множитель 53
266 имеет множитель 133
267 имеет множитель 89
268 имеет множитель 134
269 является простым!
270 имеет множитель 135
271 является простым!
272 имеет множитель 136
273 имеет множитель 91
274 имеет множитель 137
275 имеет множитель 55
276 имеет множитель 138
277 является простым!
278 имеет множитель 139
279 имеет множитель 93
280 имеет множитель 140
281 является простым!
282 имеет множитель 141
283 является простым!
284 имеет множитель 142
285 имеет множитель 95
286 имеет множитель 143
287 имеет множитель 41
288 имеет множитель 144
289 имеет множитель 17
290 имеет множитель 145
291 имеет множитель 97
292 имеет множитель 146
293 является простым!
294 имеет множитель 147
295 имеет множитель 59
296 имеет множитель 148
297 имеет множитель 99
298 имеет множитель 149
299 имеет множитель 23
300 имеет множитель 150
```

@ -0,0 +1,77 @@
# Общее контрольное задание тема 5
Гордиевских Данил
## Пункт 1
Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите
```py
>>> alphabet = ["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"]
>>> text = "life is a series of choices"
>>> for i in text:
... if i==" ": continue
... print(str(alphabet.index(i)+1))
...
...
12
9
6
5
9
19
1
19
5
18
9
5
19
15
6
3
8
15
9
3
5
19
```
## Пункт 2
Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
```py
>>> stroka = "Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."
>>> finder = input("Введите значение: ")
Введите значение: либо
>>> if (finder in stroka):
... print("Это значение есть")
... else: print("Этого значения нет")
...
Это значение есть
>>> finder = input("Введите значение: ")
Введите значение: ПОАС
>>> if (finder in stroka):
... print("Это значение есть")
... else: print("Этого значения нет")
...
Этого значения нет
```
## Пункт 3
Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его сред-ние баллы по двум сессиям.
```py
>>> letofio = ["Девятова","Гордиевских","Креветов"]
>>> letoexam = [5,4,3]
>>> zimafio = ["Гордиевских","Креветов","Девятова"]
>>> zimaexams = [5,4,5]
>>> fami = input("Введите фамилию студента: ")
Введите фамилию студента: Креветов
>>> mark = (letoexam[letofio.index(fami)]+zimaexams[zimafio.index(fami)])/2
>>> print(mark)
3.5
```

@ -0,0 +1,33 @@
# Индивидуальное контрольное задание по теме 5
Гордиевских Данил А-03-23
## Условие
Напишите инструкции создания списка с 20 случайными нормально распределенными (математическое ожидание равно -50, дисперсия равна 64) числами. Из этого списка перепишите в другой список только те элементы, которые не превышают среднего значения.
## Решение
```py
>>> from random import *
>>> spis = []
>>> for i in range(20):
... spis.append(gauss(-50,64))
...
...
>>> from statistics import *
>>> sred = mean(spis)
>>> spisnew = []
>>> for i in range(len(spis)):
... if spis[i]<=sred:
... spisnew.append(spis[i])
...
...
>>> print(spis)
[-95.4106354528638, -68.57442120359156, -61.956283320774475, -74.17382575733697, -73.34835530918741, -13.894470679226565, -35.45403184867236, -31.498147683478503, 27.037644557152873, 55.22680246648059, -74.76545145503609, 11.556505860627482, -57.968278929697114, -47.538710192853785, -92.18502173055543, 97.12462411170492, 3.256591532214216, -40.06403905094467, -86.6051144137632, -20.11182186455578]
>>> print(spisnew)
[-95.4106354528638, -68.57442120359156, -61.956283320774475, -74.17382575733697, -73.34835530918741, -35.45403184867236, -74.76545145503609, -57.968278929697114, -47.538710192853785, -92.18502173055543, -40.06403905094467, -86.6051144137632]
>>> sred
-33.96732201821788
```

@ -0,0 +1,241 @@
# Отчёт по теме 6
Гордиевских Данил А-03-23
## 2 вывод данных на экран дисплея
### 2.1. Вывод в командной строке
Так назыаваемый "эхо-вывод". Как говорил Лазарев: "Гадость! Гадость! Так нельзя"
```py
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
```
### 2.2. Вывод с использованием функции print
Вывод информации на экран. Можно испоьзовать и в теле функции и в командной строке
```py
>>> fff=234.5;gg='Значение температуры = '
>>> print(gg, fff)
Значение температуры = 234.5
>>> print(gg, fff, sep='/')
Значение температуры = /234.5
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
>>> print()
>>> print(""" Здесь может выводиться
... большой текст,
... занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
... "Большой текст",
... "Занимающий несколько строк")
Здесь может выводиться Большой текст Занимающий несколько строк
```
### 2.3. Вывод с использованием метода write объекта sys.stdout
```py
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3. Ввод данных с клавиатуры
```py
>>> psw=input('Введите пароль от БАРСа:')
Введите пароль от Барса: 1hatechihuahuas!
```
## 4. Ввод-вывод при работе с файлами
### 4.1. Функции для работы с путем к файлу
```py
>>> import os
>>> os.getcwd()
'C:\\Users\\gorda'
>>> os.chdir(r"C:\Users\gorda\YandexDisk\5 семестр\ПОАС\ПО АС\TEMA6")
>>> fil=os.path.abspath("oplata.dbf")
>>> print(fil)
C:\Users\gorda\YandexDisk\5 семестр\ПОАС\ПО АС\TEMA6\oplata.dbf
>>> os.path.isfile(fil)
True
```
### 4.3. Открытие файла для записи или чтения данных
```py
>>> fp=open('zapis1.txt','w')
>>> type()
<class '_io.TextIOWrapper'>
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
>>> fp.close()
```
### 4.5. Запись информации в файл с помощью метода write
```py
>>> sps=list(range(1,13))
>>> fp2=open('zapis3.txt','w')
>>> fp2.write(str(sps[:4])+'\n')
13
>>> fp2.write(str(sps[4:8])+'\n')
13
>>> fp2.write(str(sps[8:])+'\n')
16
>>> fp2.close()
```
Содержимое файла приведено ниже
```txt
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```
Запись списка в файл
Попытка 1
```py
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
fp3=open('zapis4.txt','w')
for i in range(len(sps3)):
stroka4=sps3[i][0]+' '+str(sps3[i][1])
fp3.write(stroka4)
11
11
12
fp3.close()
```
Попытка 2
```py
>>> gh=open('zapis5.txt','w')
>>> for r in sps3:
... gh.write(r[0]+' '+str(r[1])+'\n')
...
12
12
13
>>> gh.close()
```
Содержимое текстового файла:
```txt
Иванов И. 1
Петров П. 2
Сидоров С. 3
```
### 4.6. Первый способ чтения информации из текстового файла
```py
>>> gh.close()
>>> sps1=[]
>>> fp=open('zapis3.txt')
>>> for stroka in fp:
... stroka=stroka.rstrip('\n')
... stroka=stroka.replace('[','')
... stroka=stroka.replace(']','')
... sps1=sps1+stroka.split(',')
...
>>> fp.close()
>>> print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
```
### 4.7. Чтение информации из файла с помощью метода read
```py
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> print(stroka1, stroka2)
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```
### 4.9. Ввод-вывод объектов с использованием функций из модуля pickle
Запись
```py
>>> import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> fp=open('zapis6.mnz','wb')
>>> pickle.dump(mnoz1,fp)
>>> fp.close()
```
Содержимое файла
```py
Ђ•# Џ”(ЊiPhone”Њpen”Њtable”Њbook”ђ.
```
Чтение
```py
>>> fp.close()
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp)
>>> fp.close()
>>> print(mnoz2)
{'iPhone', 'pen', 'table', 'book'}
```
## 5. Перенаправление потоков ввода и вывода данных
```py
>>> import sys
>>> vr_out=sys.stdout
>>> fc=open('Stroka.txt','w')
>>> sys.stdout=fc
>>> print('запись строки в файл')
>>> sys.stdout=vr_out
>>> print('запись строки на экран')
запись строки на экран
>>> fc.close()
```
Содержимое файла
```txt
запись строки в файл
```
```py
>>> tmp_in = sys.stdin
>>> fd = open("Stroka.txt", "r")
>>> sys.stdin = fd
>>> sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
>>> while True:
... try:
... line = input ()
... print(line)
... except EOFError:
... break
...
запись строки в файл
>>> fd.close()
>>> sys.stdin=tmp_in
```

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

@ -0,0 +1,28 @@
import random
import pickle
a=[]
for i in range(125):
a.append(str(random.randint(6,27)))
cort = tuple(a)
spis = ["Гордиевских","Девятова","Креветов","Ефимова"]
f = open("binfile.bin", "wb")
pickle.dump(cort, f)
pickle.dump(spis, f)
f.close()
f = open("binfile.bin", "rb")
newcort = pickle.load(f)
newspis = pickle.load(f)
f.close()
if (cort == newcort) and (spis == newspis):
print("Запись и чтение прошли успешно")
else:
print("На каком-то этапе произошла ошибка")
print(cort)
for i in range(0, len(cort), 5):
exec(f"plist{i//5} = list(cort[{i}:{i+5}]);print(plist{i//5})")

@ -0,0 +1,56 @@
# Защита модуля 2, Вариант 20
Гордиевских Данил А-03-23
## Задание
1) Создайте кортеж с элементами - числами: -0.25, -0.20, -0.15,:,0.45,0.50.
2) Запишите элементы кортежа в текстовый файл по два элемента на строке с разделителем "," (запятая).
3) Удалите кортеж из памяти.
4) Прочитайте из созданного файла 7 первых элементов и сформируйте из них множество.
5) Создайте из множества два списка: первый - с первыми 3 элементами и второй - с остальными 4 элементами.
## Решение
```py
>>> import os
>>> os.chdir(r"C:\Users\u202-13\Desktop\ПОАС\TEMA6")
>>> fp = open("text.txt", "w")
>>> sp = []
>>> for i in range(-25, 55, 5):
... sp.append(i/100)
...
...
>>> cort = tuple(sp)
>>> for i in range(0, len(cort), 2):
... fp.write(str(cort[i]) + ", "+ str(cort[i+1])+"\n")
...
...
12
12
11
10
10
10
10
10
>>> fp.close()
>>> del cort
>>> fp=open('text.txt')
>>> sps1=[]
>>> for stroka in fp:
... stroka=stroka.rstrip('\n')
... sps1=sps1+stroka.split(',')
...
...
>>> fp.close()
>>> sps1
['-0.25', ' -0.2', '-0.15', ' -0.1', '-0.05', ' 0.0', '0.05', ' 0.1', '0.15', ' 0.2', '0.25', ' 0.3', '0.35', ' 0.4', '0.45', ' 0.5']
>>> mn = sps1[:7]
>>> sp1 = mn[:3]
>>> sp2 = mn[3:7]
>>> sp1
['-0.25', ' -0.2', '-0.15']
>>> sp2
[' -0.1', '-0.05', ' 0.0', '0.05']
```

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

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

После

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

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

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

После

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

@ -0,0 +1,101 @@
X Y
0.6857956149109027 0.17144890372772567
0.9462898296904173 0.3651591352183986
1.1875048283957854 0.5707455585127453
1.4045262222906436 0.7791907244572198
1.5929325305407531 0.9826261759781032
1.7488852611613968 1.1741909472739267
1.8692071144536306 1.3479449890688526
1.9514467156533182 1.498820420714969
1.993928557963668 1.6225974550271438
1.9957871384579535 1.7158948758848462
1.9569845913853061 1.7761673047599613
1.8783114596277994 1.801703343476921
1.7613705885915596 1.7916201547555806
1.6085444706693701 1.745851233734028
1.4229467055816887 1.6651251016959432
1.2083585655177917 1.5509334676514053
0.9691519574658317 1.405488090105012
0.7102003522571565 1.2316661556430482
0.4367794950101486 1.0329444904848233
0.1544599198472869 0.8133233478254392
-0.1310065412654169 0.5772408755527252
-0.4138039433467995 0.329479670827844
-0.6881707194341071 0.07506707326235623
-0.9485170637471333 -0.18082896099001616
-1.1895388154794926 -0.43300642461238525
-1.4063255230079892 -0.6763361992112862
-1.5944604868761643 -0.9058672711275058
-1.7501107433283989 -1.116928139177729
-1.8701051551168981 -1.3052223931625213
-1.9519990186001612 -1.4669165495219314
-1.9941238708615385 -1.5987183798568332
-1.9956214821036073 -1.6979441554185268
-1.9564613407750173 -1.7625734517576495
-1.8774412751969445 -1.7912904076174732
-1.7601711990244597 -1.7835106054692198
-1.6070403117043117 -1.739393032027993
-1.4211684221699186 -1.6598368795634744
-1.206342387479247 -1.5464632565424175
-0.9669389613616545 -1.4015821827472266
-0.7078356245172404 -1.2281455431897301
-0.4343112133656951 -1.0296869607337213
-0.15193837178280983 -0.8102498134959935
0.13352998304311092 -0.5743048643612174
0.4162778675493755 -0.3266591813835692
0.6905447236185105 -0.07235820513304927
0.9507427811887152 0.18341704144739185
1.191570900570458 0.4354555062281584
1.4081225751051951 0.6786222734474175
1.595985893776254 0.9079631785296267
1.7513334271857646 1.1188057406936611
1.871000205607518 1.3068543569221254
1.9525482004315637 1.468277817799485
1.9943159952891567 1.5997873621719028
1.9954526348844288 1.6987036803500344
1.955934961914334 1.7630115007411093
1.8765680888634773 1.7914006477717013
1.7589689950617298 1.7832927345942085
1.6055335831896365 1.7388529467430653
1.4193878664052093 1.6589866766586012
1.2043242805801755 1.5453210776389947
0.964724419186966 1.4001719130259875
0.7054697649956605 1.2264963760184058
0.4318422372867545 1.027832841335493
0.14941658077906955 0.8082287761963871
-0.13605321131532275 0.5721582793184598
-0.4187511261515769 0.3244309279509506
-0.692917623668242 0.07009379004615243
-0.9529669784563898 -0.18567140207948313
-1.1936010804195147 -0.437653821664491
-1.4099173757088976 -0.6807197101755926
-1.5975087488020008 -0.9099169698321946
-1.7525533107785047 -1.1205760550687722
-1.8718922644943639 -1.3084051074251701
-1.9530942602694217 -1.469577395636233
-1.9945049309393286 -1.6008092794620068
-1.995280597070394 -1.6994271088641035
-1.9554054556449019 -1.7634216955593032
-1.8756919020235652 -1.7914892471753685
-1.7577639786256143 -1.78305793003793
-1.6040242875345 -1.7382995194120725
-1.4176050411345522 -1.6581258998426924
-1.2023042480473982 -1.5441704868938688
-0.9625083344826699 -1.398754948791069
-0.7031027774752642 -1.2248419059621178
-0.42937257072105733 -1.0259745721518527
-0.14689455086824513 -0.8062045668309509
0.13857622204758316 -0.5700093696113174
0.4212237151988264 -0.3222010984087815
0.6952894157891905 -0.06782846985928853
0.9551896519938152 0.18792606060398742
1.1956293517805443 0.43985188339812664
1.4117099219493288 0.6828163930359272
1.5990290495184591 0.9118695571565603
1.7537703921561092 1.1223447659064476
1.8727813303510932 1.309953907017609
1.9536371972406208 1.470874729573362
1.9946906775099587 1.6018287165575111
1.9951053689365787 1.700147879652278
1.9548728228133652 1.7638291154425498
1.8748127160781716 1.7915750156014552

@ -0,0 +1,421 @@
# Отчёт по теле 7
Гордиевских Данил А-03-23
## Пункт 2. Создание пользовательской функции
### 2.1. Создание пользовательской функции
```py
>>> def uspeh():
... """Подтверждение успеха операции"""
... print('Выполнено успешно!')
...
...
>>> uspeh()
Выполнено успешно!
>>> dir(uspeh)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
>>> help(uspeh)
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
```
### 2.2. Пример функции с аргументами
```py
>>> def sravnenie(a,b):
... """Сравнение a и b"""
... if a>b:
... print(a,' больше ',b)
... elif a<b:
... print(a, ' меньше ',b)
... else:
... print(a, ' равно ',b)
...
...
>>> n,m=16,5;sravnenie(n,m)
16 больше 5
```
### 2.3. Пример функции, содержащей return.
```py
>>> def logistfun(b,a):
... """Вычисление логистической функции"""
... import math
... return a/(1+math.exp(-b))
...
>>> v,w=1,0.7;z=logistfun(w,v)
>>> 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]
```
### 2.5. Функция, реализующая модель некоторого устройства
```py
>>> def inerz(x,T,ypred):
... """ Модель устройства с памятью:
... x- текущее значение вх.сигнала,
... T -постоянная времени,
... ypred - предыдущее значение выхода устройства"""
... y=(x+T*ypred)/(T+1)
... return y
...
...
>>> sps=[0]+[1]*100
>>> spsy=[]
>>> TT=20
>>> yy=0
>>> for xx in sps:
... yy = inerz(xx,TT,yy)
... spsy.append(yy)
...
spsy
[0.0, 0.047619047619047616, 0.09297052154195011, 0.13616240146852393, 0.177297525208118, 0.21647383353154095, 0.25378460336337233, 0.2893186698698784, 0.3231606379713128, 0.35539108378220263, 0.38608674645924057, 0.4153207109135625, 0.4431625818224405, 0.46967864935470527, 0.4949320470044812, 0.5189829019090297, 0.5418884780085997, 0.5637033123891426, 0.5844793451325168, 0.6042660429833493, 0.6231105171269993, 0.6410576353590469, 0.6581501289133781, 0.6744286942032173, 0.6899320897173498, 0.7046972283022379, 0.7187592650497504, 0.7321516809997624, 0.7449063628569166, 0.7570536789113491, 0.768622551344142, 0.7796405250896592, 0.7901338334187231, 0.800127460398784, 0.8096452003797943, 0.8187097146474231, 0.8273425853784983, 0.8355643670271411, 0.8433946352639439, 0.8508520335847084, 0.8579543176997223, 0.8647183978092594, 0.8711603788659613, 0.8772955989199631, 0.88313866563806, 0.8887034910838667, 0.8940033248417778, 0.899050785563598, 0.9038578910129503, 0.9084360866790003, 0.9127962730276193, 0.9169488314548756, 0.9209036490046435, 0.9246701419091843, 0.9282572780087468, 0.9316735981035684, 0.9349272362891128, 0.9380259393229645, 0.94097708506949, 0.9437877000661808, 0.9464644762535056, 0.9490137869081006, 0.9514417018172386, 0.9537540017307035, 0.9559561921244795, 0.958053516309028, 0.96005096791336, 0.9619533027746285, 0.963765050261551, 0.9654905240586201, 0.9671338324367811, 0.9686988880350297, 0.9701894171762188, 0.971608968739256, 0.9729609226088152, 0.9742484977226811, 0.9754747597358867, 0.976642628319892, 0.9777548841141828, 0.9788141753468407, 0.9798230241398483, 0.9807838325141413, 0.981698888108706, 0.982570369627339, 0.9834003520260372, 0.9841908114533686, 0.9849436299555892, 0.9856605999577039, 0.9863434285311466, 0.9869937414582349, 0.9876130871030808, 0.9882029400981722, 0.988764704855402, 0.9892997189099068, 0.9898092561046732, 0.9902945296234982, 0.9907566948795221, 0.9911968522662116, 0.9916160497773444, 0.9920152855022327, 0.9923955100021263]
>>> from pylab import *
>>> plot(sps, spsy)
[<matplotlib.lines.Line2D object at 0x10ca10550>]
>>> show()
```
![График](Figure_1.png)
## Пункт 3. Функции как объекты
### 3.1. Получение списка атрибутов объекта-функции
```py
>>> dir(inerz)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
>>> inerz.__doc__
```
### 3.2. Сохранение ссылки на объект-функцию в другой переменной
```py
>>> fnkt=sravnenie
>>> v=16
>>> fnkt(v,23)
16 меньше 23
```
### 3.3. Возможность альтернативного определения функции в программе
```py
>>> typ_fun=8
>>> if typ_fun==1:
... def func():
... print('Функция 1')
... else:
... def func():
... print('Функция 2')
...
>>> func()
Функция 2
```
## Пункт 4. Аргументы функции
### 4.1. Изучите возможность использования функции в качестве аргумента другой функции
```py
>>> def fun_arg(fff,a,b,c):
... """fff-имя функции, используемой
... в качестве аргумента функции fun_arg"""
... return a+fff(c,b)
...
...
>>> zz=fun_arg(logistfun,-3,1,0.7)
>>> print(zz)
-2.3318122278318336
```
### 4.2. Обязательные и необязательные аргументы
```py
>>> def logistfun(a,b=1): #Аргумент 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)
>>> print(qq)
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 4.5. Пример со значениями аргументов функции, содержащимися в словаре
```py
>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4}
>>> qqq=slozh(**dic4)
>>> print(qqq)
10
```
### 4.6. Смешанные ссылки
```py
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
>>> qqqq=slozh(*e1,**dd2)
>>> print(qqqq)
17
```
### 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
>>> func4(-1,2,0,3,6)
-7
>>> a=90
>>> def func3(b):
... b=5*b+67
...
...
>>> func3(a)
>>> a
90
>>> sps1=[1,2,3,4]
>>> def func2(sps):
... sps[1]=99
...
>>> func2(sps1)
>>> print(sps1)
[1, 99, 3, 4]
```
## Пункт 5. Специальные типы пользовательских функций
### 5.1. Анонимные функции
```py
>>> anfun1=lambda: 1.5+math.log10(17.23)
>>> anfun1()
2.7362852774480286
>>> anfun2=lambda a,b : a+math.log10(b)
>>> anfun2(17,234)
19.369215857410143
>>> anfun3=lambda a,b=234: a+math.log10(b)
>>> anfun3(100)
102.36921585741014
```
### 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)
>>> alp
<generator object func5 at 0x000001BD5FCACAC0>
>>> type(alp)
<class 'generator'>
>>> alp=func5(7,3)
>>> print(alp.__next__())
1
>>> print(alp.__next__())
>>> print(alp.__next__())
7
```
## Пункт 6. Локализация объектов в функциях
### 6.1. Примеры на локализацию объектов
```py
>>> def func7(arg):
... loc1=15
... glb=8
... return loc1*arg
...
>>> res = func7(glb)
>>> print(res)
150
>>> print(glb)
10
>>> def func8(arg):
... loc1=15
... print(glb)
... glb=8
... return loc1*arg
...
>>> res=func8(glb)
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
res=func8(glb)
File "<pyshell#113>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
>>> glb=11
>>> def func7(arg):
... loc1=15
... global glb
... print(glb)
... glb=8
... return loc1*arg
...
>>> res=func7(glb)
11
```
### 6.2. Выявление локализации объекта с помощью функций
```py
>>> globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'inerz', 'sravnenie', 'logistfun', 'slozh', 'fnkt', 'v', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
>>> globals().values()
dict_values(['__main__', None, None, <class '_frozen_importlib.BuiltinImporter'>, None, {}, <module 'builtins' (built-in)>, <function inerz at 0x000001BD5FCDDC60>, <function sravnenie at 0x000001BD5FCDDBC0>, <function logistfun at 0x000001BD5FCDE160>, <function slozh at 0x000001BD5FCDDDA0>, <function sravnenie at 0x000001BD5FCDDBC0>, 16, 8, <function func at 0x000001BD5FCDDEE0>, <function fun_arg at 0x000001BD5FCDE020>, -2.3318122278318336, [1, 2], [-1, -2], [0, 2], [-1, -1], [[1, 2], [-1, -2], [0, 2], [-1, -1]], [1, 2, -1, -2, 0, 2, -1, -1], {'a1': 1, 'a2': 2, 'a3': 3, 'a4': 4}, 10, (-1, 6), {'a3': 3, 'a4': 9}, 17, <function func4 at 0x000001BD5FCF0AE0>, 90, <function func3 at 0x000001BD5FCDEF20>, [1, 99, 3, 4], <function func2 at 0x000001BD5FCF09A0>, <function <lambda> at 0x000001BD5FCF0E00>, <module 'math' (built-in)>, <function <lambda> at 0x000001BD5FCF0B80>, <function <lambda> at 0x000001BD5FCF0C20>, <function func5 at 0x000001BD5FCF0F40>, 7, <generator object func5 at 0x000001BD5FCAC740>, 8, <function func7 at 0x000001BD5FCF0CC0>, 165, <function func8 at 0x000001BD5FCF1080>])
>>> locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'inerz', 'sravnenie', 'logistfun', 'slozh', 'fnkt', 'v', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
>>> globals().keys()==locals().keys()
True
>>> 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__', 'inerz', 'sravnenie', 'logistfun', 'slozh', 'fnkt', 'v', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
>>> 'glb' in globals().keys()
True
```
### 6.3. Локализация объектов при использовании вложенных функций
```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])
>>> vhod=[]
>>> for i in range(N):
... vhod.append(A*math.sin((2*i*math.pi)/F))
...
...
>>> vhod
## Огромное страшное полотно текста
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp=kk1*xtt #усилитель
yti1=yp+yti1 #Интегратор
ytin1=(yti1+TT*ytin1)/(TT+1)
return [yti1,ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp=kk2*xtt #усилитель
yti2=yp+yti2 #интегратор
return yti2
>>> def nechus(xtt,gran):
... if xtt<gran and xtt>(-gran):
... ytt=0
... elif xtt>=gran:
... ytt=xtt-gran
... elif xtt<=(-gran):
... ytt=xtt+gran
... return ytt
...
>>> yi1 = 0; yin1 = 0; yi2 = 0
>>> vyhod = []
>>> for xt in vhod:
... xt1 = xt - yi2 #отрицательная обратная связь
... [yi1,yin1] = realdvig(xt1,k1,T,yi1,yin1)
... yi2 = tahogen(yin1,k2,yi2)
... yt = nechus(yin1,Xm)
... vyhod.append(yt)
...
...
>>> print('y=',vyhod)
y= ## Огромное страшное полотно текста
```

@ -0,0 +1,52 @@
# Общее контрольное задание по теме 7
Гордиевских Данил А-03-23
## Задание 1
Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т
```py
from math import *
def scary(t, T):
y = exp(t-T)
return y
yt = scary(5,2)
print(yt)
20.085536923187668
```
## Задание 2
Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
```py
from pylab import *
from random import *
def what(sps, n):
hist(sps, bins = n)
show()
a = []
for j in range(1000):
a.append(gauss(0,1))
what(a, 10)
```
![Гистограмма](Figure_2.png)
## Задание 3
Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
```py
yt = lambda b1, b2, x: b1+b2*x
print(yt(1, 2, 5))
11
```

@ -0,0 +1,30 @@
# Индивидуальное контрольное задание по теме 7
Гордиевских ДанилА-03-23
## Задание
Разработайте функцию с 3 параметрами: х, yT и T, реализующую расчет по значениям последовательности значений входного сигнала х значений выходного сигнала по формуле: y= (x+T*yТ)/(T+1). Здесь х- одно текущее значение входного сигнала, yT – значение выходного сигнала в предыдущий момент времени, Т – постоянная времени инерционного звена. Создайте список с последовательностью из 100 значений входного синусоидального сигнала с амплитудой 2, периодом 7 и фазой 0.35. Рассчитайте последовательность значений выходных сигналов, принимая Т=3 и yT равным предыдущему в последовательности вычисленных значений y (для первого значения х принять yT=0). Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
```python
import os
from math import *
os.chdir(r"C:\Users\u202-09\Desktop\Новая папка\1\TEMA7")
f = open("output.txt","w")
t = 3
yt = 0
out = []
inp = []
for i in range(100):
inp.append(2*sin(i/7+0.35))
out.append(fun(inp[i],yt,t))
yt = out[i]
f.write("X\tY\n")
for i in range(len(out)):
f.write(str(inp[i])+"\t"+str(out[i])+"\n")
```

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

@ -0,0 +1,20 @@
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):
ytt = 0
if xtt<gran and xtt>(-gran):
ytt=0
elif xtt>=gran:
ytt=xtt-gran
elif xtt<=(-gran):
ytt=xtt+gran
return ytt

@ -0,0 +1,23 @@
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1=float(znach[0])
T=float(znach[1])
k2=float(znach[2])
Xm=float(znach[3])
A=float(znach[4])
F=float(znach[5])
N=int(znach[6])
import math
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
import MM1 as mod
yi1=0;yin1=0;yi2=0
vyhod=[]
for xt in vhod:
xt1=xt-yi2
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
yi2=mod.tahogen(yin1,k2,yi2)
yt=mod.nechus(yin1,Xm)
vyhod.append(yt)

@ -1,4 +1,5 @@
#Модуль Mod0 #Модуль Mod0
import math
import Mod1 import Mod1
print('perm1=',Mod1.perm1) print('perm1=',Mod1.perm1)
from Mod2 import alpha as al from Mod2 import alpha as al
@ -7,3 +8,7 @@ print('tt=',tt)
from Mod2 import beta from Mod2 import beta
qq=beta(float(tt)) qq=beta(float(tt))
print('qq=',qq) print('qq=',qq)
print("t = ", tt)
print("expi = ", math.log(qq))
print('3 * perm1=',3*int(Mod1.perm1))

@ -0,0 +1,300 @@
# Отчёт по теме 8
Гордиевских Данил А-03-23
## Настройка окружения
```py
>>> import os,sys,importlib
>>> os.chdir(r"/Users/technetium/Yandex.Disk.localized/5 семестр/ПОАС/python-labs/TEMA8")
>>> os.getcwd()
'/Users/technetium/Yandex.Disk.localized/5 семестр/ПОАС/python-labs/TEMA8'
```
## Пункт 2
### Пункт 2.1. Запуск модуля на исполнение путём его импорта
Создан файл mod1.py со следующим содержимым
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
```
Результат вызова функции
```py
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> Mod1.perm1
'5'
```
Попытка повторного вызова функции
```py
>>> import Mod1
>>> importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from '/Users/technetium/Yandex.Disk.localized/5 семестр/ПОАС/python-labs/TEMA8/Mod1.py'>
>>> Mod1.perm1
'3'
```
### Пункт 2.2. Импортированные модули заносятся в словарь – значение атрибута sys.modules
```>>> print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_codecs', '_collections', '_collections_abc', '_colorize', '_curses', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_imp', '_io', '_opcode', '_opcode_metadata', '_operator', '_pyrepl', '_pyrepl.base_eventqueue', '_pyrepl.commands', '_pyrepl.completing_reader', '_pyrepl.console', '_pyrepl.curses', '_pyrepl.fancy_termios', '_pyrepl.historical_reader', '_pyrepl.input', '_pyrepl.keymap', '_pyrepl.main', '_pyrepl.reader', '_pyrepl.readline', '_pyrepl.simple_interact', '_pyrepl.trace', '_pyrepl.types', '_pyrepl.unix_console', '_pyrepl.unix_eventqueue', '_pyrepl.utils', '_signal', '_sitebuiltins', '_sre', '_stat', '_struct', '_suggestions', '_thread', '_tokenize', '_warnings', '_weakref', '_weakrefset', 'abc', 'ast', 'atexit', 'builtins', 'code', 'codecs', 'codeop', 'collections', 'collections.abc', 'contextlib', 'copy', 'copyreg', 'dataclasses', 'dis', 'encodings', 'encodings.aliases', 'encodings.utf_8', 'enum', 'errno', 'fcntl', 'functools', 'genericpath', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'opcode', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'readline', 'reprlib', 'rlcompleter', 'runpy', 'select', 'signal', 'site', 'stat', 'struct', 'sys', 'termios', 'textwrap', 'time', 'token', 'tokenize', 'traceback', 'types', 'unicodedata', 'warnings', 'weakref', 'zipimport']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from '/Users/technetium/Yandex.Disk.localized/5 семестр/ПОАС/python-labs/TEMA8/Mod1.py'>
>>> import Mod1
Mod1:Введите значение = 9
Mod1:Значение perm1= 9
>>> Mod1.perm1
'9'
```
### Пункт 2.3. Запуск модуля с помощью exec()
```py
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 8
Mod1:Значение perm1= 8
>>> perm1
'8'
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 888
Mod1:Значение perm1= 888
>>> perm1
'888'
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 7777
Mod1:Значение perm1= 7777
>>> perm1
'7777'
```
### Пункт 2.4. Использование инструкции from … import …
Пример 1
```py
>>> from Mod1 import perm1
>>> perm1
'9'
```
Пример 2
```py
>>> from Mod2 import beta
>>> g = beta(2);g
****BETA****
535.4916555247646
>>> print(sorted(sys.modules.keys()))
['Mod1', 'Mod2', '__future__', '__main__', '_abc', '_ast', '_codecs', '_collections', '_collections_abc', '_colorize', '_curses', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_imp', '_io', '_opcode', '_opcode_metadata', '_operator', '_pyrepl', '_pyrepl.base_eventqueue', '_pyrepl.commands', '_pyrepl.completing_reader', '_pyrepl.console', '_pyrepl.curses', '_pyrepl.fancy_termios', '_pyrepl.historical_reader', '_pyrepl.input', '_pyrepl.keymap', '_pyrepl.main', '_pyrepl.reader', '_pyrepl.readline', '_pyrepl.simple_interact', '_pyrepl.trace', '_pyrepl.types', '_pyrepl.unix_console', '_pyrepl.unix_eventqueue', '_pyrepl.utils', '_signal', '_sitebuiltins', '_sre', '_stat', '_struct', '_suggestions', '_thread', '_tokenize', '_warnings', '_weakref', '_weakrefset', 'abc', 'ast', 'atexit', 'builtins', 'code', 'codecs', 'codeop', 'collections', 'collections.abc', 'contextlib', 'copy', 'copyreg', 'dataclasses', 'dis', 'encodings', 'encodings.aliases', 'encodings.utf_8', 'enum', 'errno', 'fcntl', 'functools', 'genericpath', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'opcode', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'readline', 'reprlib', 'rlcompleter', 'runpy', 'select', 'signal', 'site', 'stat', 'struct', 'sys', 'termios', 'textwrap', 'time', 'token', 'tokenize', 'traceback', 'types', 'unicodedata', 'warnings', 'weakref', 'zipimport']
>>> alpha()
Traceback (most recent call last):
File "<python-input-25>", line 1, in <module>
alpha()
^^^^^
NameError: name 'alpha' is not defined
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=5
'5'
>>> 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****
```
## Пункт 3. Многомодульные программы
### Пункт 3.1. Простая многомодульная программа
```py
>>> import Mod0
Mod1:Введите значение = 13
Mod1:Значение perm1= 13
perm1= 13
****ALPHA****
Значение t=22
tt= 22
****BETA****
qq= 1.038197035676497e+30
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'13'
```
### Пункт 3.2. Сложная многомодульная программа
[Содержимое файла mm0](MM0.py)
[Содержимое файла mm1](MM1.py)
[Содержимое файла mm3](MM2.py)
Проверка программы
```py
k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,150
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... , 9.174885290878997e+22, -2.3735104205090632e+23, 2.945671256147081e+23, 4.958412951209005e+22, -1.1163182444540476e+24]
```
### Пункт 3.3. Действие объектов в модулях
Обращение в функции alpha к функции beta:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
beta(int(t))
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)
```
```py
Mod1: Введите значение = 8
Mod1: Значение perm1 = 8
perm1 = 8
****ALPHA****
Значение t=4
tt = 4
qq = 286751.31313665316
```
Обращение в функции beta к функции alpha:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi = int(alpha())*math.pi
return math.exp(expi)
```
```py
Mod1: Введите значение = 8
Mod1: Значение perm1 = 8
perm1 = 8
****ALPHA****
Значение t=4
tt = 4
****ALPHA****
Значение t=4
qq = 286751.31313665316
```
Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi
Модифицированный mod0.py
```py
#Модуль Mod0
import math
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print("t = ", tt)
print("expi = ", math.log(qq))
```
Вывод
```py
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=3
tt= 3
****BETA****
qq= 12391.647807916694
t = 3
expi = 9.42477796076938
```
Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после это-го на экране
Модифицированный Mod0.py
```py
import math
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print("t = ", tt)
print("expi = ", math.log(qq))
print('3 * perm1=',3*int(Mod1.perm1))
```
Вывод
```py
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
perm1= 2
****ALPHA****
Значение t=2
tt= 2
****BETA****
qq= 535.4916555247646
t = 2
expi = 6.283185307179586
3 * perm1= 6
```
Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq
```py
>>> import Mod0
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
perm1= 3
****ALPHA****
Значение t=3
tt= 3
****BETA****
qq= 12391.647807916694
t = 3
expi = 9.42477796076938
3 * perm1= 9
>>> print("2*perm1 = ", 2*int(Mod0.Mod1.perm1))
2*perm1 = 6
>>> print("2*tt = ", 2*int(Mod0.tt))
2*tt = 6
>>> print("2*qq = ", 2*int(Mod0.qq))
2*qq = 24782
```

@ -0,0 +1,3 @@
1,2,3,4,5,6
я,помню,чудное,мгновенье
for,i,in,range,5

@ -0,0 +1,19 @@
# Общее контрольное задание по теме 8
Гордиевских Данил А-03-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
## Решение
[Содержимое модуля 1](task1.py)
[Содержимое модуля 2](task2.py)
[Содержимое модуля 3](task3.py)

@ -0,0 +1,7 @@
def readtextdata(nam):
f = open(nam)
aa = f.read()
aa = aa.replace("\n", " ")
aa = aa.split(" ")
aa = [int(item) for item in aa]
return aa

@ -0,0 +1,10 @@
import pandas as pd
import numpy as np
def correl(list1, list2):
df = pd.DataFrame({
'col1': list1,
'col2': list2
})
correlation = df['col1'].corr(df['col2'])
return correlation

@ -0,0 +1,10 @@
from task1 import *
from task2 import *
name1 = input("Введите имя первого файла: ")
name2 = input("Введите имя второго файла: ")
arr1 = readtextdata(name1)
arr2 = readtextdata(name2)
print(round(correl(arr1, arr2), 3))

@ -0,0 +1,27 @@
# Индивидуальное задание по модулю 8
Гордиевских Данил А-03-23
## Задание
Разработайте функцию с аргументом – именем текстового файла с записанным в него объектом – совокупностью строк, чисел, списков и т.д. В каждой строке данные разделяются запятыми. Функция должна считывать объект из файла, формировать и возвращать список, в котором каждый элемент – это список элементов из соответствующей строки файла. Сформированный список должен возвращаться в качестве результата функции. Проверить функцию на примере нерегулярной числовой матрицы.
## Выполнение
[Содержимое модуля 1](test1.py)
[Содержимое модуля 2](test2.py)
Содержимое файла:
```py
1,2,3,4,5,6
я,помню,чудное,мгновенье
for,i,in,range,5
```
Вывод:
```py
[['1', '2', '3', '4', '5', '6'], ['я', 'помню', 'чудное', 'мгновенье'], ['for', 'i', 'in', 'range', '5']]
```

@ -0,0 +1,9 @@
def scary_function(filename):
f = open(filename, "r", encoding='utf-8')
res = []
result = []
res.append(f.readlines())
for i in res[0]:
result.append(i.replace('\n', '').split(','))
return result

@ -0,0 +1,3 @@
from test1 import *
print(scary_function('scary_file.txt'))

@ -0,0 +1,2 @@
1 3 5 66
7 5 55 44 32 2

@ -0,0 +1,2 @@
1 3 5 66
7 0 44 44 20 2

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,5 @@
import pylab
import M2
pylab.plot(M2.SS3)
pylab.show()

@ -0,0 +1,26 @@
def fun(name, TAU, K):
sps2 = []
f = open(name, "r")
sps1 = f.readlines()
for i in range(len(sps1)):
sps1[i] = float(sps1[i].replace("\n", ""))
if i < TAU:
sps2.append(0)
else:
sps2.append(K * sps1[i-TAU])
return([sps1,sps2])
def fun2(SS1, SS2, TT):
D = 0
N = len(SS1)
SR1 = sum(SS1)/len(SS1)
SR2 = sum(SS2)/len(SS2)
for i in range(TT, len(SS1)):
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
for i in range(len(SS1)):
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
for i in range(len(SS1)):
D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2)
return(D)

@ -0,0 +1,28 @@
import os
import pickle
import random
import M1
while True:
name = input("Введите название текстового файла: ")
if os.path.exists(name):
print("Файл сущетсвует")
break
else:
print("Файл НЕ сущетсвует, повторите PopITку")
while True:
TAU = int(input("Введите значение TAU >= 0: "))
if TAU >= 0:
break
else:
print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли")
SS3 = []
k = random.randint(2,7)
res = M1.fun(name, TAU, k)
for TT in range(TAU+5):
SS3.append(M1.fun2(res[0], res[1], TT))
pickle.dump(SS3, open("Res11.bin", "wb"))

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

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

@ -0,0 +1,50 @@
-0.809
0.203
1.281
0.287
-0.181
0.297
0.616
-2.017
1.034
0.166
0.062
0.121
0.077
-0.716
0.184
-0.03
-0.846
0.052
0.51
-2.679
0.115
1.64
1.424
-0.635
-0.134
-0.308
0.809
-1.251
-0.188
-2.35
-0.221
-0.329
0.184
-0.666
-0.276
-0.593
1.266
0.56
0.96
0.47
-0.862
-0.103
0.981
0.638
0.344
0.555
-0.137
0.337
0.561
-1.075

@ -0,0 +1,263 @@
# Отчёт по теме 9
Гордиевских Данил А-03-23
## Пункт 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__', '__getstate__', '__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()
значение= Совсем новое
>>> z1.otobrazh()
Новое значение атрибута у экз.1
>>> del z1,z2,z3
```
## Пункт 3
Использование классов, содержащихся в модулях
Содержимое файла Mod3.py
```py
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)
```
Вывод
```py
>>> from Mod3 import Class1
>>> z4 = Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
z4.otobrazh()
File "C:\Users\u202-14\Desktop\poas\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)
AttributeError: 'Class1' object has no attribute 'data'
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
>>> del z4
>>> import Mod3
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.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')
>>> z5.otobrazh()
значение= abc
>>> z6=z5+'def'
>>> z6.otobrazh()
значение= abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение= abcdefabcdefabcdef
```
## Пункт 5. Присоединение атрибутов к классу
```py
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__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__', '__getstate__', '__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)==dir(Class3)
False
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__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']
>>> z7.rozden='1987'
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__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__', '__getstate__', '__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'>,)
object.__bases__
()
Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## Пункт 7. Создание свойства класса
```py
class Class4:
def __init__(sam,znach):
sam.__prm=znach
def chten(sam):
return sam.__prm
def zapis(sam,znch):
sam.__prm=znch
def stiran(sam):
del sam.__prm
svojstvo=property(chten,zapis,stiran)
exempl=Class4(12)
exempl.svojstvo
12
exempl.svojstvo=45
print(exempl.svojstvo)
45
del exempl.svojstvo
exempl.svojstvo
Traceback (most recent call last):
File "<pyshell#123>", line 1, in <module>
exempl.svojstvo
File "<pyshell#117>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
## Пункт 8. пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Содержимое модуля SAU.py
```py
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
```
Содержимое файла starter.py
```py
prm=[2.5,4,1.3,0.8]
from SAU import *
xx=[0]+[1]*20
SAUe=SAU(prm)
yt=[]
for xt in xx:
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Вывод:
```py
y= 0.0
y= 0.2173913043478261
y= 0.4763705103969754
y= 0.686594887811293
y= 0.8199324616478645
y= 0.8837201137353929
y= 0.8994188484874774
y= 0.8892777072047301
y= 0.870097963179993
y= 0.8518346102696789
y= 0.8387499784485772
y= 0.8314204114211459
y= 0.8286051955249649
y= 0.8285656555914835
y= 0.8297915186846528
y= 0.8312697736438287
y= 0.8324765218921963
y= 0.8332456979978418
y= 0.8336163607592184
y= 0.8337101315489143
y= 0.833654237067147
```
![График](Figure_1.png)

@ -0,0 +1,13 @@
prm=[2.5,4,1.3,0.8]
from SAU import *
xx=[0]+[1]*20
SAUe=SAU(prm)
yt=[]
for xt in xx:
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()

@ -0,0 +1,116 @@
# Защита модуля 3
Гордиевских Данил, А-03-23
## Вариант 3 задание
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - имя текстового файла, содержащего некоторое число отсчетов сигнала, целочисленный параметр TAU и числовой параметр К; в функции считывается сигнал из файла в список SPS1 и формируется второй список SPS2, элементы которого определяются по правилу: первые (TAU-1) элементов равны 0, а последующие определяются по формуле: SPS2[i]=K*SPS1[i-TAU]; оба списка возвращаются в качестве результатов работы функции;
- функция 2: аргументы - два числовых списка SS1 и SS2, а также целочисленный параметр ТТ; в функции рассчитывается и возвращается значение
D= (SS1[TT]-SR1)*(SS2[0] - SR2)+ (SS1[TT+1]-SR1)*(SS2[1] - SR2)+:+
(SS1[i]-SR1)*(SS2[i-TT] - SR2)+:+ (SS1[N]-SR1)*(SS2[N-TT] - SR2),
где N - длина списка SS1, SR1, SR2 - средние значения соответствующих списков.
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашивается и вводится имя текстового файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
- запрашивается значение параметра TAU и проверяется TAU >=0;
- вызывается функция 1 с указанными именем файла и параметром TAU, и случайным значением К из диапазона значений от 2 до 7; отображаются рассчитанные списки;
- вызывается функция 2 в цикле со значениями TT от 0 до TAU+5; результаты записываются в список SS3;
- список SS3 записывается в текстовый файл с именем Res11.bin.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика список SPS3.
4) Подготовьте файл с исходными данными - 50 отсчетов случайного нормально распределенного с некоторыми параметрами сигнала. Проведите по программе расчеты со значениями TAU, равными 0, 5 и 10.
## Выполнение
### Текст модуля M0
```py
import pylab
import M2
pylab.plot(M2.SS3)
pylab.show()
```
### Текст модуля M1
```py
def fun(name, TAU, K):
sps2 = []
f = open(name, "r")
sps1 = f.readlines()
for i in range(len(sps1)):
sps1[i] = float(sps1[i].replace("\n", ""))
if i < TAU:
sps2.append(0)
else:
sps2.append(K * sps1[i-TAU])
return([sps1,sps2])
def fun2(SS1, SS2, TT):
D = 0
N = len(SS1)
SR1 = sum(SS1)/len(SS1)
SR2 = sum(SS2)/len(SS2)
for i in range(TT, len(SS1)):
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
for i in range(len(SS1)):
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
for i in range(len(SS1)):
D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2)
return(D)
```
### Текст модуля M2
```py
import os
import pickle
import random
import M1
while True:
name = input("Введите название текстового файла: ")
if os.path.exists(name):
print("Файл сущетсвует")
break
else:
print("Файл НЕ сущетсвует, повторите PopITку")
while True:
TAU = int(input("Введите значение TAU >= 0: "))
if TAU >= 0:
break
else:
print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли")
SS3 = []
k = random.randint(2,7)
res = M1.fun(name, TAU, k)
for TT in range(TAU+5):
SS3.append(M1.fun2(res[0], res[1], TT))
pickle.dump(SS3, open("Res11.bin", "wb"))
```
### Вывод
![График](Figure_2.png)
![График](Figure_3.png)
![График](Figure_4.png)
Загрузка…
Отмена
Сохранить