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

...

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

Автор SHA1 Сообщение Дата
TabolinIA 2186d86136 ikz
1 месяц назад
TabolinIA 0273a16f88 okz red
1 месяц назад
TabolinIA 5f8f58afdd ред ИКЗ
1 месяц назад
TabolinIA 52c4726de8 ИКЗ ред
1 месяц назад
TabolinIA 85e9c6daa2 ikz
1 месяц назад
TabolinIA 35322e8142 okz
1 месяц назад
TabolinIA 914f5bc920 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
1 месяц назад
TabolinIA 1c3efa7980 report
1 месяц назад
TabolinIA f26da7aa8f редакция отчета
2 месяцев назад
TabolinIA 96f4fbc1b4 ИКЗ
2 месяцев назад
TabolinIA fdf672b8b7 редакция отчета
2 месяцев назад
TabolinIA 0f9aaccdb4 редакция отчета
2 месяцев назад
TabolinIA 5582a02246 редакция отчета
2 месяцев назад
TabolinIA c6644cf6d6 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
2 месяцев назад
TabolinIA 2b4fc6667f ОКЗ
2 месяцев назад
TabolinIA e98453c7cf 1 ред. отчета
2 месяцев назад
TabolinIA c3488f3aff основной отчет
2 месяцев назад
TabolinIA 18ae4e843b ОКЗ 1 ред.
2 месяцев назад
TabolinIA eacde950d5 ОКЗ
2 месяцев назад
TabolinIA 3a7be4efdb Tema7 report
2 месяцев назад
TabolinIA 1bd05874fa ред. тест
2 месяцев назад
TabolinIA 65ee31ff6c Test 2
2 месяцев назад
TabolinIA e8da71cc0d 1 ред. ОКЗ
2 месяцев назад
TabolinIA 53a34a51d1 ред. отчета
2 месяцев назад
TabolinIA c006e9e23b Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
2 месяцев назад
TabolinIA e22d40ca0a Tema 6
2 месяцев назад
TabolinIA 4f9888746b Корректировка ИКЗ
3 месяцев назад
TabolinIA 29ec94ce07 ИКЗ по Теме 5
3 месяцев назад
TabolinIA 46ccc67972 Корректировка ОКЗ
3 месяцев назад
TabolinIA 0d6688b8ae Дополнил отчет комментариями
3 месяцев назад
TabolinIA 8e40c24d96 Корректировка ОКЗ
3 месяцев назад
TabolinIA 84aeb4cc5f Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
3 месяцев назад
TabolinIA c8da927186 Выполнение Темы 5
3 месяцев назад
TabolinIA 44dedc6983 2 ред. ИКЗ
3 месяцев назад
TabolinIA 5c448263d6 1 ред. ИКЗ
3 месяцев назад
TabolinIA 51a80555a6 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
3 месяцев назад
TabolinIA 19eb7b4037 ИКЗ 11
3 месяцев назад
TabolinIA 5e4a59394e ред. ОКЗ
3 месяцев назад
TabolinIA ebc29143f2 ред. отчета
3 месяцев назад
TabolinIA 8d6ef9e2ee 1 ред. ОКЗ
3 месяцев назад
TabolinIA 5250cedf47 ОКЗ
3 месяцев назад
TabolinIA ca5f76dc63 1 ред. отчёта
3 месяцев назад
TabolinIA 5f9fa115b0 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
3 месяцев назад
TabolinIA 0c7aa1f909 Отчет по Теме 4
3 месяцев назад
TabolinIA c7c1f29632 2 ред. ТЕСТ 1
3 месяцев назад
TabolinIA 4ba71d4abb 1 ред. ТЕСТ 1
3 месяцев назад
TabolinIA 9dbd830a77 ТЕСТ 1
3 месяцев назад
TabolinIA b80d5a6828 2 ред. ОКЗ
3 месяцев назад
TabolinIA abc4d1f7c6 ред. ОКЗ Тема 3
4 месяцев назад
TabolinIA 36f8fafbad Отчет Тема 3
4 месяцев назад
TabolinIA 49c4252245 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
4 месяцев назад
TabolinIA c0fb6de1f3 ИКЗ Тема 2
4 месяцев назад
TabolinIA fc1b0c8ce9 Правки 1
4 месяцев назад
TabolinIA 9555567b3f ОКЗ ТЕМА2
4 месяцев назад
TabolinIA 48b6c2271e отчет
4 месяцев назад
TabolinIA ae7937980d Изменил(а) на 'TEMA1/test.md'
4 месяцев назад
TabolinIA 06a5c48fb2 Merge branch 'main' of http://uit.mpei.ru/git/TabolinIA/python-labs
4 месяцев назад
TabolinIA 4883e7fbbe TEMA1 question2
4 месяцев назад
TabolinIA 8b2deb5f05 TEMA1 report v2.1
4 месяцев назад
TabolinIA 34a6e0f653 TEMA1 report md
4 месяцев назад
TabolinIA 0835599324 TEMA1 report
4 месяцев назад

@ -0,0 +1,118 @@
# Отчёт по теме 1. Знакомство с интерпретатором и интерактивной оболочкой IDLE
Таболин Иван Андреевич А-01-23
# 1. Создал свою папку на диске, а в ней создал папки TEMAn
# 2. Запустил на выполнение программу-интерпретатор, выбрав ее ярлык «Python 3.13».
# 3. Изучил содержание открывающегося диалогового окна интерпретатора. Вывел "hello".
```py
>>> print('Hello')
Hello
```
# 4. Запросил от пользователя имя и ввёл с клавиатуры.
```py
>>> h=input('Your name=')
Your name=Ivan
```
# 5. Завершил работу интерпретатора.
```py
>>> exit()
```
# 6. Запустил интерактивную графическую оболочку IDLE среды Python.
# 7. Изучил устройство главного командного окна среды.
# 8. Настроил рабочий каталог среды
```py
import os
os.chdir('C:\MPEI\POAS\Tabolin\Tema1\python-labs\TEMA1')
```
# 9. Изучил предложения главного меню и настроил интерфейс оболочки IDLE.
# 10. Создал файл программы и сохранил под именем Pr0.py.
```py
--------Pr0.py--------
Программа по Теме 1 Таболин Иван Андреевич
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\MPEI\POAS\Tabolin\Tema1\python-labs\TEMA1')
----------------------
```
Запустил программу на выполнение разными способами.
```py
import Pr0
Hello
Your name=Ivan
```
# 11. Запустил на выполнение Prb1.py
```py
import prb1
Как Вас зовут? Ivan
Привет, Ivan
```
# 12.
Содержание файла Pr0.cpython-313.pyc:
```py
у
;Dµh° г  уP • \ " S 5 \" S5 rSSKr\R " S5 g)ЪHelloz
Your name=й NzC:\MPEI\POAS\Tabolin\Tema1\)ЪprintЪinputЪosЪchdir© у Ъ!C:\MPEI\POAS\Tabolin\Tema1\Pr0.pyЪ<module>r  s& рб Ђg„Щ УЂЫ Ш Р +Х ,r
```
В папке `__pycache__` содержится скомпилированный двоичный код, который нужен для повторных запусков.
# 13. Создал файл протокола темы.
# 14. Изучил раздел "Help"
```py
help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
help(print),help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
(None, None)
```
# 15.
Открыл файл prb1.py в текстовом редакторе среды.
С помощью предложения "Window" переключался между окнами.
Запустил программу prb1.py на выполнение с помощью предложения "Run".
```py
============================ RESTART: C:\MPEI\POAS\Tabolin\Tema1\prb1.py ===========================
Как Вас зовут? Ivan
Привет, Ivan
```
Открыл файл Pr0.py в текстовом редакторе среды и переключал окна.
Закрыл два окна текстового редактора с помощью предложения "Close window".
Запустил на выполнение программу tdemo_chaos.py и открыл сам код в текстовом редакторе.
```py
import tdemo_chaos
```

@ -0,0 +1,112 @@
# Отчёт по теме 1. Знакомство с интерпретатором и интерактивной оболочкой IDLE
Таболин Иван Андреевич А-01-23
1. Создал свою папку на диске, а в ней создал папки TEMAn
2. Запустил на выполнение программу-интерпретатор, выбрав ее ярлык «Python 3.13».
3. 3.Изучил содержание открывающегося диалогового окна интерпретатора. Вывел "hello".
```
>>> print('Hello')
Hello
```
4. Запросил от пользователя имя и ввёл с клавиатуры.
```
>>> h=input('Your name=')
Your name=Ivan
```
5. Завершил работу интерпретатора.
```
>>> exit()
```
6. Запустил интерактивную графическую оболочку IDLE среды Python.
7. Изучил устройство главного командного окна среды.
8. Настроил рабочий каталог среды
```
import os
os.chdir('C:\MPEI\POAS\Tabolin\Tema1\python-labs\TEMA1')
```
9. Изучил предложения главного меню и настроил интерфейс оболочки IDLE.
10. Создал файл программы и сохранил под именем Pr0.py.
--------Pr0.py--------
#Программа по Теме 1 Таболин Иван Андреевич
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\MPEI\POAS\Tabolin\Tema1\python-labs\TEMA1')
----------------------
Запустил программу на выполнение разными способами.
```
import Pr0
Hello
Your name=Ivan
```
11. Запустил на выполнение Prb1.py
```
import prb1
Как Вас зовут? Ivan
Привет, Ivan
```
12.
Содержание файла Pr0.cpython-34.pyc:
у
;Dµh° г  уP • \ " S 5 \" S5 rSSKr\R " S5 g)ЪHelloz
Your name=й NzC:\MPEI\POAS\Tabolin\Tema1\)ЪprintЪinputЪosЪchdir© у Ъ!C:\MPEI\POAS\Tabolin\Tema1\Pr0.pyЪ<module>r  s& рб Ђg„Щ УЂЫ Ш Р +Х ,r
В папке __pycache__ содержится скомпилированный двоичный код, который нужен для оптимизации
13. Создал файл протокола темы.
14. Изучил раздел "Help"
```
help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
help(print),help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
(None, None)
```
15.
Открыл файл prb1.py в текстовом редакторе среды.
С помощью предложения "Window" переключался между окнами.
Запустил программу prb1.py на выполнение с помощью предложения "Run".
```
============================ RESTART: C:\MPEI\POAS\Tabolin\Tema1\prb1.py ===========================
Как Вас зовут? Ivan
Привет, Ivan
```
Открыл файл Pr0.py в текстовом редакторе среды и переключал окна.
Закрыл два окна текстового редактора с помощью предложения "Close window".

@ -0,0 +1,8 @@
# Индивидуальное контрольное задание по Теме 1
Таболин Иван, А-01-23
## Вопрос
Можно ли работать со средой без использования интерактивной оболочки IDLE?
## Ответ
Да, можно. Интерктивная оболочка IDLE - это один из способов взаимодействия со средой программирования Python.
Можно рабоать напрямую через командную строку или другие среды разработки, такие как PyCharm, VisualStudio и др.
Плюсы этих сред разработки в том, что там есть подсветка команд, автодополнение и некотоые другие удобные функции.

@ -0,0 +1,570 @@
# Отчет по Теме 2
Таболин Иван Андреевич А-01-23
## 1. Запуск оболочки IDLE и начальная настройка.
```py
import os
os.chdir('C:\\MPEI\\TEMA2')
```
## 2. Изучение простых объектов.
Присваивание
```py
f1=16
f2=3
```
Просмотр значения переменной
```py
f1,f2
(16, 3)
f1;f2
16
3
```
Просмотр существующих объектов
```py
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
```
Получение списка атрибутов любого объекта
```py
dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
```
Определение классовой принадлежности любого объекта
```py
type(f2)
<class 'int'>
```
Удаление объекта из оперативной памяти и проверка его отсутствия
```py
del f1,f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
```
## 3. Изучение правил наименований в Python.
Операции наименований переменных
```py
gg1=1.6
hh1='Строка'
73sr=3
SyntaxError: invalid decimal literal
and=7
SyntaxError: invalid syntax
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'gg1', 'hh1', 'os']
```
Задать наименование переменной "73sr" не удалось, так как имя не может начинаться с цифры, а наименование "and" совпадает с ключевым словом.
Только переменные `gg1` и `hh1` получили свое название.
## 4. Изучение списка ключевых слов.
Просмотр ключевых слов.
```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']
```
Сохранение в переменную `kw`.
```py
kw=keyword.kwlist
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']
```
## 5. Изучение списка встроенных идентификаторов.
Вывод списка встроенных идентификаторов.
```py
import builtins
dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '_IncompleteInputError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
```
Изучение некоторых встроенных функций с помощью команды `help()` (на примере `pow`)
```py
help(pow)
Help on built-in function pow in module builtins:
pow(base, exp, mod=None)
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Some types, such as ints, are able to use a more efficient algorithm when
invoked using the three argument form.
```
abs - возвращает абсолютное значение числа (модуль)
len - возвращает длину списка
max/min -возвращает максимальное/минимальное значения
pow - возводит число в степень
round - возвращает целое округленное значение
sorted - сортировка (по умолчанию - по возрастанию)
sum - суммирует значения
zip - объединяет аргументы в кортеж
Примеры
```py
len('ruchka')
6
pow(2,5)
32
round(3.7676)
4
sorted([12,3,1,0,111])
[0, 1, 3, 12, 111]
sum([0,1,2,3,4,5])
15
list(zip('abcd','efg'))
[('a', 'e'), ('b', 'f'), ('c', 'g')]
```
## 6. Разница регистров в именах переменных.
```py
Gg1=90
gg1,Gg1
(1.6, 90)
```
## 7.1 Логические переменные
Задание двух логических переменных, просмотр класса переменной и простейшие операции с логическими переменными
```py
bb1=True;bb2=False
bb1;bb2
True
False
bb1+bb2
1
bb1*bb2
0
type(bb1)
<class 'bool'>
```
## 7.2 Другие простые типы
```py
ii1=-1234567890
type(ii1)
<class 'int'>
```
Экспоненциальная форма записи вещественного числа
```py
ff1=-8.9876e-12
ff1
-8.9876e-12
type(ff1)
<class 'float'>
```
Двоичное число
```py
dv1=0b1101010
dv1
106
type(dv1)
<class 'int'>
```
Восьмеричное число
```py
vsm1=0o52765
vsm1;type(vsm1)
22005
<class 'int'>
```
Шестнадцатиричное число
```py
shest1=0x7109af6
shest1;type(shest1)
118528758
<class 'int'>
```
Комплексное число. Создание комплексного числа из двух вещественных
```py
cc1=2-3j
cc1;type(cc1)
(2-3j)
<class 'complex'>
a=3.76;b=-0.45
cc2=complex(a,b)
cc2;type(cc2)
(3.76-0.45j)
<class 'complex'>
```
## 7.3 Строка символов
Строки можно задавать как в одинарных, так и в двойных кавычках.
```py
ss1='Это -строка символов'
ss1="Это - строка символов"
ss1
'Это - строка символов'
```
Использование экранированных последовательностей
```py
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
```
Вывод ФИО
```py
ss1b= 'Меня зовут: \n Таболин И. А.'
print(ss1b)
Меня зовут:
Таболин И. А.
```
Многострочные строки, задаваемые тройными кавычками
```py
mnogo="""Нетрудно заметить, что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые учавствуют в операции"""
print(mnogo)
Нетрудно заметить, что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые учавствуют в операции
```
Обращение к частям строки символов с использованием индексов по их порядку, начиная с 0
При знаке "-" отсчёт идет от конца строки.
```py
ss1[0] # Это символ Э
'Э'
ss1[8] # Это символ р
'р'
ss1[-2] # это символ "о"
'о'
```
Операция «разрезания» или «создания среза», создающая новый объект
```py
ss1[0] # Это символ Э
'Э'
ss1[8] # Это символ р
'р'
ss1[-2] # это символ "о"
'о'
ss1[6:9] # часть строки с 6 по 8 символ, не включая 9-й
'стр'
ss1[13:] # символы с 13 и до конца
'символов'
ss1[:13] # символы с начала и до 12, не включая 13-й
'Это - строка '
ss1[5:-8] # символы с 5-го по 8-й с конца
' строка '
ss1[3:17:2] # символы с 3-го по 16 с шагом 2
' тоасм'
```
Символы с 3-го по 17 с шагом 2, но в обратном порядке
```py
ss1[17:3:-2]
'омсаот '
```
```py
ss1[-4:3:-2]
'омсаот '
```
Строка неизменяемый объект, его можно изменить тольк переопределением
```py
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#95>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
ss1=ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
```
Самостоятельно создал срез из `ss1b`
```py
ss1b;ss1b[-13:]
'Меня зовут: \n Таболин И. А.'
'Таболин И. А.'
print(ss1b,ss1b[-13:])
Меня зовут:
Таболин И. А. Таболин И. А.
print(ss1b,"\n",ss1b[-13:])
Меня зовут:
Таболин И. А.
Таболин И. А.
```
Самостоятельно создал переменные комплексного типа
```py
a=5.45;b=7.62
p_plus=complex(a,b);p_minus=complex(a,-b)
p_plus;p_minus
(5.45+7.62j)
(5.45-7.62j)
type(p_plus)
<class 'complex'>
```
## 8. Изучение списков, кортежей, словарей и множеств.
## 8.1 Списки.
Список - упорядоченная по местоположению коллекция объектов произвольных типов.
```py
spis1=[111,'Spisok',5-9j]
spis1
[111, 'Spisok', (5-9j)]
stup=[0,0,1,1,1,1,1,1,1]
stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
```
Ввод списка на нескольких строках
```py
spis=[1,2,3,4,
5,6,7,
8,9,10]
spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```
При работе со списками индексы используются также как и при работе со строками
```py
spis[-1]
10
stup[-8::2]
[0, 1, 1, 1] # это часть списка начиная с 8-го с конца элемента до конца с шагом 2
stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
```
Изменение списка
```py
spis1
[111, 'Spisok', (5-9j)]
spis1[1]='Список'
spis1
[111, 'Список', (5-9j)]
```
Текущее число элементов в списке
```py
len(spis1)
3
```
Добавление элемента в конец списка
```py
spis1.append('New item 1')
spis1
[111, 'Список', (5-9j), 'New item 1']
spis1+['New item']
[111, 'Список', (5-9j), 'New item 1', 'New item']
```
Добавление строки `ss1b` в конец списка `spis1`
```py
print(ss1b)
Меня зовут:
Таболин И. А.
spis1.append(ss1b)
print(spis1)
[111, 'Список', (5-9j), 'New item 1', 'Меня зовут: \n Таболин И. А.']
```
Удаление элемента списка с индексом 1
```py
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item 1', 'Меня зовут: \n Таболин И. А.']
```
Команда `.insert` добавляет элемент в список перед элементом с указанным индексом
```py
spis1
[111, (5-9j), 'New item 1', 'Меня зовут: \n Таболин И. А.']
spis1.insert(2, '3')
spis1
[111, (5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.']
```
Команда `.remove` удаляет только первый найденный элемент из списка
```py
spis1.remove(123)
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
spis1.remove(123)
ValueError: list.remove(x): x not in list
spis1.append(111)
spis1.remove(111)
spis1
[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111]
```
Команда `.extend` расширяет список
```py
spis1
[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111]
spis1.extend(['Hello','world','!'])
spis1
[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111, 'Hello', 'world', '!']
```
Сортировка элементов в списке с помощью `.sort` и удаление всех элементов списка с помощью `.clear`
```py
spis2=[0,1,2,44,55,67,100,80,5]
spis2
[0, 1, 2, 44, 55, 67, 100, 80, 5]
spis2.sort()
spis2
[0, 1, 2, 5, 44, 55, 67, 80, 100]
spis2.clear()
spis2
[]
```
Команда `.reverse` переставляет все элементы с последнего по первый
```py
spis1.reverse()
spis1
['!', 'world', 'Hello', 111, 'Меня зовут: \n Таболин И. А.', 'New item 1', '3', (5-9j)]
```
Команда `.copy` копирует список
```py
spis1_copy=spis1.copy()
spis1_copy
[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111, 'Hello', 'world', '!']
```
Команда `.count` возвращает количество элементов, совпадающих с аргументом
```py
spis1.count('3')
1
```
Команда `.index` возвращает индекс первого элемента, совпадающего с указанным
```py
spis1.append(111)
spis1
[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111, 'Hello', 'world', '!', 111]
spis1.index(111)
4
```
Вложенный список
```py
spis2=[spis1,'a','b']
spis2
[[(5-9j), '3', 'New item 1', 'Меня зовут: \n Таболин И. А.', 111, 'Hello', 'world', '!', 111], 'a', 'b']
```
Обращение к первому элементу первого списка
```py
spis2[0][0]
(5-9j)
```
Изменение элемента вложенного списка
```py
spis2[0][1]=78
spis2
[[(5-9j), 78, 'New item 1', 'Меня зовут: \n Таболин И. А.', 111, 'Hello', 'world', '!', 111], 'a', 'b']
```
Изменяется элемент не только вложенного списка, но и элемент изначального списка. Чтобы этого избежать, необходимо использовать копию списка.
Создание своего списка
```py
my_spis=[(2-9j),True, 20, 'Ivan']
my_spis
[(2-9j), True, 20, 'Ivan']
my_spis=[my_spis, '23','02','2005']
my_spis
[[(2-9j), True, 20, 'Ivan'], '23', '02', '2005']
```
## Объект - кортеж
Создание и переопределение кортежа
```py
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1
(222, 'Kortezh', (77+8j), 1, 2)
ss1b='Меня зовут: \n Таболин И. А.'
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Таболин И. А.')
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Таболин И. А.')
```
Подсчёт значениё в кортеже
```py
kort1.index(2)
4
kort1.count(222)
1
```
Кортежи невозможно изменять
```py
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
```
Создание своего кортежа
```py
my_kort=(123,'Python',[0,1,2,3],(456, 'stroka'))
my_kort
(123, 'Python', [0, 1, 2, 3], (456, 'stroka'))
```
## Изучение объекта-словаря
Создание словаря и обращение к его элементу
```py
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
dic1['Orel']
56
```
Пополнение словаря
```py
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
```
Сортировка словаря по ключам или по значениям
```py
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
```
Создание словаря, два элемента которого являются словарями, и обращение к одному из элементов
```py
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic2;dic3
{1: 'mean', 2: 'standart deviation', 3: 'correlation'}
{'statistics': {1: 'mean', 2: 'standart deviation', 3: 'correlation'}, 'POAS': ['base', 'elementary', 'programming']}
dic3['statistics'][2]
'standart deviation'
```
Создание словаря с использованием dict
```py
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Таболин И. А.'}
```
Создание словаря с использованием dict и zip
```py
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Таболин И. А.'}
```
Создание своего словаря
```py
my_slov_kort=('game','football','computer','university','dictionary','english','russian')
my_slov_spis=['игра','футбол','компьютер','университет','словарь']
my_dictionary=dict(zip(my_slov_kort,my_slov_spis))
my_dictionary
{'game': 'игра', 'football': 'футбол', 'computer': 'компьютер', 'university': 'университет', 'dictionary': 'словарь'}
```
Словарь с обучающимися ИВТИ
```py
AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
AVTI[' Курс III '][5]
AVTI['Курс III'][5]
15
```
## 8.4 Изучение объектов-множеств
Создание множества, определение числа элементов, проверка наличия элемента, добавление элемента и удаление элемента
```py
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
```
Создание своего множества и работа с ним
```py
my_mnoz={1,2,3,4,5,67,8}
my_mnoz
{1, 2, 3, 4, 5, 67, 8}
67 in my_mnoz
True
my_mnoz.remove(67)
my_mnoz.remove(8)
my_mnoz.add(6)
my_mnoz.add(7)
my_mnoz.add(8)
my_mnoz
{1, 2, 3, 4, 5, 6, 7, 8}
```

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

@ -0,0 +1,17 @@
# Индивидуальное контрольное задание по Теме 2
Таболин Иван, А-01-23
## Задание
Пусть создан объект
`dd=[11,2,-4,23,12,56]`
К какому классу относится этот объект? Как расположить его элементы в порядке убывания?
## Решение
Объект `dd` относится к классу списков. Расположить объекты в порядке убывания можно с помощью метода `.sort`, указав аргумент `reverse=True`
```py
dd=[11,2,-4,23,12,56];dd
[11, 2, -4, 23, 12, 56]
type(dd)
<class 'list'>
dd1=dd.copy()
dd1.sort(reverse=True);dd1
[56, 23, 12, 11, 2, -4]
```

@ -0,0 +1,727 @@
# Отчёт по Теме 3
Таболин Иван А-01-23
## 1. Запуск и настройка
Запустил IDLE и выполнил начальную настройку, установив рабочий каталог.
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA3')
```
## 2. Преобразование простых базовых типов объектов
## 2.1. Преобразование в логический тип
Функция bool() преобразует элемент в логическую переменную
```py
logiz1=bool(56);logiz1
True
logiz2=bool(0);logiz2
False
logiz3=bool("Beta");logiz3
True
logiz4=bool("");logiz4
False
```
## 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления с помощью функции int()
```py
tt1=int(198.6);tt1
198
tt2=int("-76");tt2
-76
tt3=int("B",16);tt3
11
tt4=int("71",8);tt4
57
tt5=int("98.76");tt5
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
tt5=int("98.76");tt5
ValueError: invalid literal for int() with base 10: '98.76'
```
Преобразование целых чисел или строк в вещественное число с помощью float()
```py
flt1=float(789);flt1
789.0
flt2=float(-6.78e2);flt2
-678.0
flt3=float("Infinity");flt3
inf
flt4=float("-inf");flt4
-inf
```
## 2.3. Преобразование десятичных чисел в другие СС
Преобразования в двоичную систему с помощью bin(), в восьмеричную систему с помощью oct(), в шестнадцатиричную систему с помощью hex()
```py
hh=123
dv1=bin(hh);dv1
'0b1111011'
vos1=oct(hh);vos1
'0o173'
shs1=hex(hh);shs1
'0x7b'
```
Обратное преобразования
```py
int(dv1)
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
int(dv1)
ValueError: invalid literal for int() with base 10: '0b1111011'
int(vos1)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
int(vos1)
ValueError: invalid literal for int() with base 10: '0o173'
int(shs1)
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
int(shs1)
ValueError: invalid literal for int() with base 10: '0x7b'
```
## 3. Изучение преобразований более сложных базовых типов объектов
## 3.1. Преобразование в строку
Преобразование в строку символов осуществляется функцией str()
```py
strk1=str(23.6);strk1
'23.6'
strk2=str(logiz3)
strk2
'True'
strk3=str(["A","B","C"]);strk3
"['A', 'B', 'C']"
strk4=str(("A","B","C"));strk4
"('A', 'B', 'C')"
strk5=str({"A":1,"B":2,"C":3});strk5
"{'A': 1, 'B': 2, 'C': 3}"
```
## 3.2. Преобразование в список
Преобразование в список осуществляется функцией list()
```py
spis1=list("Строка символов");spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
spis2=list((124,236,-15,908));spis2
[124, 236, -15, 908]
spis3=list({"A":1,"B":2,"C":9});spis3
['A', 'B', 'C']
```
Чтобы в список попадали не ключи, а сами значения из словаря, необходимо дополнить аргумент функции:
```py
spis4=list({"A":1,"B":2,"C":9}.values());spis4
[1, 2, 9]
```
## 3.3. Преобразование в кортеж
Преобразование в кортеж осуществляется функцией tuple()
```py
kort7=tuple("Строка символов");kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
kort8=tuple(spis2);kort8
(124, 236, -15, 908)
kort9=tuple({"A":1,"B":2,"C":9});kort9
('A', 'B', 'C')
kort99=tuple({"A":1,"B":2,"C":9}.values());kort99
(1, 2, 9)
```
## 3.4. Удаление объектов
Удаление объектов производится с помощью инструкции `del`
```py
del strk5, kort8
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'flt1', 'flt2', 'flt3', 'flt4', 'hh', 'kort1', 'kort7', 'kort9', 'kort99', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'os', 'shs1', 'spis1', 'spis2', 'spis3', 'spis4', 'strk1', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'tt6', 'vos1']
```
Создание строки с фамилией и инициалами и последующие преобразования: строка -> список -> кортеж -> строка
```py
my_name="TabolinIA"
my_name_spis=list(my_name);my_name_spis
['T', 'a', 'b', 'o', 'l', 'i', 'n', 'I', 'A']
my_name_kort=tuple(my_name_spis);my_name_kort
('T', 'a', 'b', 'o', 'l', 'i', 'n', 'I', 'A')
my_name_str=str(my_name_kort);my_name_str
"('T', 'a', 'b', 'o', 'l', 'i', 'n', 'I', 'A')"
my_name==my_name_str
False
```
## 4. Арифметические операции
## 4.1. Сложение и вычитание
```py
12+7+90
109
5.689e-1-0.456
0.11289999999999994
23.6+54
77.6
14-56.7+89
46.3
```
## 4.2. Умножение
```py
-6.7*12
-80.4
```
## 4.3. Деление
```py
-234.5/6
-39.083333333333336
a=178/45
a;type(a)
3.9555555555555557
<class 'float'>
b=25/5;b;type(b)
5.0
<class 'float'>
```
Результат деления - всегда вещественное число
## 4.4. Деление с округлением вниз
```py
b=178//45
b
3
c=-24.6//12.1;c
-3.0
c1=-24.6/12.1;c1
-2.0330578512396698
type(b)
<class 'int'>
type(c)
<class 'float'>
```
```py
c2=12/3.99999
c2;type(c2)
3.00000750001875
<class 'float'>
c2=12//3.99999
c2;type(c2)
3.0
<class 'float'>
c3=12.000001//4;c3;type(c3)
3.0
<class 'float'>
c4=12//4;c4;type(c4)
3
<class 'int'>
c5=12//5;c5;type(c5)
2
<class 'int'>
```
Если хотя бы один элемент в выражении является вещественным числом, результат будет вещественным.
## 4.5. Получение остатка от деления
```py
148%33
16
12.6%3.8
1.2000000000000002
12%4
0
12%0
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
12%0
ZeroDivisionError: integer modulo by zero
2.5%1
0.5
2.5%0.5
0.0
5%1.5
0.5
```
## 4.6. Возведение в степень
```py
14**3
2744
e=2.7**3.6;e
35.719843790663525
2**2.5
5.656854249492381
2.5**2
6.25
True**4
1
0**2
0
2**0
1
-12**2
-144
(-12)**2
144
```
Операции с комплексными числами
```py
compl1=(2-3j)
type(compl1)
<class 'complex'>
compl2=(3+5j)
sum_compl=compl1+compl2
sum_compl
(5+2j)
razn_compl=compl2-compl1
razn_compl
(1+8j)
proizved_compl=compl1*compl2;proizved_compl
(21+1j)
del_compl=compl2/compl1
del_compl
(-0.6923076923076924+1.4615384615384617j)
compl1//compl2
Traceback (most recent call last):
File "<pyshell#95>", line 1, in <module>
compl1//compl2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
compl1//2
Traceback (most recent call last):
File "<pyshell#96>", line 1, in <module>
compl1//2
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
2//compl1
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
2//compl1
TypeError: unsupported operand type(s) for //: 'int' and 'complex'
0.5//compl1
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
0.5//compl1
TypeError: unsupported operand type(s) for //: 'float' and 'complex'
compl1%compl2
Traceback (most recent call last):
File "<pyshell#99>", line 1, in <module>
compl1%compl2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
```
Такие операции как сложение, вычитание, умножение и деление можно производить с комплексными числами, но операции целочисленного деления и взятия остатка от деления производить с комплексными числами нельзя.
## 5. Операции с двоичными представлениями целых чисел
## 5.1. Двоичная инверсия
Двоичная инверсия - значение каждого бита в представлении числа заменяется на противоположное с помощью `=~`
```py
dv1=9
dv2=~dv1
bin(dv1);bin(dv2)
'0b1001'
'-0b1010'
dv1;dv2
9
-10
```
Двоичная инверсия - это не только смена "1" на "0", а "0" на "1", но и смена знака. Это связано с тем, что двоичные числа представлены "по кругу".
9 -> -(9+1), то есть n -> -(n+1)
## 5.2 Двоичное И
Побитовое совпадение двоичных прдставлений чисел
```py
7&9
1
bin(7);bin(9);bin(7&9)
'0b111'
'0b1001'
'0b1'
7&8
0
bin(7);bin(8);bin(7&8)
'0b111'
'0b1000'
'0b0'
bin(7);bin(12);bin(7&12)
'0b111'
'0b1100'
'0b100'
int("0100",2)
4
```
## 5.3. Двоичное ИЛИ
Побитовое сравнение двоичных представлений чисел
```py
7|9;bin(7);bin(9);bin(7|9)
15
'0b111'
'0b1001'
'0b1111'
7|8;bin(7);bin(8);bin(7|8)
15
'0b111'
'0b1000'
'0b1111'
14|5;bin(14);bin(5);bin(14|5)
15
'0b1110'
'0b101'
'0b1111'
10|8;bin(10);bin(8);bin(10|8)
10
'0b1010'
'0b1000'
'0b1010'
```
## 5.4. Двоичное исключающее ИЛИ
Побитовое сравнение двоичных представлений чисел, "0" получается только если оба сравниваемых разряда имеют одинаковые значения.
```py
14^5;bin(14);bin(5);bin(14^5)
11
'0b1110'
'0b101'
'0b1011'
```
## 5.5. Сдвиг двоичного представления числа
Сдвиг двоичного представления числа на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями
```py
h=14;g=h<<2;bin(h);bin(g)
'0b1110'
'0b111000'
g1=h>>1;bin(h);bin(g1)
'0b1110'
'0b111'
g2=h>>2;bin(h);bin(g2)
'0b1110'
'0b11'
```
```py
dv3=int("100100101",2);dv4=int("101010101",2)
dv5=~dv3;dv5;bin(dv3);bin(dv5)
-294
'0b100100101'
'-0b100100110'
dv3&dv4;bin(dv3);bin(dv4);bin(dv3&dv4)
261
'0b100100101'
'0b101010101'
'0b100000101'
dv3|dv4;bin(dv3);bin(dv4);bin(dv3|dv4)
373
'0b100100101'
'0b101010101'
'0b101110101'
dv3^dv4;bin(dv3);bin(dv4);bin(dv3^dv4)
112
'0b100100101'
'0b101010101'
'0b1110000'
g3=dv3<<2;bin(dv3);bin(g3)
'0b100100101'
'0b10010010100'
g3
1172
g4=dv4>>3;bin(dv4);bin(g4);g4
'0b101010101'
'0b101010'
42
```
## 6. Операции при работе с последовательностями
## 6.1. Объединение последовательностей
Соединение двух строк, объединение двух списков, двух кортежей
```py
'Система'+'регулирования'
'Системарегулирования'
['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
## 6.2. Повторение
```py
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
signal1=[0]*3+[1]*99;signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
signal2=(0,)*3+(1,)*5+(0,)*7;signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
## 6.3. Проверка наличия заданного элемента в последовательности
```py
stroka='Система автоматического управления'
'автомат' in stroka
True
'ку' in ['ку','-']*3
True
'ля-' in ('abc','de','fg','hi','jkl')
False
```
## 6.4. Подстановка значений в строку
Подстановка значений в строку выполняется с помощью оператора `%`
```py
stroka='Температура = %g %s %g'
stroka % (16, ' меньше ',25)
'Температура = 16 меньше 25'
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
## 7.1. Обычное присваивание
Обычное присваивание значения переменной выполняется с помощью `=`
```py
zz=-12
```
## 7.2. Увеличение значения переменной на заданную величину
`+=` увеличивает переменную, а `-=` - уменьшает
```py
zz+=5;zz
-7
zz-=3;zz
-10
```
Для последовательностей эта операция означает конкатенацию
```py
stroka='Система'
stroka+='регулирования'
stroka
'Системарегулирования'
```
## 7.3. Умножение текущего значения
Умножение текущего значения переменной на заданную величину с помощью `*=` или умножение с помощью `/=`
```py
zz/=2;zz
-5.0
zz*=-5;zz
25.0
```
Для строк операция `*=` означает повторение текущего значения объекта заданное число раз
```py
str1='ля-'
str1*=5;str1=str1[:-1];str1
'ля-ля-ля-ля-ля'
```
## 7.4. Операции деления с округлением вниз, получения остатка от деления и возведения в степень
Деление с округлением вниз осуществляется с помощью `//=`, получение остатка от деления - `%=`, возведение в степень `**=`
```py
n1=10
n1//=3
n1
3
n1%=2;n1
1
n1=3;n1**=3;n1
27
```
## 7.5. Множественное присваивание
```py
w=v=10;w;v
10
10
n1,n2,n3=(11,-3,'all');n1,n2,n3
(11, -3, 'all')
n1,n2,n3=(11,-3,'Строка символов');n1;n2;n3
11
-3
'Строка символов'
n1,n2,n3=(11,-3,[-1,-2,-3,-4,-5]);n1;n2;n3
11
-3
[-1, -2, -3, -4, -5]
n1,n2,n3=(11,-3,{'A':1,"B":2,"C":3});n1;n2;n3
11
-3
{'A': 1, 'B': 2, 'C': 3}
```
## 8. Логические операции
Операции при создании логических выражений, дающих в результате вычисления значения True или False
## 8.1. Операции равенства, не равно, меньше, больше, меньше или равно, больше или равно
```py
w,v
(10, 10)
w==v
True
w!=v
False
w<v
False
w>v
False
w<=v
True
w>=v
True
5>8
False
(1+5j)>(-1-5j)
Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
(1+5j)>(-1-5j)
TypeError: '>' not supported between instances of 'complex' and 'complex'
```
## 8.2. Проверка наличия заданного элемента в последовательности или во множестве, проверка наличия ключа в словаре
Проверка наличия выполняется с помощью `in`
```py
mnoz1={'pen','book','pen','iPhone','table','book'}
'book'in mnoz1
True
'cap' in mnoz1
False
dic1={'Saratov':145,'Orel':56,'Vologda':45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
dct1
{'Institut': ['AVTI', 'IEE', 'IBB'], 'Depart': ['UII', 'PM', 'VMSS', 'MM'], 'gruppa': ['A-01-15', 'A-02-15']}
'UII' in dct1['Depart']
True
dct1['Depart'][1]=='MM'
False
dct1['Depart'][3]=='MM'
True
```
## 8.3. Создание больших логических выражений с использованием соединительных слов
Логическое "И", логическое "ИЛИ", логическое "НЕ"
```py
a=17;b=-6
(a>=b)and('book' in mnoz1) and not ('Pskov' in dic1)
True
not (b>a) and (12==12) or not('pen' in mnoz1)
True
(('abc'=='def') or ('123'=='1234')) and ('1' in '0123')
False
```
## Проверка ссылок переменных на один и тот же объект
Выполняется с помощью `is`
```py
w=v=10
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1
False
w1==v1
True
```
Так как переменные `w` и `v` были созданы вместе в одну строку, они имеют не только одно и то же значение, но и ссылаются на один и тот же участок памяти.
Списки `w1` и `v1` же созданы в разных строках и ссылаются на разные частки памяти, несмотря на одинаковое содержимое.
## Операции с объектами, выполняемые с помощью методов
Получение списка атрибутов объекта с помощью `dir()`
```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("с") # подсчет числа вхождений строки “с” в stroka
4
stroka.replace(' у',' автоматического у') # замена ` у` на ` автоматического у`
'Микропроцессорная система автоматического управления'
spis22=stroka.split(' ') # возвращает список подстрок, между которыми в строке стоит заданный разделитель
spis22
['Микропроцессорная', 'система', 'управления']
stroka.upper() # возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22) # возвращает строку, собранную из элементов списка
stroka3
'Микропроцессорная система управления'
stroka3.partition("с") # возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с") # возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
```
Метод `.format` используется, когда нобходимо в символьную строку подставить значения некоторых объектов
```py
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
## 9.2. Методы для работы со списками
```py
spsk=['Apple','Banana','Watermelon','Pineapple','Orange']
dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
spsk.pop(2)
'Watermelon'
spsk.append('c')
spsk
['Apple', 'Banana', 'Pineapple', 'Orange', 'c']
spsk.insert(2,'a')
spsk
['Apple', 'Banana', 'a', 'Pineapple', 'Orange', 'c']
spsk.count('a')
1
```
Операция `.pop` удаляет из списка первый найденный элемент, который соответствует указанному контексту.
Операция `append` добавляет указанный элемент в конец списка.
Операция `insert` добавляет указанный элемент перед элементом с указанным индексом.
Операция `count` подсчитывает количество указанных элементов в списке.
## 9.3. Методы кортежей
```py
kort1=('Tabolin','Berezhkov','Krishtul','Filippov','Timchenko','Volodin')
dir(kort1)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
kort1.count('Tabolin')
1
kort1.index('Berezhkov')
1
```
## 9.4. Методы словарей и множеств
```py
dict1={"A":1,"B":2,"C":3}
dir(dict1)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
dict2=dict1.copy()
dict2
{'A': 1, 'B': 2, 'C': 3}
dict1.get('A')
1
```
```py
mnoz1={'A','B','C','D'}
mnoz1.add('F')
mnoz1
{'A', 'D', 'F', 'C', 'B'}
mnoz1.remove('F')
mnoz1
{'A', 'D', 'C', 'B'}
mnoz2=mnoz1.copy()
mnoz1;mnoz2
{'A', 'D', 'C', 'B'}
{'A', 'B', 'C', 'D'}
```

@ -0,0 +1,56 @@
# Общее контрольное задание по Теме 3
Таболин Иван, А-01-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
• Преобразовать восьмеричное значение 45 в целое число.
• Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная време-ни":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
• Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округ-лением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
• Напишите и выполните единое выражение, последовательно осуществляющее следующие опера-ции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
• Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого спи-ска.
• Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
• Создать объект - символьную строку с текстом данного предложения. Из символьной строки соз-дать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA3')
int('45',8)
37
D={"усиление":23,"запаздывание":12,"постоянная времени":78}
spis_keys=list(D);spis_keys
['усиление', 'запаздывание', 'постоянная времени']
spis_znach=list(D.values());spis_znach
[23, 12, 78]
kort1=tuple(spis_keys)
kort2=tuple(spis_znach)
kort=kort1+kort2
kort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Кортеж отличается от списка тем, что его нельзя изменять
```py
((1768//24.8)%3)**2.4
5.278031643091577
(~(13&27)^14)<<2
-32
spis1=['колебат']*4
'аткол' in spis1[1]+spis1[2]
True
dir(D)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
```
```py
D.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
D.values()
dict_values([23, 12, 78])
```
С помощью `keys` можно получить ключи словаря, а с помощью `values` - значения.
```py
str1='Создать объект - символьную строку с текстом данного предложения.'
spis2=str1.split(); spis2
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения.']
spis2[spis2.index('-')]=','; spis2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения.']
spis2.remove('данного'); spis2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения.']
```

@ -0,0 +1,76 @@
# Индивидуальное контрольное задание по Теме 3
Таболин Иван, А-01-23
Вариант 4
## Задание
M1_4
1) Как установить рабочий (текущий) каталог в среде? Какую пользу можно получить от такой установки?
2) Напишите инструкции, обеспечивающие подсчет числа букв (без запятой, скобок и пробелов) в данном предложении. Отобразите результат с использованием формата по шаблону: " в предложении ХХ букв".
3) Создайте числовой объект со значением 2345. Поочередно представьте и отобразите на экране это число в двоичном, восьмеричном и шестнадцатеричном виде. Определите класс созданного объекта и отобразите список его атрибутов. Напишите инструкцию определения числа разрядов в двоичном представлении числа.
4) Создайте объект со значением {-45,78,90,-3,56}. Определите класс этого объекта. Атрибуты объекта запишите в объект-кортеж. Напишите инструкцию, позволяющую проверить наличие метода clear у этого кортежа.
5) Подсчитайте сумму элементов в объекте, созданном в п.4. Отобразите результат по шаблону: "Сумма элементов=ХХХ".
## Решение
1) Рабочий каталог устанавливается следующим образом:
```py
import os
os.chdir('')
```
Внутри кавычек указывается путь к рабочему каталогу.
Польза установки рабочего каталога заключается в том, что можно не указывать путь к файлам, находящимся в этом же каталоге.
2)
```py
str1='Напишите инструкции, обеспечивающие подсчет числа букв (без запятой, скобок и пробелов) в данном предложении.';str1
'Напишите инструкции, обеспечивающие подсчет числа букв (без запятой, скобок и пробелов) в данном предложении.'
str1=str1.replace(' ','');str1=str1.replace(',','');str1=str1.replace('.','');str1=str1.replace('(','');str1=str1.replace(')','')
str1
'Напишитеинструкцииобеспечивающиеподсчетчислабуквбеззапятойскобокипробеловвданномпредложении'
l=len(str1);l
91
out='В предложении %d букв'
print(out % l)
В предложении 91 букв
```
3)
```py
n10=2345
n2=bin(n10);n2;type(n2);dir(n2)
'0b100100101001'
<class 'str'>
['__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']
kol_razr=len(bin(n10)) - 2; kol_razr
12
n8=oct(n10);n8;type(n8);dir(n8)
'0o4451'
<class 'str'>
['__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']
n16=hex(n10);n16;type(n16);dir(n16)
'0x929'
<class 'str'>
['__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']
```
4)
```py
mnoz1={-45,78,90,-3,56}
type(mnoz1);dir(mnoz1)
<class 'set'>
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
attr=tuple(dir(mnoz1))
'clear' in dir(attr)
False
```
5)
```py
s = sum(mnoz1);s
176
out2='Сумма элементов=%g'
print(out % s)
В предложении 176 букв
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,383 @@
# Отчёт по Теме 4
Таболин Иван А-01-23
## 1. Запуск IDLE и начальная настройка
Запустил и настроил оболочку IDLE, создал файл отчёта и оформил его оглавление. Сохранил файл отчёта.
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA4')
```
## 2. Стандартные функции
Стандартные функции находятся в модуле `builtins`, доступном без импорта при запуске среды.
## 2.1. Функция round
Функция `round` округляет число с заданной точностью.
```py
help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
```
Примеры округления чисел. Тип результата зависит от аргумента функции `round`, если не указать количество значений после запятой, результат будет целым числом, в остальных случаях - вещественное число.
```py
round(123.456,1)
123.5
round(123.456,0)
123.0
round(123.456,2)
123.46
type(round(123.456,1))
<class 'float'>
type(round(123.456))
<class 'int'>
```
## 2.2. Функция range
Функция `range` создает последовательность целых чисел с заданным шагом или, по умолчанию, с шагом 1.
```py
gg=range(76,123,9);gg
range(76, 123, 9)
```
Правая граница не входит в последовательность.
Эта функция создает итерируемый объект. Чтобы увидеть полученную последовательность чисел, его надо преобразовать, например, в список.
```py
list(gg)
[76, 85, 94, 103, 112, 121]
type(gg);type(list(gg))
<class 'range'>
<class 'list'>
```
Функция `range` с одним аргументом создает последовательность от 0 до указанного числа с шагом 1.
```py
gg1=range(12);gg1
range(0, 12)
list(gg1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
```
## 2.3. Функция zip
Функция `zip` создает общий объект, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей.
```py
qq=['Tabolin','Berezhkov','Krishtul','Stepanischev'];qq
['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev']
ff=zip(gg,qq);ff
<zip object at 0x00000231E0107B40>
tuple(ff)
((76, 'Tabolin'), (85, 'Berezhkov'), (94, 'Krishtul'), (103, 'Stepanischev'))
```
Чтобы просмотреть содержимое результата функции `zip`, преобразуем его в кортеж.
В полученном кортеже количество элементов определяется меньшим из размеров аргументов функции `zip`.
```py
ff[1,1]
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
ff[1,1]
TypeError: 'zip' object is not subscriptable
```
Невозможно обратиться с указанием индекса, потому что объект является итерируемым.
## 2.4. Функция eval
Функция `eval` выполняет вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.
```py
fff=float(input('коэффициент усиления='));dan=eval('5*fff-156');dan
коэффициент усиления=33
9.0
```
## 2.5. Функция exec
Функция `exec` - чтение и выполнение объекта-аргумента функции. Этот объект должен представлять собой строку символов с совокупностью инструкций на языке Python.
```py
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
gg
221.456
```
## 2.6. Самостоятельно изучение некоторых функций
`abs` - взятие модуля числа
`pow(b, e)` - возведение числа `b` в степень `e`
`max(min)` - нахождение максимального (минимального) числа
`sum` - сложение чисел
`divmod(a,b)` - возвращает результат целочисленного деления и остаток от деления числа `a` на `b`
`len` - возвращает длину аргумента
`map` - выполняет заданную функцию с заданными значениями
```py
abs(-5.6)
5.6
pow(2,3)
8
max(1,2,3,90)
90
min(-4,4,67)
-4
sum([1,0.5,0.25,0.125,0.0625])
1.9375
divmod(5,2)
(2, 1)
len({1,2,3,5})
4
list(map(lambda x: pow(x,2), [1,2,3,4,5,6,7,8,9,10]))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```
## 3. Функции модуля math
Загрузил модуль `math` и узнал его содержание
```py
import math
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
```
Изучил функцию расчета факториала и попробовал использовать её
```py
help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
Raise a ValueError if x is negative or non-integral.
math.factorial(5)
120
```
Изучил некоторые другие функции модуля:
`sin` - синус аргумента (в радианах)
`acos` - арккосинус аргумента (в радианах)
`degrees` и `radians` - перевод из радиан в градусы и наоборот
`exp` - возведение экспоненты в степень
`log(a,b)` - логарифм `a` по основанию `b` (по умолчанию `b = e`)
`log10` - десятичный логарифм
`sqrt` - квадратный корень
`ceil` и `floor` - округление "вверх" и "вниз"
`pi` - число Пи
```py
math.sin(math.pi/2)
1.0
math.acos(1)
0.0
math.acos(0)
1.5707963267948966
math.sin(math.asin(0.987765))
0.987765
math.degrees(math.pi)
180.0
math.radians(45)
0.7853981633974483
math.exp(math.log(5))
4.999999999999999
math.log(25,5)
2.0
math.log10(1000)
3.0
math.sqrt(144)
12.0
math.ceil(1.1)
2
math.floor(5.9)
5
math.pi
3.141592653589793
```
```py
math.sin(2*math.pi/7+math.exp(0.23))
0.8334902641414562
```
## 4. Функции модуля cmath
Это совокупность функций для работы с комплексными числами
Загрузил модуль `cmath` и просмотрел содержащиеся в нем функции.
```py
import cmath
dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
```
Функции взятия корня и расчета фазы комплексного числа
```py
cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
cmath.phase(1-0.5j)
-0.4636476090008061
```
## 5. Модуль random
Это совокупность функций для выполнения операций с псевдослучайными числами и выборками.
Загрузил модуль `random` и просмотрел список содержащихся в нем функций.
```py
import random
dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
```
Изучил функцию `random.seed`. Она задает случайное начальное состояние для псевдослучайных чисел.
```py
help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
random.seed()
```
Изучил некоторые другие функции модуля:
`random` - равномерно распределенное случайное вещественное число от 0 до 1
`uniform` - равномено распределенное вещественное число из промежутка
`randint` - целое число из промежутка
`gauss` - случайное число с указанием среднего и стандартного отклонения
`choice` - выбирает случайный элемент
`shuffle` - перемешивает список
`sample(spis1,n)` - выбор n случайных элементов из spis1
`betavariate` - случайное вещественное число из бета-распределения
`gammavariate` - случайное вещественное число из гамма-распределения
```py
random.random()
0.8645955981071833
random.uniform(1,5)
3.9631799754514985
random.randint(2,10)
6
random.gauss(0,1)
-1.4256278812580692
random.choice([1,2,3,4,5])
1
spis1=[0,1,2,3,4,5]
random.shuffle(spis1);spis1
[1, 5, 0, 2, 3, 4]
random.sample(spis1,3)
[3, 1, 2]
random.betavariate(2,5)
0.49882484510318864
random.gammavariate(2,1)
2.798582174334477
```
Список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям.
```py
spis_rand=[random.uniform(1,7),random.gauss(0,1),random.betavariate(1,5),random.gammavariate(3,10)]
spis_rand
[3.139339025932303, 0.5820428632300484, 0.3368063251531593, 30.52697334997717]
```
## 6. Функции модуля time
Функции из модуля `time` предназначены для работы с календарем и со временем.
Загрузил модуль `time` и просмотрел его функции
```py
import time;dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
```
Просмотрел время с начала эпохи, а затем определил временной интервал со времени ввода предыдущей инструкции
```py
c1=time.time();c1
1760307438.705462
c2=time.time()-c1;c2
11.940115690231323
```
Функция `gmtime` возвращает объект класса `struct_time`, содержащий полную информацию о текущем времени. Обращение к компонентам получившегося объекта.
```py
dat=time.gmtime();dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=22, tm_min=19, tm_sec=3, tm_wday=6, tm_yday=285, tm_isdst=0)
dat.tm_mon
10
```
Получение "местного" времени
```py
local_time=time.localtime();local_time
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=1, tm_min=22, tm_sec=37, tm_wday=0, tm_yday=286, tm_isdst=0)
```
`asctime` - преобразование представления времени из кортежа в строку
`ctime` - преобразование времени, прошедшего с начала эпохи, в строку
`sleep` - прерывание работы программы на заданное время
`mktime` - преобазование времени из типа кортежа или struct_time в число секунд с начала эпохи
```py
c1=time.time();c1
1760309028.8968148
local_struct=time.localtime(c1);local_struct
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=1, tm_min=43, tm_sec=48, tm_wday=0, tm_yday=286, tm_isdst=0)
time_str1=time.asctime(local_struct);time_str1
'Mon Oct 13 01:43:48 2025'
time_str2=time.ctime(c1);time_str2
'Mon Oct 13 01:43:48 2025'
seconds=time.mktime(local_struct);seconds
1760309028.0
n_struct=time.localtime(seconds);n_struct
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=1, tm_min=43, tm_sec=48, tm_wday=0, tm_yday=286, tm_isdst=0)
```
## 7. Графические функции
Моудль `pylab`, входящий в состав пакета `matplotlib`, содержит ряд полезных вычислительных функций и графических возможностей.
Импортировал модуль
```py
import pylab
```
Ошибки не возникло.
Задание списков отсчётов и отображение графика
```py
x=list(range(-3,55,4))
t=list(range(15))
pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000001A4B5840910>]
pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
pylab.xlabel('время')
Text(0.5, 0, 'время')
pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
pylab.show()
```
`pylab.plot(t,x)' создает график функции `x(t)` в оперативной памяти
`pylab.title()' добавляет подись графика
`pylab.xlabel` и `pylab.ylabel` добавляет подписи к осям
`pylab.show` отображает график на экране
Получившийся график:
![График](Ris1.png)
Построение нескольких графиков на одном рисунке
```py
X1=[12,6,8,10,7]
X2=[5,7,9,11,13]
pylab.plot(X1)
pylab.plot(X2)
pylab.show()
```
Построение круговой диаграммы
```py
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000001A4B4096120>, <matplotlib.patches.Wedge object at 0x000001A4B7F38F50>, <matplotlib.patches.Wedge object at 0x000001A4B7F38B90>, <matplotlib.patches.Wedge object at 0x000001A4B58ED450>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
pylab.show()
```
![Круговая диаграмма](Ris2.png)
Функции `hist` и `bar`
```py
pylab.bar(region,naselen)
<BarContainer object of 4 artists>
pylab.show()
```
![Столбиковая диаграмма](Ris3.png)
```py
data=[2,2,2,2,3,3,4,4,4,4,4,5]
pylab.hist(data)
(array([4., 0., 0., 2., 0., 0., 5., 0., 0., 1.]), array([2. , 2.3, 2.6, 2.9, 3.2, 3.5, 3.8, 4.1, 4.4, 4.7, 5. ]), <BarContainer object of 10 artists>)
pylab.show()
```
![Гистограмма](Ris4.png)
## 8. Модуль statistics
Применение некоторых функций
```py
statistics.median(data)
3.5
statistics.mean(data)
3.25
temperature=[10,12,10,11,9,7,9,10]
air_humidity=[90,91,90,91,89,88,89,90]
statistics.correlation(temperature,air_humidity)
0.9738516810963534
```

@ -0,0 +1,42 @@
# Общее контрольное задание по Теме 4
Таболин Иван, А-01-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
- Напишите и исполните единое выражение, реализующее последовательное выполнение следую-щих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух зна-ков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
- Создайте объект класса struct_time с временными параметрами для текущего московского време-ни. Создайте строку с текущим часом и минутами.
- Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
- Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
- Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
- Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
import cmath
divmod(round(cmath.phase(0.2+0.8j),2)*20,3)
(8.0, 2.6000000000000014)
import time
t=time.localtime();t
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=11, tm_min=35, tm_sec=45, tm_wday=0, tm_yday=286, tm_isdst=0)
str_t=str(t.tm_hour)+':'+str(t.tm_min);str_t
'11:35'
ned=['Понедельнк','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье']
import random
random.sample(ned,3)
['Понедельнк', 'Суббота', 'Воскресенье']
random.choice(range(14,32,3))
17
N=round(random.gauss(15,4));N
16
alph=list('abcdefghijklmnopqrstuvwxyz')
random.sample(alph,N)
['r', 'l', 'j', 'm', 'z', 'w', 'c', 'k', 'x', 'f', 'n', 'e', 'u', 'p', 'i', 'g']
t_sec=time.mktime(time.localtime()) - time.mktime(t)
t_min=t_sec/60;t_min
12.366666666666667
t_min=round(t_min,1);t_min
12.4
```

@ -0,0 +1,19 @@
# Индивидуальное контрольное задание по Теме 4
Таболин Иван, А-01-23
Вариант 11
## Задание
Создайте список с элементами, значения которых находятся в диапазоне от 4 до 53 с шагом 7. Определите число элементов в получившемся списке. Случайно выберите один из элементов спи-ска. Рассчитайте его логарифм и отобразите в виде строки: «Результат = <значение>».
## Решение
```py
import math
import random
spis=list(range(4,53,7));spis;len(spis)
[4, 11, 18, 25, 32, 39, 46]
7
n=random.choice(spis);n
4
log_nat=math.log(n)
out='Результат = %f'
print(out % log_nat)
Результат = 1.386294
```

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

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

После

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

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

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

После

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

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

@ -0,0 +1,99 @@
# Общее контрольное задание по Теме 5
Таболин Иван, А-01-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
-Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
-Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
-Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
alphabet="abcdefghijklmnopqrstuvwxyz"
stroka="My name is Ivan. I am a student of MPEI"
for cur_ind in range(len(stroka)):
low_stroka=stroka.lower()
letter=low_stroka[cur_ind]
if not letter in alphabet:
continue
else:
print("Порядковый номер буквы ",letter," - ", alphabet.index(letter)+1)
Порядковый номер буквы m - 13
Порядковый номер буквы y - 25
Порядковый номер буквы n - 14
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
Порядковый номер буквы s - 19
Порядковый номер буквы i - 9
Порядковый номер буквы v - 22
Порядковый номер буквы a - 1
Порядковый номер буквы n - 14
Порядковый номер буквы i - 9
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы a - 1
Порядковый номер буквы s - 19
Порядковый номер буквы t - 20
Порядковый номер буквы u - 21
Порядковый номер буквы d - 4
Порядковый номер буквы e - 5
Порядковый номер буквы n - 14
Порядковый номер буквы t - 20
Порядковый номер буквы o - 15
Порядковый номер буквы f - 6
Порядковый номер буквы m - 13
Порядковый номер буквы p - 16
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
```
```py
text="Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."
text=text.replace('.','');text=text.replace(',','');text=text.replace('(','');text=text.replace(')','');text=text.replace(':','');text=text.replace('–','');text
'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
text=text.replace(' ',' ');text
'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
spis=text.split()
spis
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
search_word1='проверить'
search_word2='промах'
if search_word1 in spis:
print("Слово '",search_word1,"' найдено в списке слов.")
else:
print("Слово '",search_word1,"' не найдено в списке слов.")
Слово ' проверить ' найдено в списке слов.
if search_word2 in spis:
print("Слово '",search_word2,"' найдено в списке слов.")
else:
print("Слово '",search_word2,"' не найдено в списке слов.")
Слово ' промах ' не найдено в списке слов.
```
```py
surname_summer=['Tabolin','Berezhkov','Krishtul','Stepanischev']
sr_ball_summer=[3.35,4,3.5,3.5]
surname_winter=['Stepanischev','Tabolin','Krishtul','Berezhkov']
sr_ball_winter=[4,4.25,4.5,3]
key=1
while k:
search_surname=input("Фамилия:")
Фамилия:Tabolin
if (search_surname in surname_summer) and (search_surname in surname_winter):
print("Средний балл студента с фамилией",search_surname,"по зимней сессии -", sr_ball_winter[surname_winter.index(search_surname)], ", а по летней -",sr_ball_summer[surname_summer.index(search_surname)])
key=0
else:
print("Студент с такой фамилией не найден")
Средний балл студента с фамилией Tabolin по зимней сессии - 4.25 , а по летней - 3.35
```

@ -0,0 +1,25 @@
# Индивидуальное контрольное задание по Теме 5
Таболин Иван, А-01-23
Вариант 15
## Задание
Запросите у пользователя и введите его фамилию в виде символьной строки. Если фамилия пользователя короче 15 символов, дополните ее справа соответствующим числом пробелов. Если она длиннее 15 символов, укоротите ее до первых 15 символов. Отобразите результат на экране с заголовком «Пользователь: ».
## Решение
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA5')
surname_inp=input("Введите фамилию: ")
Введите фамилию: Tabolin
if len(surname_inp) < 15:
surname=surname_inp
while len(surname) < 15:
surname+=' '
else:
surname=surname_inp[:15]
if len(surname)==15:
print("Пользователь: ", surname)
Пользователь: Tabolin
```

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

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

После

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

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

@ -0,0 +1,351 @@
# Отчёт по Теме 6
Таболин Иван, А-01-23
## 1. Запуск среды IDLE и первоначальная настройка.
```py
import os
os.chdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6")
```
## 2. Вывод данных на экран дисплея.
## 2.1. Вывод в командной строке.
"Эхо-вывод"
```py
stroka='Автоматизированная система управления';stroka
'Автоматизированная система управления'
```
## 2.2. Вывод с использованием `print`.
Вывод сразу нескольких объектов за одно обращение к функции.
```py
fff=234.5;gg='Значение температуры = '
print(gg,fff)
Значение температуры = 234.5
```
По умолчанию выводимые объекты разделяются пробелом, но можно указать разделитель в отдельном аргументе `sep`.
```py
print(gg,fff,sep='/')
Значение температуры = /234.5
```
После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, используется аргумент `end`.
```py
print(gg,fff,sep='/',end='***');print('___')
Значение температуры = /234.5***___
```
С помощью обращения к функции `print` без указания аргументов можно перейти на новую строку.
С помощью тройных кавычек оператор вывода может располагаться на нескольких строках
```py
print("""Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
В первом случае вывод осуществляется на разных строках в соответствии с аргументом функции (аргумент один). А во втором случае у функции три аргумента, разделитель между которыми по умолчанию является пробелом.
## 2.3. Вывод с помощью `write` объекта `sys.stdout`.
```py
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
Метод `write` объекта `sys.stdout` выводит текст и возвращает количество байтов, записанных в строку.
## 3. Ввод данных с клавиатуры.
```py
psw=input('Введите пароль:')
Введите пароль:12345
psw
'12345'
```
Пример 1. Ввод с контрлем значения.
```py
while True:
znach=float(input('Задайте коэф. усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф. усиления = 15.4
Ошибка!
Задайте коэф. усиления = 21.6
```
Пример 2. Ввод и обработка выражения, подлежащего расчету
```py
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4. Ввод-вывод при работе с файлами.
Модуль `os` был импортирован в начале работы.
```py
os.getcwd()
'C:\\Users\\User\\Desktop\\python-labs\\TEMA6'
Tabolin=os.getcwd();print(Tabolin)
C:\Users\User\Desktop\python-labs\TEMA6
Tabolin
'C:\\Users\\User\\Desktop\\python-labs\\TEMA6'
```
Изучение некоторых методов модуля `os`.
```py
os.mkdir("directory1") # создание папки directory1
os.rmdir("directory1") # удаление папки directiry1
os.listdir() # вывод всех папок рабочего каталога
['.gitkeep', 'report6.md', 'Ris1.png', 'Ris2.png']
import os.path
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") # проверяет наличие указанного пути в рабочем каталоге
True
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs")
True
os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6\\report6.md")
False
```
```py
fil=os.path.abspath("oplata.dbf")
print(fil)
C:\Users\User\Desktop\python-labs\TEMA6\oplata.dbf
```
```py
fil=os.path.abspath("report6.md")
print(fil)
C:\Users\User\Desktop\python-labs\TEMA6\report6.md
```
Выделение пути доступа к файлу и имя файла из строки, полученной в результате выполнения метода `os.path.abspath`
```py
drkt=os.path.dirname(fil)
print(drkt)
C:\Users\User\Desktop\python-labs\TEMA6
name=os.path.basename(fil);print(name)
report6.md
```
```py
os.path.split(fil) # создает кортеж с двумя элементами: путь к файлу и название файла
('C:\\Users\\User\\Desktop\\python-labs\\TEMA6', 'report6.md')
type(os.path.split(fil))
<class 'tuple'>
```
```py
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA6') # проверяет .существует ли путь
True
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA5')
True
os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA10')
False
os.path.isfile(fil) # проверяет наличие файла с известным расположением
True
```
## 4.2. Общая схема работы с файлом.
Для обмена данными с файлом необходимо выполнить слдующие операции:
открыть файл с указанием его имени и цели (чтение, запись, добавление данных)
выполнить одну или несколько операций обмена данными с файлом
закрыть файл
## 4.3. Открытие файла для записи или чтения данных.
Выполняется с помощью функции `open`.
```py
fp=open(file=drkt+'\\zapis1.txt',mode='w')
```
`fp` - файловый объект, он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя файла.
В качестве аргументов указывается путь и имя, открываемого файла, а также цель использования (`w=write` - для записи).
```py
type(fp) # тип объекта
<class '_io.TextIOWrapper'>
dir(fp) # список атрибутов объекта
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
```
Некоторые значения аргумента `mode`:
w – запись с созданием нового файла или перезапись существующего файла,
w+ - чтение и запись/перезапись файла,
r – только чтение (это значение - по умолчанию),
r+ - чтение и/или запись в существующий файл,
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
a+ - то же, что и в «a», но с возможностью чтения из файла.
Для того, чтобы открыть бинарный файл требуется добавить символ `b` указанным выше значениям аргумента `mode`, например:
```py
fp1=open(drkt+'\\zapis2.bin',mode='wb+')
```
Значение символьного файла `t` указывается по умолчанию, указывать его не требуется.
## 4.4. Закрытие файла.
```py
fp.close()
fp1.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()
```
```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()
```
```py
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
```
## 4.6. Первый способ чтения информации из текстового файла.
```py
sps1=[]
fp=open('zapis3.txt')
for stroka in fp:
stroka=stroka.rstrip('\n')
stroka=stroka.replace('[','')
stroka=stroka.replace(']','')
sps1=sps1+stroka.split(',')
fp.close()
print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
```
```py
sps2=[]
for i in sps1:
sps2.append(int(i))
print(sps2)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
## 4.7. Второй способо чтения.
С помощью метода `read`.
```py
fp=open('zapis3.txt')
stroka1=fp.read(12)
stroka2=fp.read()
fp.close()
print(stroka1,stroka2,sep='\n')
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```
## 4.8. Третий способ чтения ифнормации.
С помощью методов `readline` и `readlines`.
`readline` читает одну строку, начиная с положения маркера
`readlines` читает все строки и возвращает список
```py
fp=open('zapis3.txt', 'r')
stroka1=fp.readline();print(stroka1)
[1, 2, 3, 4]
stroka2=fp.readline();print(stroka2)
[5, 6, 7, 8]
fp.close()
fp=open('zapis3.txt','r') # файл открыт заново, для того чтобы вернуть маркер в начало
vse_stroki=fp.readlines();print(vse_stroki)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
vse_stroki
```
## 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
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
print(mnoz2)
{'book', 'pen', 'iPhone', 'table'}
mnoz1 == mnoz2
True
```
```py
fp=open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
pickle.dump(sps3,fp)
fp.close()
fp=open('zapis7.2ob','rb')
obj1=pickle.load(fp)
obj2=pickle.load(fp)
fp.close()
print(obj1,obj2,sep='\n')
{'book', 'pen', 'iPhone', 'table'}
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
## 5. Перенаправление потоков ввода и вывода данных.
```py
import sys
vr_out=sys.stdout # запомнили текущий вывод в переменной
fc=open('Stroka.txt','w')
sys.stdout=fc # перенаправиои вывод в открытый файл
print('запись строки в файл') # вывели строку в файл (на экарне она не отобразилась)
sys.stdout=vr_out # вернули предыдущий вывод
print('запись строки на экран')
запись строки на экран
fc.close()
```
```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 # возвращаем предыдущий поток ввода
```
## 6. Закончили сеанс работы.
Сохранил созданный файл протокола и завершил сеанс работы с IDLE.

@ -0,0 +1,92 @@
# Общее контрольное задание по Теме 6
Таболин Иван, А-01-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представ-ленными в виде символьных строк.
2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3. Записывается кортеж в бинарный файл.
4. Записывается в этот же файл список и закрывается файл.
5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообще-ние.
7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
1.
```py
stroka=''
for i in range(125):
stroka+=str(random.randint(6,56))+' '
stroka=stroka[:-1]
kort=tuple(stroka.split(' '));print(kort, len(kort))
('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37') 125
```
2.
```py
surnames=['Tabolin','Berezhkov','Krishtul','Stepanischev','Filippov']
print(surnames)
['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov']
```
3.
```py
import pickle
fb=open('taskb.bin','wb')
pickle.dump(kort, fb)
```
4.
```py
pickle.dump(surnames,fb)
fb.close()
```
5.
```py
fb=open('taskb.bin','rb')
inp1=pickle.load(fb)
inp2=pickle.load(fb)
print(inp1,inp2,sep='\n')
('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37')
['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov']
fb.close()
```
6.
```py
if (inp1==kort) and (inp2==surnames):
print('Вывод в файл и последующее чтение из файла выполнено корректно.')
else:
print('Ошибка!')
Вывод в файл и последующее чтение из файла выполнено корректно.
```
7.
```py
for i in range(125//5):
exec('spis'+str(i)+'='+str(list(inp1[i:i+5])))
for i in range(125//5):
exec('print(spis'+str(i)+')')
['15', '8', '50', '41', '20']
['8', '50', '41', '20', '49']
['50', '41', '20', '49', '43']
['41', '20', '49', '43', '34']
['20', '49', '43', '34', '22']
['49', '43', '34', '22', '11']
['43', '34', '22', '11', '42']
['34', '22', '11', '42', '34']
['22', '11', '42', '34', '15']
['11', '42', '34', '15', '23']
['42', '34', '15', '23', '25']
['34', '15', '23', '25', '42']
['15', '23', '25', '42', '9']
['23', '25', '42', '9', '10']
['25', '42', '9', '10', '26']
['42', '9', '10', '26', '28']
['9', '10', '26', '28', '26']
['10', '26', '28', '26', '7']
['26', '28', '26', '7', '30']
['28', '26', '7', '30', '50']
['26', '7', '30', '50', '19']
['7', '30', '50', '19', '23']
['30', '50', '19', '23', '9']
['50', '19', '23', '9', '39']
['19', '23', '9', '39', '19']
```

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

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

@ -0,0 +1,92 @@
# Тест по модулю 2
Таболин Иван, А-01-23
Вариант 1
## Задание
1) Запросите у пользователя и введите имя и число элементов кортежа (от 10 до 100). Проверьте введенное число элементов на соответствие заданному диапазону значений и, при необходимости, повторите ввод.
2) Создайте кортеж с заданными при вводе именем и числом элементов. Элементами должны быть случайные целые числа в диапазоне от 101 до 201.
3) Запишите кортеж в текстовый файл с некоторым именем по одному элементу на строке.
4) Удалите из памяти все созданные объекты-переменные.
5) Прочитайте из файла элементы, подсчитайте их сумму и отобразите на экране по шаблону: "Сумма элементов кортежа = <рассчитанное значение>".
## Решение
1)
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA6')
name=input('Введите имя кортежа: ')
Введите имя кортежа: kort10
N=0
while (N<10) or (N>100):
N=int(input('Введите количество элементов кортежа: '))
Введите количество элементов кортежа: 3
Введите количество элементов кортежа: 15
```
2)
```py
import random as rn
exec(name+'=()')
kort10
()
type(kort10)
<class 'tuple'>
for i in range(N):
kort10+=(rn.randint(101,201),)
kort10
(194, 102, 105, 152, 171, 135, 165, 168, 192, 168, 147, 185, 166, 102, 181)
len(kort10)
15
```
3)
```py
f_out=open('test_output.txt','w')
for i in range(N):
f_out.write(str(kort10[i])+'\n')
f_out.close()
```
![Содержимое файла test_output.txt](Ris1.png)
Содержимое файла test_output.txt
4)
```py
dir()
['N', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f_out', 'i', 'kort10', 'n_out', 'name', 'os', 'random', 'rn']
del f_out, i, kort10, n_out, name, N
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'random', 'rn']
```
5)
```py
import sys
tmp_in=sys.stdin
f_in=open('test_output.txt','r')
sys.stdin
<_io.TextIOWrapper name='test_output.txt' mode='r' encoding='cp1251'>
kort20=()
while True:
try:
kort20+=(input(),)
except EOFError:
break
kort20
('105', '152', '171', '135', '165', '168', '192', '168', '147', '185', '166', '102', '181')
summ=0
for x in kort20:
summ+=int(x)
sys.stdin=tmp_in
f_in.close()
print('Сумма элементов кортежа =', summ)
Сумма элементов кортежа = 2037
```

@ -0,0 +1,15 @@
194
102
105
152
171
135
165
168
192
168
147
185
166
102
181

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

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

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

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

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

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

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,561 @@
# Отчёт по Теме 7
Таболин Иван, А-01-23
## 1. Запуск и настройка.
Запустил среду IDLE и выполнил настрйоку рабочего каталога.
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA7')
```
## 2. Создание пользовательской функции.
Создание функции предполагает выполнение трех операций: формирование функции, ее сохранение и использование.
## 2.1. Пример 1.
Функция без аргументов.
```py
def uspeh():
"""Подтверждение успеха операции"""
print('Выполнено успешно')
uspeh()
Выполнено успешно
```
Тип объекта - `function`
```py
type(uspeh)
<class 'function'>
```
```py
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh']
```
```py
help(uspeh)
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
```
В качестве помощи по созданной функции выводится сообщение с комментарием, который мы оставили при создании функции.
## 2.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)
uspeh()
```
```py
sravnenie(7,8)
7 меньше 8
Выполнено успешно
sravnenie(10,10)
10 равно 10
Выполнено успешно
sravnenie(10,5)
10 больше 5
Выполнено успешно
sravnenie('a','bcd')
a меньше bcd
Выполнено успешно
sravnenie('abcdefg','h')
abcdefg меньше h
Выполнено успешно
sravnenie('abc','abc')
abc равно abc
Выполнено успешно
```
## 2.3. Пример 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(v,'/(1+e^(-',w,')) = ', round(z,3))
1 /(1+e^(- 0.7 )) = 0.668
```
## 2.4. Пример 4.
Сложение для разных типов аргументов.
```py
def slozh(a1,a2,a3,a4):
"""Сложение значений четырех аргументов"""
return a1+a2+a3+a4
slozh(1,2,3,4)
10
slozh('1','2','3','4')
'1234'
b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,1]
q=slozh(b1,b2,b3,b4);print(q)
[1, 2, -1, -2, 0, 2, -1, 1]
```
```py
k1=(1,2,3);k2=(4,5,6)
k3=(7,8,9);k4=(10,11,12)
slozh(k1,k2,k3,k4)
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
sl1={'A':1,'B':2};sl2={'C':3,'D':4};sl3={'E':5,'F':6};sl4={'G':7,'H':8}
slozh(sl1,sl2,sl3,sl4)
Traceback (most recent call last):
File "<pyshell#64>", line 1, in <module>
slozh(sl1,sl2,sl3,sl4)
File "<pyshell#45>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
mn1={1,2,3};mn2={3,4};mn3={5,6};mn4={7,8}
slozh(mn1,mn2,mn3,mn4)
Traceback (most recent call last):
File "<pyshell#67>", line 1, in <module>
slozh(mn1,mn2,mn3,mn4)
File "<pyshell#45>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
```
## 2.5. Четвертый пример.
Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал у:
```py
def inerz(x,T,ypred):
"""Модель устройства с памятью:
x - текущее значение вх. сигнала
T - постоянная времени
ypred - предыдущее значение выхода устройства"""
y=(x+T*ypred)/(T+1)
return y
sps=[0]+[1]*100
spsy=[]
TT=20
yy=0
for xx in sps:
yy=inerz(xx,TT,yy)
spsy.append(yy)
import matplotlib.pyplot as plt
plt.plot(spsy)
[<matplotlib.lines.Line2D object at 0x000001AFB35E9590>]
plt.grid(True)
plt.xlabel('t')
Text(0.5, 0, 't')
plt.ylabel('Y(t)')
Text(0, 0.5, 'Y(t)')
plt.show()
```
![Полученный график выходного сигнала Y(t)](Ris1.png)
## 3. Функции как объекты.
## 3.1. Получение списка атрибутов объекта-функции.
```py
dir(inerz)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
inerz.__doc__
'Модель устройства с памятью:\nx - текущее значение вх. сигнала\nT - постоянная времени\nypred - предыдущее значение выхода устройства'
help(inerz)
Help on function inerz in module __main__:
inerz(x, T, ypred)
Модель устройства с памятью:
x - текущее значение вх. сигнала
T - постоянная времени
ypred - предыдущее значение выхода устройства
```
## 3.1. Сохранение ссылки на объект-функцию в другой переменной.
```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
```
Функция `func()` определена вторым определением, так как `typ_fun=8 != 1`.
## 4. Аргументы функции.
## 4.1. Использование функции в качестве аргумента другой функции.
Это делает код более гибким, не привязывает функцию к конкретной операции, а позволяет выполнять разные операции внутри функции.
```py
def fun_arg(fff,a,b,c):
"""fff-имя функции, используемой
в качестве аргумента функции fun_arg"""
return a+fff(c,b)
zz=fun_arg(logistfun,-3,1,0.7)
print(zz)
-2.3318122278318336
```
## 4.2. Обязательные и необязательные аргументы.
```py
def logistfun(a,b=1):
"""Вычисление логистической функции"""
import math
return b/(1+math.exp(-a))
logistfun(0.7)
0.6681877721681662
logistfun(0.7,2)
1.3363755443363323
```
## 4.3. Обращение к функции с произвольным расположением аргументов.
```py
logistfun(b=0.5, a=0.8)
0.34498724056380625
```
## 4.4. Значения аргументов функции, содержатся в списке или кортеже.
```py
b1234=[b1,b2,b3,b4]
qq=slozh(*b1234)
print(qq)
[1, 2, -1, -2, 0, 2, -1, 1]
```
Функция `slozh` ожидает четыре аргумента, поэтому нам надо "распаковать" список на четыре переменные
## 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
a=90
def func3(b):
b=5*b+67
func3(a);print(a)
90
```
Число - неизменяемый тип объекта
```py
sps1=[1,2,3,4]
def func2(sps):
sps1[1]=99
func2(sps1)
print(sps1)
[1, 99, 3, 4]
```
Список - измеяемый тип объекта
```py
kort=(1,2,3,4)
func2(kort);print(kort)
(1, 2, 3, 4)
```
Кортеж - неизменяемый тип объекта
## 5. Специальный типы пользовательских функций.
## 5.1. Анонимные функции.
```py
# Анонимная функция без аргументов
anfun1=lambda: 1.5+math.log10(17.23)
anfun1()
2.7362852774480286
# Анонимная функция с 2 аргументами
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
```
```py
alp=func5(7,3)
print(alp.__next__())
1
print(alp.__next__())
4
print(alp.__next__())
7
print(alp.__next__())
Traceback (most recent call last):
File "<pyshell#192>", line 1, in <module>
print(alp.__next__())
StopIteration
```
Функция отработала последнюю итерацию, поэтому дальнейшее выполнение невозможно.
Функция-генератор используется один раз.
## 6. Локализация объектов в функции.
## 6.1. Прмеры.
Пример 1.
```py
glb=10
def func7(arg):
loc1=15
glb=8
return loc1*arg
res=func7(glb);res
150
```
При получении результата использовались значения локального объекта `loc1` и переданного глобального объекта `glb`
`10*15=150`
Значение глобального объекта `glb` не изменилось.
Пример 2.
Ошибка в использовании локального объекта.
```py
def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
res=func8(glb)
Traceback (most recent call last):
File "<pyshell#209>", line 1, in <module>
res=func8(glb)
File "<pyshell#208>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
```
Локальная переменная `glb` инициализирована позже попытки вывести её.
Пример 3.
```py
glb=11
def func7(arg):
loc1=15
global glb
print(glb)
glb=8
return loc1*arg
res=func7(glb);print(res)
11
165
glb
8
```
При расчете возвращаемого значения использовано значение переменной `glb`, которое было передано в качестве аргумента функции `arg`. Однако само значение глобальной переменной `glb` изменилось, так как мы локализировали переменную дескриптором `global`.
## 6.2. Выявление локализации объекта.
```py
globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'random', 'rn', 'f_in', 'sys', 'tmp_in', 'kort20', 'summ', 'x', 'fun_arg', 'logistfun', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'random', 'rn', 'f_in', 'sys', 'tmp_in', 'kort20', 'summ', 'x', 'fun_arg', 'logistfun', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
globals().keys() == locals().keys()
True
```
Различий в этих перечнях нет, так как мы работаем в модуле `main`.
```py
def func8(arg):
loc1=15
glb=8
print(globals().keys())
print(locals().keys())
return loc1*arg
hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'random', 'rn', 'f_in', 'sys', 'tmp_in', 'kort20', 'summ', 'x', 'fun_arg', 'logistfun', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
'glb' in globals().keys()
True
```
Перечень `locals().keys()` показывает локальные переменые той функции, в которой он вызван, то есть локальные переменные функции `func8`.
## 6.3. Локализация объектов при использовании вложенных функций.
```py
def func9(arg2,arg3):
def func9_1(arg1):
loc1=15
glb1=8
print('glob_func9_1:',globals().keys())
print('locl_func9_1:',locals().keys())
return loc1*arg1
loc1=5
glb=func9_1(loc1)
print('loc_func9:',locals().keys())
print('glob_func9:', globals().keys())
return arg2+arg3*glb
kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'random', 'rn', 'f_in', 'sys', 'tmp_in', 'kort20', 'summ', 'x', 'fun_arg', 'logistfun', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'random', 'rn', 'f_in', 'sys', 'tmp_in', 'kort20', 'summ', 'x', 'fun_arg', 'logistfun', 'zz', 'b1', 'b2', 'b3', 'b4', 'b1234', 'slozh', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
kk
85
```
## 6.4. Моделирование системы.
Система состоит из последовательного соединения реального двигателя, охваченного ООС с тахогенератором в ней, и нелинейного звена типа "зона нечувствительности", при подаче на неё синусоидального входного сигнала.
```py
znach=input('k1, T, k2, Xm, A, F, N = ').split(',')
k1, T, k2, Xm, A, F, N = 2,0.5,3,20,5,10,100
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])
k1,T,k2,Xm,A,F,N
(2.0, 0.5, 3.0, 20.0, 5.0, 10.0, 100.0)
```
```py
import math
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
import matplotlib.pyplot as plt
plt.plot(vhod)
[<matplotlib.lines.Line2D object at 0x000001DEABA54CD0>]
plt.xlabel('t')
Text(0.5, 0, 't')
plt.ylabel('X(t)')
Text(0, 0.5, 'X(t)')
plt.grid(True)
plt.title('Входной сигнал')
Text(0.5, 1.0, 'Входной сигнал')
plt.show()
```
![Входной сигнал](Ris2.png)
Входной сигнал
Создание моделей компонентов системы.
```py
def realdvig(xtt,kk1,TT,yti1,ytin1):
"""Реальный двигатель
xtt - входной сигнал
kk1 - коэффициент усиления
TT - постоянная времени"""
yp=kk1*xtt # усилитель
yti1=yp+yti1 # интегратор
ytin1=(yti1+TT*ytin1)/(TT+1)
return [yti1,ytin1]
def tahogen(xtt,kk2,yti2):
"""Тахогенератор
xtt - входной сигнал
kk2 - коэф. усиления"""
yp=kk2*xtt # усилитель
yti2=yp+yti2 # интегратор
return yti2
def nechus(xtt,gran):
"""Зона нечувствительности
xtt - входной сигнал
gran - границы зоны"""
if xtt<gran and xtt>(-gran):
ytt=0
elif xtt>=gran:
ytt=xtt-gran
elif xtt<=(-gran):
ytt=xtt+gran
return ytt
```
```py
yi1=0;yin1=0;yi2=0
vyhod=[]
for xt in vhod:
xt1=xt-yi2 # ООС
[yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
yi2=tahogen(yin1,k2,yi2)
yt=nechus(yin1,Xm)
vyhod.append(yt)
print('y=',vyhod)
y= [0, 0, 0, 0, 0, 0, 0, 0, -10.974148811740466, 31.23160757720293, -8.503430739117402, -24.286442652106217, 120.81546660445824, -150.3828501669592, 12.095016626781707, 253.49964308649874, -550.0372845930702, 482.5059329598621, 183.71880041751297, -1344.6318420666303, 2086.275615417099, -1144.2481204296605, -2002.5012972412562, 5993.340901257227, -7021.903855263193, 1016.1859225809073, 11990.058286540936, -24073.46344205082, 20464.40390004343, 10000.873807285976, -58849.36542455066, 88226.20589713757, -45598.687710122824, -90648.98545320811, 256539.10209617077, -291673.6755433273, 28310.708692509466, 524435.5569749932, -1018521.6679602802, 832902.8430147418, 484167.14580257685, -2534673.285447276, 3695133.6022211737, -1772684.8126889702, -4048961.4995111916, 10934504.469172316, -12066790.472233215, 537460.4167893449, 22860371.582130555, -43018701.06713582, 33776359.86584025, 23024016.448104482, -109006911.79047805, 154563598.85923606, -68253115.38703698, -180186433.63572612, 465587164.0724488, -498418911.61202526, -5342551.979281266, 994798216.431469, -1815232394.0390863, 1365609422.6048367, 1080971013.622714, -4682711578.392281, 6458104066.395749, -2598663786.050113, -7993304317.292057, 19805981578.613724, -20554016684.21948, -1417709580.6659634, 43221537691.59888, -76524385729.04279, 55032176844.606346, 50227527357.92703, -200940968969.65836, 269533128283.83582, -97577756381.57198, -353572609482.7477, 841761652588.4781, -846174323954.32, -110503084200.59412, 1875049564511.6016, -3222968908487.364, 2209697878532.739, 2313801571412.487, -8613488719461.749, 11236044539575.766, -3599659176361.6226, -15598471845164.156, 35742233215790.65, -34772822009814.105, -6815175958331.712, 81227407685562.34, -135611326881975.75, 88368140007882.67, 105814447351992.02, -368841421227173.7, 467834336461247.94, -129716709606099.69, -686476518500955.9]
```
```py
plt.plot(vyhod)
[<matplotlib.lines.Line2D object at 0x000001DEAF333250>]
plt.grid(True)
plt.xlabel('t')
Text(0.5, 0, 't')
plt.ylabel('Y(t)')
Text(0, 0.5, 'Y(t)')
plt.title('Выходной сигнал')
Text(0.5, 1.0, 'Выходной сигнал')
plt.show()
```
![Выходной сигнал](Ris2.png)
Выходной сигнал
## 7. Завершил сеанс работы со средой IDLE.

@ -0,0 +1,92 @@
# Общее контрольное задание по Теме 7
Таболин Иван, А-01-23
# Задание
1) Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
2) Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3) Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y ли-нейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
# Решение
1)
```py
def zader(x,T):
"""Функция задержки сигнала
x - исходный сигнал
T - задержка"""
y=[0]*T+x
return y
x=[10,12,14,16]
zader(x,2)
[0, 0, 10, 12, 14, 16]
```
2)
```py
def mkhist(sel,bins):
if bins <= 0:
return []
sel.sort()
shag=(max(sel)-min(sel))/bins
kol=[]
a=min(sel)
b=a+shag
for i in range(bins-1):
k=0
for n in sel:
if (n>=a) and (n<b):
k+=1
kol.append(k)
a+=shag
b+=shag
k=0
for n in sel:
if (n>=a) and (n<=b):
k+=1
kol.append(k)
return kol
spis
[1, 2, 3, 4, 5, 6, 7, 8]
mkhist(spis,3)
[3, 2, 3]
for i in range(5):
spis=[]
a=rn.randint(1, 10)
b=rn.randint(1, 10)
for i in range(100):
spis.append(rn.betavariate(a,a))
mkhist(spis,4)
[33, 19, 23, 24]
[13, 32, 35, 20]
[14, 37, 37, 12]
[18, 32, 38, 12]
[12, 39, 36, 12]
for i in range(5):
spis=[]
a=rn.randint(1, 10)
b=rn.randint(1, 10)
for i in range(100):
spis.append(rn.betavariate(a,b))
mkhist(spis,4)
[26, 42, 24, 8]
[64, 25, 10, 1]
[8, 25, 36, 30]
[18, 24, 34, 24]
[34, 41, 22, 3]
a,b
(6, 9)
```
3)
```py
anon_linregr=lambda b1,b2,x: b1+b2*x
res=anon_linregr(-3,2,6);res
9
```

@ -0,0 +1,33 @@
# Индивидуальное контрольное задание по Теме 7
Таболин Иван, А-01-23
Вариант 3
## Задание
Разработайте функцию с 4 аргументами, создающую последовательность отсчетов случайного, равномерно распределенного сигнала типа белого шума с заданными параметрами: границы диа-пазона изменения, число отсчетов (аргументы функции). Сигнал должен быть записан построчно, по 3 элемента в строке с разделителем - запятая в текстовый файл с заданным именем (4-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
## Решение
```py
def bel_shum(a_min,a_max,k,file_name):
"""Генератор белого шума
a_min,a_max - границы диапазона изменения сигнала
k - количество отсчетов
file_name - имя файла для вывода сигнала"""
import random as rn
signal=[]
for i in range(k):
a=a_min+(a_max-a_min)*rn.random()
signal.append(a)
f=open(file_name,'w')
i=0
while i<len(signal):
s=signal[i:i+3]
out=','.join(str(n) for n in s)
f.write(out+'\n')
i+=3
f.close()
return signal
bel_shum(0,1,20,'test1.txt')
[0.6121303296306144, 0.6412641200633369, 0.11685946114651469, 0.45963383247709144, 0.1396119953149234, 0.9774252470424362, 0.8214083524197986, 0.3712680592177061, 0.7679917358701837, 0.10872526758897305, 0.7277044250338426, 0.5584257054824748, 0.903225844909946, 0.7162949601167093, 0.37602800658438673, 0.7390155718732525, 0.3665326143981362, 0.8660301445143191, 0.8605103393087415, 0.8265277945070508]
bel_shum(1,5,35,'test2.txt')
[2.044262095730901, 2.9460771147067106, 3.4488422163718373, 4.501325827244864, 3.0908516348657415, 2.2486766582618416, 1.8541368543777854, 4.671136588954065, 2.0377889808927616, 2.907799881297287, 4.185430806328185, 1.3106392123128479, 1.4406582567850679, 3.066287739535445, 2.050387519395883, 2.769661281833263, 1.9383764782362034, 1.1036168746115131, 1.4156131808765569, 2.79017367419333, 3.8290609294438225, 4.342915598480614, 3.371713892072644, 2.866840758354854, 3.229631214986825, 3.671877264456392, 2.258566569052188, 3.821614716506629, 2.128574963495442, 1.8828706347794855, 2.279448934161789, 3.8514469999377954, 4.172031075019252, 3.8783957015255783, 1.2633531800325009]
```

@ -0,0 +1,7 @@
0.6121303296306144,0.6412641200633369,0.11685946114651469
0.45963383247709144,0.1396119953149234,0.9774252470424362
0.8214083524197986,0.3712680592177061,0.7679917358701837
0.10872526758897305,0.7277044250338426,0.5584257054824748
0.903225844909946,0.7162949601167093,0.37602800658438673
0.7390155718732525,0.3665326143981362,0.8660301445143191
0.8605103393087415,0.8265277945070508

@ -0,0 +1,12 @@
2.044262095730901,2.9460771147067106,3.4488422163718373
4.501325827244864,3.0908516348657415,2.2486766582618416
1.8541368543777854,4.671136588954065,2.0377889808927616
2.907799881297287,4.185430806328185,1.3106392123128479
1.4406582567850679,3.066287739535445,2.050387519395883
2.769661281833263,1.9383764782362034,1.1036168746115131
1.4156131808765569,2.79017367419333,3.8290609294438225
4.342915598480614,3.371713892072644,2.866840758354854
3.229631214986825,3.671877264456392,2.258566569052188
3.821614716506629,2.128574963495442,1.8828706347794855
2.279448934161789,3.8514469999377954,4.172031075019252
3.8783957015255783,1.2633531800325009

@ -0,0 +1,4 @@
# MM0
# Запуск и вывод вых сигнала
import MM2
print('y=',MM2.vyhod)

@ -0,0 +1,31 @@
# MM1
# Функции узлов САУ
def realdvig(xtt,kk1,TT,yti1,ytin1):
"""Реальный двигатель
xtt - входной сигнал
kk1 - коэффициент усиления
TT - постоянная времени"""
yp=kk1*xtt # усилитель
yti1=yp+yti1 # интегратор
ytin1=(yti1+TT*ytin1)/(TT+1)
return [yti1,ytin1]
def tahogen(xtt,kk2,yti2):
"""Тахогенератор
xtt - входной сигнал
kk2 - коэф. усиления"""
yp=kk2*xtt # усилитель
yti2=yp+yti2 # интегратор
return yti2
def nechus(xtt,gran):
"""Зона нечувствительности
xtt - входной сигнал
gran - границы зоны"""
if xtt<gran and xtt>(-gran):
ytt=0
elif xtt>=gran:
ytt=xtt-gran
elif xtt<=(-gran):
ytt=xtt+gran
return ytt

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

@ -1,9 +1,12 @@
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 = str(int(Mod1.perm1)*3)
print('3*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)

@ -0,0 +1,10 @@
# Mod1
# Функция
def preob(x, A):
max_i=int(A*x)
for i in range(1, max_i+1):
if i*A<=x and x<(i+1)*A:
return i
elif -(i+1)*A>=x and x>(-i)*A:
return -i
return 0

@ -0,0 +1,10 @@
# Модуль 1 ОКЗ
def r_file(name):
"""Чтение данных из файла
name - имя файла"""
inp_spis=[]
with open(name) as f:
for line in f:
for x in line.split():
inp_spis.append(float(x))
return inp_spis

@ -0,0 +1,16 @@
# Mod2
# Генерация входных данных и применение функции
import random as rn
from Mod1_IKZ import preob
x=[]
for i in range(100):
x.append(rn.triangular(-5,25))
y=[]
for i in range(len(x)):
y.append(preob(x[i],1))
filename=input('Введите имя файла:')
file=open(filename,'w')
for i in range(len(x)):
s=str(x[i])+' '+str(y[i]) + '\n'
file.write(s)
file.close()

@ -0,0 +1,27 @@
# Модуль 2
# Расчет корреляции
def corr(x,y):
if not x or not y:
# Ошибка! Отсутсвует аргумент.
return 22
import math
sum1=sum2=sum3=0
n=min(len(x),len(y))
if n<2:
# Ошибка! Малая выборка.
return 33
x=x[:n]
y=y[:n]
x_mean=sum(x)/n
y_mean=sum(y)/n
for i in range(n):
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
sum2+=(x[i]-x_mean)**2
sum3+=(y[i]-y_mean)**2
if sum2!=0 and sum3!=0:
znam=math.sqrt(sum2*sum3)
else:
# Ошибка! Деление на ноль.
return 44
r=sum1/znam
return r

@ -0,0 +1,22 @@
# Модуль 3
from Mod1_okz import r_file
from Mod2_okz import corr
file1=input("Введите имя первого файла: ")
file2=input("Введите имя второго файла: ")
spis1=r_file(file1)
spis2=r_file(file2)
res=corr(spis1,spis2)
if not(res in [22,33,44]):
res=round(res,3)
if res == 22:
print("Ошибка! Пустой файл.")
elif res == 33:
print("Ошибка! Малая выборка.")
elif res == 44:
print("Ошибка! Нулевая дисперсия.")
elif (res >= -1) and (res <= 1):
print("r =", res)
else:
print("Ошибка! Коэф. корр. неверный.")

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

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

После

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

@ -0,0 +1,272 @@
# Отчёт по Теме 8
Таболин Иван, А-01-23
## 1. Запуск и первоначальная настройка.
```py
import os,sys,importlib
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA8')
os.getcwd()
'C:\\Users\\User\\Desktop\\python-labs\\TEMA8'
```
## 2. Создание и использование модулей.
Модуль - любая часть программного кода, записанная в отдельном файле.
В языке Python модули являются объектами класса `module`.
## 2.1. Запуск модуля на выполнение путем его импорта.
Создан файл Mod1.py c программой:
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
```
Импорт модуля
```py
import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
type(Mod1)
<class 'module'>
dir(type)
['__abstractmethods__', '__annotations__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__or__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__text_signature__', '__type_params__', '__weakrefoffset__', 'mro']
Mod1.perm1
'5'
```
Повторное выполнение модуля
```py
import Mod1
# запуска модуля не произошло
importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
Mod1.perm1
'3'
```
## 2.2. Занесение импортированных модулей в словарь.
```py
print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
```
```py
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
import Mod1
Mod1:Введите значение = 35
Mod1:Значение perm1= 35
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
```
## 2.3. Запуск модуля на выполнение с помощью функции.
Выполняется с помощью функции `exec()`
```py
exec(open('Mod1.py').read())
Mod1:Введите значение = 6
Mod1:Значение perm1= 6
Mod1.perm1
'35'
exec(open('Mod1.py').read())
Mod1:Введите значение = 44
Mod1:Значение perm1= 44
Mod1.perm1
'35'
exec(open('Mod1.py').read())
Mod1:Введите значение = 12
Mod1:Значение perm1= 12
Mod1.perm1
'35'
```
`exec()` пытается прочитать файл в кодировке `UTF-8`.
## 2.4. Использование инструкции `from ... import ...`.
Пример 1.
```py
from Mod1 import perm1
print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
Mod1.perm1
'35'
```
Пример 2.
```py
from Mod2 import beta
g=beta(2)
****BETA****
g
535.4916555247646
dir()
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'g', 'importlib', 'os', 'perm1', 'sys']
alpha()
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
from Mod2 import alpha as al
al()
****ALPHA****
Значение t=55
'55'
del al,beta
from Mod2 import alpha as al, beta as bt
del al,bt
from Mod2 import *
tt=alpha()
****ALPHA****
Значение t=0.12
uu=beta(float(tt))
****BETA****
uu
1.4578913609506803
```
## 3. Создание многомодульных программ.
## 3.1. Пример простой многомодульной программы.
```py
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
sys.modules.pop('Mod2')
<module 'Mod2' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod2.py'>
```
```py
import Mod0
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
perm1= 4
****ALPHA****
Значение t=5
tt= 5
****BETA****
qq= 6635623.99934113
Mod0.tt,Mod0.qq,Mod0.Mod1.perm1
('5', 6635623.99934113, '4')
```
## 3.2. Пример.
```py
import MM0
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.995050282999456, 7.337875156918653, 10.174309420549172, 10.298227259219182, ...
```
```py
import matplotlib.pyplot as plt
y=MM0.MM2.vyhod
plt.plot(y)
[<matplotlib.lines.Line2D object at 0x0000015D4E13D950>]
plt.show()
```
![Выходной сигнал](Ris1.png)
Выходной сигнал
## 3.3. Области действия объектов в модулях.
Новое содержание модуля `Mod2.py`:
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
beta(int(t))
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)
```
Вызов модуля:
```py
from Mod2 import *
alpha()
****ALPHA****
Значение t=5
****BETA****
'5'
```
Новое содержимое модуля `Mod2`(вызов `beta` из `alpha`):
```py
from Mod2 import *
beta(6)
****BETA****
****ALPHA****
Значение t=5
153552935.39544657
```
Другой пример - отображение на экране в модуле `Mod0` значения объектов `t` и `expi`
Новое содержимое модуля `Mod0`
```py
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print(t,expi)
```
Запуск
```py
import Mod0
perm1= 4
****ALPHA****
Значение t=7
tt= 7
****BETA****
****ALPHA****
Значение t=6
qq= 3553321280.847041
Traceback (most recent call last):
File "<pyshell#108>", line 1, in <module>
import Mod0
File "C:\Users\User\Desktop\python-labs\TEMA8\Mod0.py", line 10, in <module>
print(t,expi)
NameError: name 't' is not defined
```
Ещё один пример - увеличение в 3 раза значения объекта `perm1` в модуле `Mod0`
Новое содержимое модуля `Mod0`:
```py
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 = int(Mod1.perm1)*3
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
```
```py
import Mod0
perm1= 12
3*perm1= 36
****ALPHA****
Значение t=9
tt= 9
****BETA****
****ALPHA****
Значение t=90
qq= 1902773895292.1592
```
Увеличение в 2 раза объектов `perm`,`tt`,`qq` в командной строке.
```py
import Mod0
perm1= 36
3*perm1= 108
****ALPHA****
Значение t=2
tt= 2
****BETA****
****ALPHA****
Значение t=2
qq= 535.4916555247646
Mod0.Mod1.perm1=int(Mod0.Mod1.perm1)*2
Mod0.Mod1.perm1
'216'
Mod0.tt=int(Mod0.Mod1.perm1)*2
Mod0.tt
432
Mod0.qq=Mod0.qq*2
Mod0.qq
1070.9833110495292
```

@ -0,0 +1,3 @@
3 3 3 3 3 3 3
3 3 3 3 3
3 3

@ -0,0 +1,3 @@
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

@ -0,0 +1,3 @@
1.1 2.2 3.1 4.3 5.2
6.1 7.3 8.2 9.1 10.3
11.2 12.1 13.3 14.2 15.1

@ -0,0 +1,2 @@
15 14 13 12 11
10 9 8 7 6

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

@ -0,0 +1,108 @@
# Общее контрольное задание по Теме 8
Таболин Иван, А-01-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, два-жды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вы-зывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отобража-ет рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
Первый модуль `Mod1_okz.py`
```py
# Модуль 1 ОКЗ
def r_file(name):
"""Чтение данных из файла
name - имя файла"""
inp_spis=[]
with open(name) as f:
for line in f:
for x in line.split():
inp_spis.append(float(x))
return inp_spis
```
Второй модуль `Mod2_okz.py`
```py
# Модуль 2
# Расчет корреляции
def corr(x,y):
if not x or not y:
# Ошибка! Отсутствует аргумент.
return 22
import math
sum1=sum2=sum3=0
n=min(len(x),len(y))
if n<2:
# Ошибка! Малая выборка.
return 33
x=x[:n]
y=y[:n]
x_mean=sum(x)/n
y_mean=sum(y)/n
for i in range(n):
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
sum2+=(x[i]-x_mean)**2
sum3+=(y[i]-y_mean)**2
if sum2!=0 and sum3!=0:
znam=math.sqrt(sum2*sum3)
else:
# Ошибка! Деление на ноль.
return 44
r=sum1/znam
return r
```
Третий модуль 'Mod3_okz.py'
```py
# Модуль 3
from Mod1_okz import r_file
from Mod2_okz import corr
file1=input("Введите имя первого файла: ")
file2=input("Введите имя второго файла: ")
spis1=r_file(file1)
spis2=r_file(file2)
res=corr(spis1,spis2)
if not(res in [22,33,44]):
res=round(res,3)
if res == 22:
print("Ошибка! Пустой файл.")
elif res == 33:
print("Ошибка! Малая выборка.")
elif res == 44:
print("Ошибка! Нулевая дисперсия.")
elif (res >= -1) and (res <= 1):
print("r =", res)
else:
print("Ошибка! Коэф. корр. неверный.")
```
Тестирование
```py
import Mod3_okz
Введите имя первого файла: selection1.txt
Введите имя второго файла: selection2.txt
r = 1.0
sys.modules.pop('Mod3_okz')
<module 'Mod3_okz' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod3_okz.py'>
import Mod3_okz
Введите имя первого файла: selection3.txt
Введите имя второго файла: selection4.txt
r = -0.235
```
Примеры ошибок
```py
import Mod3_okz
Введите имя первого файла: selection1.txt
Введите имя второго файла: empty.txt
Ошибка! Пустой файл.
import Mod3_okz
Введите имя первого файла: selection2.txt
Введите имя второго файла: few_values.txt
Ошибка! Малая выборка.
import Mod3_okz
Введите имя первого файла: selection3.txt
Введите имя второго файла: same_values.txt
Ошибка! Нулевая дисперсия.
```

@ -0,0 +1,47 @@
# Индивидуальное контрольное задание по Теме 8
Таболин Иван, А-01-23
Вариант 7
## Задание
По указанному преподавателем варианту контрольного задания
обратитесь к индивидуальному заданию с таким номером в теме 7,
разработайте функцию, на ее основе создайте модуль.
Создайте второй модуль, в котором должны быть инструкции для ввода/создания
исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
Вариант 7 из ИКЗ по Теме 7
Разработайте функцию с 2 параметрами: х и А, реализующую преобразование входного сигнала x по формуле: y=i, если i*A<=x<(i+1)*A, y=-i, если -(i+1)*A>=x>-i*A, где i принимает значения от 1 до А*х. Если не выполнится ни одно из неравенств ни при каком i, то y=0. Создайте список со 100 значениями входного сигнала х – случайными, треугольно (triangular) распределенными числами в диапазоне значений от -5 до 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при А=1. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
## Решение
Модуль 1
```py
# Mod1
# Функция
def preob(x, A):
max_i=int(A*x)
for i in range(1, max_i+1):
if i*A<=x and x<(i+1)*A:
return i
elif -(i+1)*A>=x and x>(-i)*A:
return -i
return 0
```
Модуль 2
```py
# Mod2
# Генерация входных данных и применение функции
import random as rn
from Mod1_IKZ import preob
x=[]
for i in range(100):
x.append(rn.triangular(-5,25))
y=[]
for i in range(len(x)):
y.append(preob(x[i],1))
filename=input('Введите имя файла:')
file=open(filename,'w')
file.write('x[i] y[i]')
for i in range(len(x)):
s=str(x[i])+' '+str(y[i]) + '\n'
file.write(s)
file.close()
```

@ -0,0 +1,100 @@
19.83763113980755 19
16.683519633109245 16
9.613937932157592 9
4.963017908969933 4
9.660130026497008 9
4.192677427076193 4
2.8042897405957676 2
7.004180515732655 7
13.593516894395366 13
10.38778089627398 10
23.524552246854263 23
10.408378867939485 10
12.11908886265757 12
13.722587336888672 13
9.599035410843936 9
16.182722607179095 16
15.960737898669425 15
20.453332281292724 20
9.351758251975712 9
4.715296915378227 4
21.713766919024486 21
0.5766163127695902 0
8.764382760761023 8
7.023206736247321 7
10.380398342708045 10
14.71079199542745 14
9.327675742027745 9
6.379809079109103 6
6.478312277893931 6
0.9453591189849897 0
17.810398025399493 17
9.500089559677443 9
10.206335274636286 10
13.119123320799352 13
12.152291629686335 12
17.672173423083027 17
-1.3318207939976006 0
16.201396905672105 16
6.813514064477367 6
9.386637502670942 9
6.829696632809032 6
-2.358188970070025 0
-1.8953657622144822 0
12.163997113559677 12
16.246743920828237 16
18.082861735802094 18
8.161677718632582 8
13.096553199692709 13
3.4793080092423683 3
14.410061733084142 14
2.8415355967140616 2
7.827245427286652 7
-0.2683352964665069 0
2.5318198114412107 2
14.741462609540093 14
9.309479183851334 9
8.719026442686971 8
15.097020825961328 15
20.836394245081628 20
9.664289544985778 9
0.8788652718512342 0
12.801681925869698 12
9.221793961478204 9
7.473865176092325 7
8.93244222349147 8
21.276485422746923 21
0.9186139053532276 0
15.614780434508106 15
23.72548157518309 23
2.286817323138184 2
9.39166993120276 9
17.54026543856295 17
15.96232105645722 15
17.402341242065198 17
8.064826473440498 8
13.969534898590881 13
2.7987177875076386 2
11.604604823060031 11
11.307488847855737 11
11.683304043759009 11
9.924038399834346 9
10.638645358046208 10
6.594015975799261 6
0.02987019195388818 0
2.9540472170256677 2
4.273258511639778 4
14.616967538004785 14
13.722438873502576 13
19.81038211300028 19
7.99574094616143 7
4.330799633595037 4
19.54150269676732 19
8.165940914694414 8
14.33141467468756 14
22.697364809616474 22
14.472567937917809 14
4.509353418534642 4
12.138577182051138 12
5.911408597590821 5
3.303353684790464 3

@ -0,0 +1,11 @@
# Модуль 0
import Mod2
import matplotlib.pyplot as plt
sps1, sps2 = Mod2.read_file()
plt.plot(sps1)
plt.title('График sps1')
plt.grid(True)
plt.show()

@ -0,0 +1,38 @@
# Модуль 1
import math
def func1(t1, t2):
"""Объединяет два кортежа и сортирует"""
sps1 = []
sps2 = []
for x in t1:
sps1.append(x)
sps2.append(1)
for x in t2:
sps1.append(x)
sps2.append(2)
spis3 = list(zip(sps1, sps2))
spis3.sort(key=lambda x: x[0])
sps1_sorted = [x[0] for x in spis3]
sps2_sorted = [x[1] for x in spis3]
return sps1_sorted, sps2_sorted
def func2(spis):
"""Вычисляет статистики списка"""
sred = sum(spis) / len(spis)
mini = min(spis)
maxi = max(spis)
spis_sorted = sorted(spis)
n = len(spis_sorted)
if n % 2 == 1:
med = spis_sorted[n // 2]
else:
med = (spis_sorted[n // 2 - 1] + spis_sorted[n // 2]) / 2
if len(spis) > 1:
kv_sum = sum((x - sred) ** 2 for x in spis)
std = math.sqrt(kv_sum / (len(spis) - 1))
else:
std = 0
return sred, mini, maxi, med, std

@ -0,0 +1,31 @@
# Модуль 2
import pickle
import os
import Mod1
def read_file():
while True:
file_name = input("Введите имя файла: ")
if os.path.exists(file_name):
break
print("Файл не найден! Попробуйте снова.")
with open(file_name, 'rb') as f:
KRT1, KRT2 = pickle.load(f)
sps1, sps2 = Mod1.func1(KRT1, KRT2)
print("SPS1:", sps1)
print("SPS2:", sps2)
sred, mini, maxi, med, std = Mod1.func2(sps1)
print('Статистики SPS1:')
print("Среднее:" ,sred)
print("Минимум:", mini)
print("Максимум:", maxi)
print("Медиана:", med)
print("Ст.отклонение:", std)
with open('Res22.txt', 'w') as f:
f.write("sps1 sps2\n")
for i in range(len(sps1)):
f.write(str(sps1[i]))
f.write(' ')
f.write(str(sps2[i]))
f.write('\n')
return sps1, sps2

@ -0,0 +1,11 @@
# Модуль 3
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobraz(self):
print(self.data)
class Class2(Class1):
def otobraz(self):
print('значение =',self.data)
def otobraz(objekt):
print('значение объекта =',objekt)

@ -0,0 +1,81 @@
sps1 sps2
20 1
20 2
21 1
21 1
21 2
21 2
25 1
25 1
25 1
25 1
25 1
25 2
25 2
25 2
25 2
25 2
26 1
26 1
26 2
26 2
29 1
29 2
30 1
30 1
30 2
30 2
31 1
31 1
31 1
31 1
31 1
31 2
31 2
31 2
31 2
31 2
32 1
32 1
32 2
32 2
34 1
34 1
34 1
34 1
34 2
34 2
34 2
34 2
36 1
36 2
37 1
37 2
38 1
38 1
38 1
38 1
38 2
38 2
38 2
38 2
39 1
39 2
40 1
40 2
42 1
42 1
42 2
42 2
43 1
43 1
43 2
43 2
44 1
44 1
44 2
44 2
45 1
45 1
45 2
45 2

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

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

После

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

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

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

После

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

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

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

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

@ -0,0 +1,249 @@
# Отчет по Теме 9
Таболин Иван, А-01-23
## 1. Запуск и настройка рабочего каталога.
```py
import os
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA9')
```
## 2. Создание классов и их наследников.
## 2.1. Создание автономного класса.
```py
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobraz(self):
print(self.data)
z1=Class1()
z1
<__main__.Class1 object at 0x0000018646F32A50>
z2=Class1()
z1.zad_zn('экз. класса 1')
z2.zad_zn(-632.453)
z1.otobraz()
экз. класса 1
z2.otobraz()
-632.453
```
```py
z1.data='Новое значение атрибута у экз.1'
z1.otobraz()
Новое значение атрибута у экз.1
```
## 2.2. Создание класса-наследника.
```py
class Class2(Class1):
def otobraz(self):
print('значение =',self.data)
z3=Class2()
dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobraz', 'zad_zn']
```
```py
z3.zad_zn('Совсем новое')
z3.otobraz()
значение = Совсем новое
```
Сработал метод класса `Class2`
```py
z1.otobraz()
Новое значение атрибута у экз.1
del z1,z2,z3
```
## 3. Использование классов, содержащихся в модулях.
Создан модуль `Mod3.py` с кодом
```py
# Модуль 3
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobraz(self):
print(self.data)
class Class2(Class1):
def otobraz(self):
print('значение =',self.data)
def otobraz(objekt):
print('значение объекта =',objekt)
```
Далее работаем в командной строке
```py
from Mod3 import Class1
z4=Class1()
z4.otobraz()
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
z4.otobraz()
File "C:\Users\User\Desktop\python-labs\TEMA9\Mod3.py", line 6, in otobraz
print(self.data)
AttributeError: 'Class1' object has no attribute 'data'
```
```py
from Mod3 import Class1
z4=Class1()
z4.data='значение данного data у экз. 4'
z4.otobraz()
значение данного data у экз. 4
```
```py
import Mod3
z4=Mod3.Class2()
z4.zad_zn('класс из модуля')
z4.otobraz()
значение = класс из модуля
Mod3.otobraz('Объект')
значение объекта = Объект
```
## 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.otobraz()
значение = abc
z6=z5+'def'
z6.otobraz()
значение = abcdef
z6.zad_dr_zn(3)
z6.otobraz()
значение = abcdefabcdefabcdef
```
## 5. Присоединение атрибутов к классу.
```py
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobraz', 'zad_dr_zn', 'zad_zn']
Class3.fio='Иванов И.И.'
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobraz', 'zad_dr_zn', 'zad_zn']
'fio' in dir(Class3)
True
z7=Class3(123)
dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobraz', 'zad_dr_zn', 'zad_zn']
dir(z7)==dir(Class3)
False
z7.rozden='1987'
dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobraz', 'rozden', 'zad_dr_zn', 'zad_zn']
'rozden' in dir(z7)
True
'rozden' in dir(Class3)
False
```
## 6. Выявление родительских классов.
```py
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__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#113>", line 1, in <module>
exempl.svojstvo
File "<pyshell#106>", 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])
```
Содержимое модуля `test_SAU.py` для тестирования программы
```py
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Результат запуска теста
```py
y= 0.0
y= 0.2173913043478261
y= 0.4763705103969754
y= 0.686594887811293
y= 0.8199324616478645
y= 0.8837201137353929
y= 0.8994188484874774
y= 0.8892777072047301
y= 0.870097963179993
y= 0.8518346102696789
y= 0.8387499784485772
y= 0.8314204114211459
y= 0.8286051955249649
y= 0.8285656555914835
y= 0.8297915186846528
y= 0.8312697736438287
y= 0.8324765218921963
y= 0.8332456979978418
y= 0.8336163607592184
y= 0.8337101315489143
y= 0.833654237067147
```
![Выходной сигнал](Ris1.png)

@ -0,0 +1,81 @@
# Общее контрольное задание по Теме 9
Таболин Иван, А-01-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамиилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Решение
```py
class Workers:
def __init__(self,fio='',otdel='',dolznost='',oklad=0):
self.fio=fio
self.otdel=otdel
self.dolznost=dolznost
self.oklad=oklad
self.__poos=[]
def pov_oklad(self,uvel):
self.oklad+=uvel
print('Сотрудник', self.fio, 'теперь имеет оклад', self.oklad)
return self.oklad
def perevod(self,new_otdel):
self.otdel=new_otdel
print('Сотрудник', self.fio, 'переведен в отдел', self.otdel)
return self.otdel
def new_dolznost(self,new_dolzn):
self.dolznost=new_dolzn
print('Сотрудник', self.fio, 'переведен на должность', self.dolznost)
return self.dolznost
@property
def view_poos(self):
print('Поощрения сотрудника', self.fio)
print(self.__poos)
return self.__poos
def add_poos(self, new_poos):
self.__poos.append(new_poos)
```
Тестирование
```py
worker1=Workers('TabolinIA','IVTI','bakalavr_3',2400)
worker2=Workers('BerezhkovDA','IVTI','bakalavr_3',2400)
print('ФИО:', worker1.fio,'\n', 'Должность:',worker1.dolznost,'\n', 'Институт:', worker1.otdel,'\n', 'Оклад (стипендия):', worker1.oklad)
ФИО: TabolinIA
Должность: bakalavr_3
Институт: IVTI
Оклад (стипендия): 2400
worker1.new_dolznost('bakalavr_4')
Сотрудник TabolinIA переведен на должность bakalavr_4
'bakalavr_4'
print('ФИО:', worker1.fio,'\n', 'Должность:',worker1.dolznost,'\n', 'Институт:', worker1.otdel,'\n', 'Оклад (стипендия):', worker1.oklad)
ФИО: TabolinIA
Должность: bakalavr_4
Институт: IVTI
Оклад (стипендия): 2400
worker2.perevod('GPI')
Сотрудник BerezhkovDA переведен в отдел GPI
'GPI'
worker2.pov_oklad(worker2.oklad*2)
Сотрудник BerezhkovDA теперь имеет оклад 7200
7200
print('ФИО:', worker2.fio,'\n', 'Должность:',worker2.dolznost,'\n', 'Институт:', worker2.otdel,'\n', 'Оклад (стипендия):', worker2.oklad)
ФИО: BerezhkovDA
Должность: bakalavr_3
Институт: GPI
Оклад (стипендия): 7200
worker1.add_poos('Благодарность 08.12.2025')
worker1.view_poos
Поощрения сотрудника TabolinIA
['Благодарность 08.12.2025']
```

@ -0,0 +1,129 @@
# Тест по Модулю 3
Таболин Иван, А-01-23
Вариант 10
## Задание
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - два кортежа с целочисленными элементами, не обязательно одинаковой длины; в функции должен быть составлены два списка: SPS1 с элементами из двух входных кортежей, причем элементы SPS1 должны быть упорядочены по возрастанию величины, а также список SPS2 с элементами, равными 1 или 2, причем значение 1 берется в том случае, если соответствующий элемент в SPS1 взят из первого кортежа, а значение 2 - если из второго;
- функция 2: аргумент - числовой список; по этому списку в функции должны быть вычислены среднее, наименьшее и наибольшее значения, медиана и оценка стандартного отклонения,
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашивается и вводится имя бинарного файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
- из указанного файла считываются два кортежа: KRT1 и KRT2.
- применяется функция 1 к этим двум кортежам и отображаются полученные списки;
- применяется функция 2 к списку SPS1 и отображаются результаты расчета;
- в текстовый файл с именем Res22.txt записываются результаты расчета по функции 1 так, чтобы в каждой строке был один элемент из SPS1 и один элемент из SPS2, разделенные пробелом.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика полученный из функции 1 список SPS1.
4) Подготовьте бинарный файл с двумя кортежами, содержащими, соответственно, 40 и 50 случайных целочисленных элементов из диапазона значений от 20 до 45. Проверьте работу программы с этими данными.
## Решение
Модуль 1
```py
# Модуль 1
import math
def func1(t1, t2):
"""Объединяет два кортежа и сортирует"""
sps1 = []
sps2 = []
for x in t1:
sps1.append(x)
sps2.append(1)
for x in t2:
sps1.append(x)
sps2.append(2)
spis3 = list(zip(sps1, sps2))
spis3.sort(key=lambda x: x[0])
sps1_sorted = [x[0] for x in spis3]
sps2_sorted = [x[1] for x in spis3]
return sps1_sorted, sps2_sorted
def func2(spis):
"""Вычисляет статистики списка"""
sred = sum(spis) / len(spis)
mini = min(spis)
maxi = max(spis)
spis_sorted = sorted(spis)
n = len(spis_sorted)
if n % 2 == 1:
med = spis_sorted[n // 2]
else:
med = (spis_sorted[n // 2 - 1] + spis_sorted[n // 2]) / 2
if len(spis) > 1:
kv_sum = sum((x - sred) ** 2 for x in spis)
std = math.sqrt(kv_sum / (len(spis) - 1))
else:
std = 0
return sred, mini, maxi, med, std
```
Модуль 2
```py
# Модуль 2
import pickle
import os
import Mod1
def read_file():
while True:
file_name = input("Введите имя файла: ")
if os.path.exists(file_name):
break
print("Файл не найден! Попробуйте снова.")
with open(file_name, 'rb') as f:
KRT1, KRT2 = pickle.load(f)
sps1, sps2 = Mod1.func1(KRT1, KRT2)
print("SPS1:", sps1)
print("SPS2:", sps2)
sred, mini, maxi, med, std = Mod1.func2(sps1)
print('Статистики SPS1:')
print("Среднее:" ,sred)
print("Минимум:", mini)
print("Максимум:", maxi)
print("Медиана:", med)
print("Ст.отклонение:", std)
with open('Res22.txt', 'w') as f:
f.write("sps1 sps2\n")
for i in range(len(sps1)):
f.write(str(sps1[i]))
f.write(' ')
f.write(str(sps2[i]))
f.write('\n')
return sps1, sps2
```
Модуль 0
```py
# Модуль 0
import Mod2
import matplotlib.pyplot as plt
sps1, sps2 = Mod2.read_file()
plt.plot(sps1)
plt.title('График sps1')
plt.grid(True)
plt.show()
```
Генерация входных данных
```py
import pickle
import random as rn
krt1=tuple(rn.randint(20,45) for _ in range(40))
krt2=tuple(rn.randint(20,45) for _ in range(50))
file=open('input.bin','wb')
pickle.dump((krt1,krt1),file)
file.close()
```
Выполнение
```py
import Mod0
Введите имя файла: input.txt
Файл не найден! Попробуйте снова.
Введите имя файла: input.bin
SPS1: [20, 20, 21, 21, 21, 21, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 36, 36, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 40, 40, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45]
SPS2: [1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
Статистики SPS1:
Среднее: 33.375
Минимум: 20
Максимум: 45
Медиана: 33.0
Ст.отклонение: 7.171277096157519
```
![График sps1](Ris2.png)

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