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

...

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

Автор SHA1 Сообщение Дата
KhodiukMR f65b340ee4 Изменил(а) на 'TEMA9/test.md'
2 месяцев назад
KhodiukMR dc17105eae Загрузил графики к выполнению теста по модулю 3
2 месяцев назад
KhodiukMR 3a725193cb Загрузил выполнение теста по модулю 3 и файлы .py к нему
2 месяцев назад
KhodiukMR ee06ba6d99 Загрузил ОКЗ к Теме 9 и файлы к нему
2 месяцев назад
KhodiukMR 24a1e55c60 Загрузил отчёт к Теме 9
2 месяцев назад
KhodiukMR 7b8469def2 Загрузил ИКЗ к Теме 8 и файлы к нему
2 месяцев назад
KhodiukMR 53aede1542 Изменил(а) на 'TEMA8/task.md'
2 месяцев назад
KhodiukMR b19c2abc22 Изменил(а) на 'TEMA8/ModOKZ3.py'
2 месяцев назад
KhodiukMR c7777c0ad8 Изменил(а) на 'TEMA7/test.md'
2 месяцев назад
KhodiukMR 94ef784c85 Загрузил индивидуальное контрольное задание к Теме 7
2 месяцев назад
KhodiukMR 3d53b54131 Загрузил файлы с тестовыми данными для ОКЗ
2 месяцев назад
KhodiukMR 41f1983906 Загрузил ОКЗ к Теме 8 и файлы к нему
2 месяцев назад
KhodiukMR 2b51517312 Загрузил файл отчёта к Теме 8
2 месяцев назад
KhodiukMR 07bb1c173a Изменил(а) на 'TEMA7/task.md'
2 месяцев назад
KhodiukMR f6bb9e2954 Загрузил ОКЗ и график к нему
2 месяцев назад
KhodiukMR 8277ce9ccf Загрузил файлы, созданные при выполнении Темы 9
3 месяцев назад
KhodiukMR e02e3f3637 Загрузил файлы, созданные при выполнении Темы 8 (2)
3 месяцев назад
KhodiukMR 55354eaff8 Загрузил файлы, созданные при выполнении Темы 8
3 месяцев назад
KhodiukMR ff14fe539b Исправление заголовка в отчёте
3 месяцев назад
KhodiukMR bc762b0111 Загрузил отчёт к Теме 7 и файл с графиком к нему
3 месяцев назад
KhodiukMR 90d0dcea2e Загрузка ИКЗ и необходимых файлов к нему
3 месяцев назад
KhodiukMR aef9ef1127 Изменил(а) на 'TEMA6/report.md'
3 месяцев назад
KhodiukMR 91b41fea52 Исправление отчёта
3 месяцев назад
KhodiukMR 78e7773bf0 Загрузил отчёт к Теме 6 и необходимый файл к нему
3 месяцев назад
KhodiukMR 8a500ea54a Загрузил(а) файлы в 'TEMA6'
3 месяцев назад
KhodiukMR 3ffe6f8568 Изменил(а) на 'TEMA6/task.md'
3 месяцев назад
KhodiukMR 143f0d60b4 Загрузил(а) файлы в 'TEMA6'
3 месяцев назад
KhodiukMR 51f275384b Изменил(а) на 'TEMA6/task.md'
3 месяцев назад
KhodiukMR 3eb02a9a1b Дополнение ОКЗ
3 месяцев назад
KhodiukMR ad8a2ddc29 Загрузка всех файлов, созданных при выполнении Темы 6
3 месяцев назад
KhodiukMR 4ad32e2ba1 Загрузил материалы по ОКЗ
3 месяцев назад
KhodiukMR 50eeebab34 Тема 5: Загружено индивидуальное контрольное задание
3 месяцев назад
KhodiukMR ccaa52f3e0 Тема 5: исправление в общем контрольном задании
3 месяцев назад
KhodiukMR 1ac1e2af10 Тема 5: исправление в общем контрольном задании пункте 1
3 месяцев назад
KhodiukMR 5e3b53ed14 tema5: график в тексте отчета
3 месяцев назад
KhodiukMR 92b1a5043e Исправление отчёта
3 месяцев назад
KhodiukMR d59a6b8622 Загрузил отчёт к Теме 5
3 месяцев назад
KhodiukMR dd7a4948e1 Загрузка графиков из выполнения Темы 5
3 месяцев назад
KhodiukMR 0fe26c1e4b Общее контрольное задание по Теме 5
3 месяцев назад
KhodiukMR 15f0c25d21 Индивидуальное контрольное задание
3 месяцев назад
KhodiukMR 270b1c5dc3 Исправление ошибок в ОКЗ(2)
3 месяцев назад
KhodiukMR 698c3e9cf7 Исправление ошибок в ОКЗ
3 месяцев назад
KhodiukMR 0447f4d5d0 Загрузил отчёт к Теме 4
4 месяцев назад
KhodiukMR a5dc9101b9 Общее контрольное задание Тема4(исправление)
4 месяцев назад
KhodiukMR 4bedb0ce52 Общее контрольное задание Тема 4
4 месяцев назад
KhodiukMR 10f64654e2 Загрузил необходимые графики к Теме 4
4 месяцев назад
KhodiukMR 28825973c9 Исправление оформления в test.md
4 месяцев назад
KhodiukMR 940c6eb5e9 Тест по модулю 1
4 месяцев назад
KhodiukMR 897ffe41ee Отчёт по Теме 3
4 месяцев назад
KhodiukMR 0e9b4a7542 Общее контрольное задание(исправление)
4 месяцев назад
KhodiukMR 795e3e6c28 Общее контрольное задание
4 месяцев назад
KhodiukMR 439fbd9ce7 Решение ИКЗ по Теме 2
5 месяцев назад
KhodiukMR 12aa409bb4 Дополнение Отчёта
5 месяцев назад
KhodiukMR 8f2ee744e8 Исправление ошибки в заголовке отчёта
5 месяцев назад
KhodiukMR 1703ebf11d Ответ на Контрольный вопрос по Теме 1 (исправление)
5 месяцев назад
KhodiukMR 169b6e64c4 Ответ на Контрольный вопрос по Теме 1
5 месяцев назад
KhodiukMR b8afaaa522 Исправление ошибок в отчёте
5 месяцев назад
KhodiukMR 18188545be Отчёт по Теме 2
5 месяцев назад
KhodiukMR 40b266c73e Изменил(а) на 'TEMA2/task.md'
5 месяцев назад
KhodiukMR 59a6938e38 Общее контрольное задание
5 месяцев назад
KhodiukMR 8f55ceaae5 Отчёт и файл кода к Теме 1
5 месяцев назад

@ -0,0 +1,5 @@
#Программа по Теме 1 Ходюк Максим Романович
print('Hello')
h=input('Your name=')
import os
os.chdir('D:\\POAS\\Hodyuk\\Tema1\\')

@ -0,0 +1,156 @@
# Отчёт по Теме 1 Ходюк Максим Романович
## Пункт 1
Создал на рабочем диске в папке со своей фамилией папку Tema1
и записал туда файлы из архива Tema1.rar
## Пункт 2
Запустил программу-интерпретатор Python 3.11
## Пункт 3
Ввел инструкцию в диалоговом окне интерпретатора
```
>>> print('Hello')
Hello
```
## Пункт 4
Ввёл ещё одну инструкцию и в появившейся строке ввёл своё имя
```
>>> h=input('Your name=')
Your name=Maxim
```
## Пункт 5
Завершил работу интерпретатора
```
>>> exit()
```
## Пункт 6-7
Открыл интерактивную графическую оболочку IDLE среды Python и изучил устройство главного командного окна среды
## Пункт 8
Ввёл инструкции настройки рабочего каталога среды
```
import os
os.chdir('L:\III курс\А-1-23\HodyukMR\POAS\\Tema1\\')
```
## Пункт 9
В меню Options Установил шрифт типа Arial CYR, 11 размер, высота начального окна 50 символов, ширина 100 символов, подкраска комментариев - коричневая
## Пункт 10
Открыл текстовый редактор среды и согдал программу [Pr0.py](Pr0.py) следующего содержания
```
## Программа по Теме 1 Ходюк Максим Романович
print('Hello')
h=input('Your name=')
import os
os.chdir('L:\III курс\А-1-23\HodyukMR\POAS\\Tema1\\')
```
При запуске программы с помощью меню Run module получаю следующий вывод
```
============ RESTART: L:/III курс/А-1-23/HodyukMR/POAS/Tema1/Pr0.py ============
Hello
Your name=Maxim
```
Использую другой вариант запуска программы:
```
import Pr0
Hello
Your name=Maxim
```
Также использую третий вариант запуска, с помощью горячей клавиши F5, вывод получаю такой же, как при первом варианте запуска
## Пункт 11
Запускаю на выполнение программу из файла [prb1.py](prb1.py)
```
import prb1
Как Вас зовут? Максим
Привет, Максим
```
## Пункт 12
Открыл файл Pr0.cpython-311.рус, внутри находится байт-код - скомпилированная версия исходного кода python
Компиляция программ в Python нужна для для преобразования кода на понятном человеку языке в байт-код, который затем выполняется виртуальной машиной Python
## Пункт 13
Скопировал все верно выполненные команды в отдельный файл
## Пункт 14
Изучил раздел помощи Help главного меню
Ввёл инструкцию обращения к оперативной помощи по функции print()
```
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)
```
Изучил возможность вызова оперативной помощи с помощью функциональной клафиши F1 и с помощью предложения Help главного меню
## Пункт 15
Выбрал предложения File - Open и открыл файл prb1.py и изучил возможность переключения между открытыми окнами используя предложения Window
Сделал активным окно prb1.py и запустил на выполнение программу с помощью Run - Run Module
```
=========== RESTART: L:\III курс\А-1-23\HodyukMR\POAS\Tema1\prb1.py ==========
Как Вас зовут? Максим
Привет, Максим
```
Открыл Pr0.py и закрыл окна с помощью File - Close
Используя инструкцию import запустил программу [tdemo_chaos.py](tdemo_chaos.py) на выполнение
```
import tdemo_chaos
```
Используя предложения Help - Turtle Demo - Examples - Clock запустил программу, которая выводит графическое представление - циферблат часов,
на котором можно наблюдать движение стрелок часов
В окне демонстраций есть много примеров, которые очень удобны, так как на основе примеров можно изучать графические возможности языка,
а так же брать их за основу своих программ либо брать оттуда готовые части кода
## Пункт 16
Завершил работу со средой, используя предложения File - Exit

@ -0,0 +1,15 @@
# Индивидуальное контрольное задание по Теме 1
Ходюк Максим Романович, А-01-23,
Вопрос №4
## Вопрос
Можно ли писать несколько инструкций в одной строке командного окна?
## Ответ
Да, в одной строке командного окна можно писать несколько инструкций, разграничивая их с помощью знака ;
Например:
```
>>> a=13;b=15;c=14
>>> print(a,b,c)
13 15 14
```

@ -0,0 +1,13 @@
familia = 'Hodyuk'
first=familia[0]
import keyword
sp_kw=keyword.kwlist
sp_kw.remove('nonlocal')
print(sp_kw)
kort_nam=("Максим","Дима","Даня","Саня")
type(kort_nam)
kort_nam=kort_nam+("Лиза","Паша")
kort_nam.count("Дима")
dict_bas=dict(zip(["Строка","Список","Кортеж"],[familia,sp_kw,kort_nam]))
print(dict_bas)
print("\nПрограмма выполнена")

@ -0,0 +1,771 @@
# Отчёт по Теме 2
Ходюк Максим Романович, А-01-23
## Пункт 1
Запустил оболочку IDLE
## Пункт 2
Изучил простые объекты
Создал переменные f1 f2 и присвоил им значения
```
f1=16; f2=3
```
Посмотрел значения созданных переменных двумя способами
```
f1,f2
(16, 3)
f1;f2
16
3
```
Использовал функцию dir, чтобы узнать, какие обьекты существуют в данный момент в среде
```
dir()
['annotations', 'builtins', 'doc', 'loader', 'name', 'package',
'spec', 'f1', 'f2']
```
Та же функция используется для получения списка атрибутов любого объекта
```
dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
```
Посмотрел классовую принадлежность ранее созданной переменной f2
```
type(f2)
<class 'int'>
```
Удалил объекты с помощью функции del и убедился, что объектов больше нет в памяти
```
del f1,f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
```
## Пункт 3
Изучение правил именования объектов
Задал значение в виде вещественного числа:
```
gg1=1.6
```
Задал значение в виде символьной строки
```
hh1='Строка'
```
Попробовал задать объект с недопустимым именем-начинается с цифры:
```
73sr=3
SyntaxError: invalid decimal literal
```
Программа выдала ошибку
Попробовал задать объект с именем, которое совпадает с ключевым словом - программа снова выдала ошибку
```
and=7
SyntaxError: invalid syntax
```
## Пункт 4
Вывел список ключевых слов с помощью инструкции:
```
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']
```
Cохранил выведенный список в отдельную переменную
```
SpisKeyword=keyword.kwlist
SpisKeyword
['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
Вывел список встроенных идентификаторов с помощью инструкций:
```
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(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
help(max)
Help on built-in function max in module builtins:
max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more positional arguments, return the largest argument.
help(min)
Help on built-in function min in module builtins:
min(...)
min(iterable, *[, default=obj, key=func]) -> value
min(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its smallest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more positional arguments, return the smallest argument.
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.
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.
help(sorted)
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
help(sum)
Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
help(zip)
Help on class zip in module builtins:
class zip(object)
| zip(*iterables, strict=False)
|
| The zip object yields n-length tuples, where n is the number of iterables
| passed as positional arguments to zip(). The i-th element in every tuple
| comes from the i-th iterable argument to zip(). This continues until the
| shortest argument is exhausted.
|
| If strict is true and one of the arguments is exhausted before the others,
| raise a ValueError.
|
| >>> list(zip('abcdefg', range(3), range(4)))
| [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
|
| Methods defined here:
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __iter__(self, /)
| Implement iter(self).
|
| __next__(self, /)
| Implement next(self).
|
| __reduce__(self, /)
| Return state information for pickling.
|
| __setstate__(self, object, /)
| Set state information for unpickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs)
| Create and return a new object. See help(type) for accurate signature.
abs(-25)
25
len(SpisKeyword)
35
max(24,26,91,12341)
12341
min(12,-14,241,2)
-14
pow(2,4)
16
round(2.4231)
2
round(2.78)
3
sorted([1,2,6,3,7,4])
[1, 2, 3, 4, 6, 7]
sum([1,1,1,1,1])
5
A=[13,15,2,10]
sum(A)
40
sp1 = ['cat','dog','horse']
sp2 = [20,3,14]
sp3 = ['home','cabin','stable']
zipped = zip(sp1,sp2,sp3)
list(zipped)
[('cat', 20, 'home'), ('dog', 3, 'cabin'), ('horse', 14, 'stable')]
```
## Пункт 6
Убедился, что малые и большие буквы при именовании объектов различаются
```
Gg1=45
gg1;Gg1
1.6
45
```
## Пункт 7
Изучение простые базовые типы объектов
### Пункт 7.1
Логический тип:
```
bb1=True; bb2=False
bb1;bb2
True
False
```
Вывел на экран класс объекта:
```
type(bb1)
<class 'bool'>
```
### Пункт 7.2
Другие простые типы
Вещественный тип
```
ii1=-1234567890
```
Экспоненциальная форма записи вещественного числа
```
ff1=-8.9876e-12
```
Двоичное число
```
dv1=0b1101010
```
Восьмеричное число
```
vsm1=0o52765
```
шестнадцатиричное число
```
shest1=0x7109af6
```
Работа с комплексными числами
```
cc1=2-3j
a=3.67; b=-0.45
cc2=complex(a,b)
```
### Пункт 7.3
Строка символов
Создал строку символов, убедился, что строки можно заключать в апотрофы и двойные кавычки
```
ss1='Это - строка символов'
ss1
'Это - строка символов'
ss1="Это - строка символов"
ss1
'Это - строка символов'
```
Применил внутри строки экранированные последовательности, создал следующую строку
```
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
```
Создал ещё одну строку, выводимую на двух строках
```
ss1b= 'Меня зовут: \n Ходюк М. Р.'
print(ss1b)
Меня зовут:
Ходюк М. Р.
```
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек
```
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
```
Изучил возможность обращения к частям строки по индексам символов начиная с 0
```
ss1[0]
'Э'
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
ss1[6:9]
'стр'
ss1[13:]
'символов'
ss1[:13]
'Это - строка '
ss1[5:-8]
' строка '
ss1[3:17:2]
' тоасм'
```
При задании отрицательного шага, результатом выполнения будет часть строки, в которую символы будут взяты в обратной последовательности
```
ss1[17:3:-2]
'омсаот '
```
Также можно вместо 17 использовать индекс -4, и получить такой же результат
```
ss1[-4:3:-2]
'омсаот '
```
Убедился, что строка является неизменяемым объектом
```
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
```
Однако строку можно изменить, переопределив её
```
ss1=ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
```
На основе ранее созданной строки ss1b создал обьекты с разными срезами исходной строки
```
ss1b[:15]
'Меня зовут: \n Х'
ss1c=ss1b[:3]+'12345'+ss1b[5:]
ss1c
'Мен12345зовут: \n Ходюк М. Р.'
```
Задал несколько объектов разных типов
```
Flag = False
type(Flag)
<class 'bool'>
Stroka="СТРОКА"
A=453
B=4231
complex(A,B)
(453+4231j)
Flag
False
Stroka
'СТРОКА'
```
## Пункт 8
Изучение более сложных типов объектов
### Пункт 8.1
Списки
Создал примеры списков:
```
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]
```
Попробовал создать список, введя его на нескольких строках
```
spis=[1,2,3,4,
5,6,7,
8,9,10]
spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```
Изучил работу с индексацией списков
```
spis1[-1]
(5-9j)
stup[-8::2]
[0, 1, 1, 1]
```
Изучил возможность изменения списков:
```
spis1[1]='Список'
spis1
[111, 'Список', (5-9j)]
```
Узнал текущее число элементов в списке
```
len(spis1)
3
```
Изучил возможность добавления элементов в списки с помощью метода append и с помощью конкатенации
```
spis1.append('New item')
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
```
В последней инструкции объект только выводится, но не сохраняется
```
spis1
[111, 'Список', (5-9j), 'New item']
```
Добавил в конец списка spis1 строку ss1b
```
spis1.append(ss1b)
spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Ходюк М. Р.']
```
Изучил возможность удаления элемента
```
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Ходюк М. Р.']
```
Метод удалил из списка элемент с индексом 1
Самостоятельно изучил другие методы списков и применил их
```
help(spis.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
spis1.insert(3,'home')
spis1
[111, (5-9j), 'New item', 'home', 'Меня зовут: \n Ходюк М. Р.']
help(spis.remove)
Help on built-in function remove:
remove(value, /) method of builtins.list instance
Remove first occurrence of value.
Raises ValueError if the value is not present.
spis23=[1,2,3,1]
spis23.remove(1)
spis23
[2, 3, 1]
help(spis.extend)
Help on built-in function extend:
extend(iterable, /) method of builtins.list instance
Extend list by appending elements from the iterable.
spis23.extend(spis1)
spis23
[2, 3, 1, 111, (5-9j), 'New item', 'home', 'Меня зовут: \n Ходюк М. Р.']
help(spis.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
spis24=[1,2,3,4,5]
spis24
[1, 2, 3, 4, 5]
spis24.clear()
spis24
[]
spis24=[1,2,8,3,6,4,12,7]
spis24.sort()
spis24
[1, 2, 3, 4, 6, 7, 8, 12]
spis24.reverse()
spis24
[12, 8, 7, 6, 4, 3, 2, 1]
help(spis.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
spis25=spis24.copy()
spis25
[12, 8, 7, 6, 4, 3, 2, 1]
help(spis.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
stup.count(0)
2
help(spis.index)
Help on built-in function index:
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
Return first index of value.
Raises ValueError if the value is not present.
stup.index(1)
2
```
Списки могут быть вложенными
```
spis2=[spis1,[4,5,6,7]]
```
Обратился к элементам вложенного списка и изменение их
```
spis2[0][1]
(5-9j)
spis2[0][1]=78
spis2
[[111, 78, 'New item', 'home', 'Меня зовут: \n Ходюк М. Р.'], [4, 5, 6, 7]]
```
При изменении элементов вложенного списка изменяется и сам список, который был вложен в другой
```
spis1
[111, 78, 'New item', 'home', 'Меня зовут: \n Ходюк М. Р.']
```
Чтобы spis1 не изменялся при изменении spis2, можно создать их следующим образом
```
spis1 = [13,'A',14,'cat','dog']
spis1
[13, 'A', 14, 'cat', 'dog']
spis2 = [list(spis1),'uuuuu',731]
spis2[0][1]
'A'
spis2[0][1]='C'
spis2
[[13, 'C', 14, 'cat', 'dog'], 'uuuuu', 731]
spis1
[13, 'A', 14, 'cat', 'dog']
```
Создал свой объект список
```
spisok=[12, 'Strocka', Flag, spis25]
spisok
[12, 'Strocka', False, [12, 8, 7, 6, 4, 3, 2, 1]]
```
### Пункт 8.2
Объект-кортеж
Изучил примеры операций с кортежами:
Создание:
```
kort1=(222,'Kortezh',77+8j)
```
Переопределение(т.к.кортеж является неизменяемым объектом)
```
kort1= kort1+(1,2)
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Ходюк М. Р.')
```
Переопределил кортеж с удалением комплексного значения
```
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Ходюк М. Р.')
```
Изучил важные методы кортежей
Получение индекса заданного элемента(index) и подсчёт числа вхождений заданного элемента(count)
```
kort1.index(2)
4
kort1.count(222)
1
```
Попробовал операцию изменения элемента кортежа и убедился в невозможности его изменения
```
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#174>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
```
Самостроятельно создал кортеж:
```
kortej=(12, 'Strocka', Flag, spis25)
kortej
(12, 'Strocka', False, [12, 8, 7, 6, 4, 3, 2, 1])
```
### Пункт 8.3
Словари
Пример создания словаря и обращения к его элементам по ключам
```
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1['Orel']
56
```
Пример пополнения словаря
```
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
```
Применил методы получения списка ключей и значений в словаре:
```
dic1.keys()
dict_keys(['Saratov', 'Orel', 'Vologda', 'Pskov'])
dic1.values()
dict_values([145, 56, 45, 78])
```
Применил функцию sorted для получения списков, упорядоченные по ключам/значениям
```
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
```
Убедился, что элементы словаря могут быть в том числе и словарями:
```
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
```
Обращение к элементу вложенного словаря:
```
dic3['statistics'][2]
'standart deviation'
```
Создал более сложный словарь с использованием функции dict
```
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
```
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Ходюк М. Р.'}
```
Создал объект-кортеж с 7 элементами и список с 5 элементами, и попробовал создать из них словарь:
```
kort801 = (1, 48, 'NICOLAI', '67W', 'Батон', 'name', 1453)
spisocek = [1,4553, 'Maxim',4,6]
dic6=dict(zip(kort801, spisocek))
dic6
{1: 1, 48: 4553, 'NICOLAI': 'Maxim', '67W': 4, 'Батон': 6}
```
Как можно заметить, словарь создался с 5ю элементами, из чего можно сделать вывод, что при неодиноковом количестве задаваемых ключей и значений, словарь создастся с кол-вом
элементов, равным меньшему их кол-ву
Пример словаря с описанием состава студентов, обучающихся на АВТИ:
```
AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
AVTI['Курс III'][5]
15
```
### Пункт 8.4
Множества
Пример создания множества
```
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'двигатель', 'датчик', 'линия связи', 'микропроцессор'}
```
Определение числа элементов в множестве
```
len(mnoz1)
4
```
проверка наличия элемента во множестве
```
'датчик' in mnoz1
True
```
Добавление элемента
```
mnoz1.add('реле')
mnoz1
{'двигатель', 'датчик', 'линия связи', 'реле', 'микропроцессор'}
```
Удаление элемента
```
mnoz1.remove('линия связи')
mnoz1
{'двигатель', 'датчик', 'реле', 'микропроцессор'}
```
Создал объект-множество с элементами разныхтипов и попробовал выполнить с ним разные операции
```
mnoz2={7,'Ronaldo',10,'Messi',18,'Bruno'}
mnoz2
{18, 7, 'Bruno', 10, 'Ronaldo', 'Messi'}
len(mnoz2)
6
mnoz2.add('Pele')
mnoz2
{18, 'Pele', 7, 'Bruno', 10, 'Ronaldo', 'Messi'}
mnoz2.remove('Messi')
mnoz2
{18, 'Pele', 7, 'Bruno', 10, 'Ronaldo'}
```
## Пункт 9
Закончил сеанс работы с IDLE

@ -0,0 +1,68 @@
# Общее контрольное задание Тема 2 Ходюк
Скрипт для ОКЗ в файле [OKZ.py](OKZ.py)
## Пункт 1
Создал переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
```
familia = 'Hodyuk'
```
## Пункт 2
Создал переменную со значением, совпадающим с первой буквой из строки familia
```
first=familia[0]
first
'H'
```
## Пункт 3
Создание переменной sp_kw со списком всех ключевых слов языка Python
```
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']
```
## Пункт 4
Удалил из списка sp_kw значение 'nonlocal' и вывел список
```
sp_kw.remove('nonlocal')
sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## Пункт 5
Создал кортеж kort_nam с 4 именами: моим, и еще 3-х студентов моей группы
```
kort_nam=("Максим","Дима","Даня","Саня")
```
Вывел тип получившегося объекта
```
type(kort_nam)
<class 'tuple'>
```
## Пункт 6
Добавил в кортеж из предыдущего пункта ещё 2 имени
```
kort_nam=kort_nam+("Лиза","Паша")
kort_nam
('Максим', 'Дима', 'Даня', 'Саня', 'Лиза', 'Паша')
```
## Пункт 7
Написал инструкцию для подсчёта количества присутствия имени "Дима" в кортеже
```
kort_nam.count("Дима")
1
```
## Пункт 8
Создал словарь, в котором в качестве ключей задал русские названия типов переменных,
созданных ранее в ОКЗ, и в качестве значений - переменные этих типов
```
dict_bas=dict(zip(["Строка","Список","Кортеж"],[familia,sp_kw,kort_nam]))
dict_bas
{'Строка': 'Hodyuk', 'Список': ['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'], 'Кортеж': ('Максим', 'Дима', 'Даня', 'Саня', 'Лиза', 'Паша')}
```

@ -0,0 +1,23 @@
# Индивидуальное контрольное задание по Теме 2
Ходюк Максим Романович, А-01-23
## Задание
Вариант 12
Предполагается выполнить инструкцию
fg={'a':23,'b':45,'c':-12}
К какому классу будет относиться созданный объект? Напишите инструкцию расчета суммы значений первого и третьего элементов.
## Решение
Созданный объект fg будет относиться к классу dict - словарь
```
fg={'a':23,'b':45,'c':-12}
type(fg)
<class 'dict'>
```
Инструкция расчёта суммы значений первого и третьего элементов
```
sum([fg['a'],fg['c']])
11
```

@ -0,0 +1,704 @@
# Отчёт по теме 3
Ходюк Максим Романович, А-01-23
# 2. Преобразование простых базовых типов объектов
## 2.1. Преобразование в логический тип с помощью функции bool(<Объект>).
Создал 4 переменные логического типа из объектов других типов:
```
logiz1=bool(56)
logiz2=bool(0)
logiz3=bool("Beta")
logiz4=bool("")
```
Результат:
```
logiz1
True
logiz2
False
logiz3
True
logiz4
False
```
## 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]).
Попробовал применить примеры использования данной функции:
```
tt1=int(198.6)
tt1
198
tt2=int("-76")
tt2
-76
tt3=int("B",16)
tt3
11
tt4=int("71",8)
tt4
57
tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
При применении последней инструкции выдало диагностическое сообщение, потому что функция int при передавании в неё строки ожидает увидеть там целое число, а "98.76" содержит десятичную точку, из-за чего функция int не может её преобразовать
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
Примеры:
flt1=float(789)
flt2=float(-6.78e2)
flt3=float("Infinity")
flt4=float("-inf")
flt1
789.0
flt2
-678.0
flt3
inf
flt4
-inf
## 2.3. Преобразование десятичных чисел в другие системы счисления
```
hh=123
dv1=bin(hh) #Преобразование в строку с двоичным представлением
dv1
'0b1111011'
vos1=oct(hh) #Преобразование в строку с восьмеричным представлением
vos1
'0o173'
shs1=hex(hh) ) #Преобразование в строку с шестнадцатеричным представлением
shs1
'0x7b'
```
Проверил правильность преобразования путём обратного преобразования числа в десятичную систему счисления
```
int(dv1,2)
123
int(vos1,8)
123
int(shs1,16)
123
```
# 3. Изучите преобразования более сложных базовых типов объектов
## 3.1. Преобразование в строку символов с помощью функции str(<Объект>).
```
strk1=str(23.6)
strk1
'23.6'
strk2=str(logiz3)
strk2
'True'
strk3=str(["A","B","C"])
strk3
"['A', 'B', 'C']"
strk4=str(("A","B","C"))
strk4
"('A', 'B', 'C')"
strk5=str({"A":1,"B":2,"C":9})
strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
## Преобразование элементов объекта в список с помощью функции list(<Объект>).
Примеры преобразований:
```
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']
```
В последней инструкции из словаря в список попали ключи, чтобы создать список значений, применил следующую инструкцию
```
spis3=list({"A":1,"B":2,"C":9}.values())
spis3
[1, 2, 9]
```
## 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
Примеры преобразований:
```
kort7=tuple('Строка символов')
kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
kort8=tuple(spis2)
kort8
(23, 12, 78)
kort9=tuple({"A":1,"B":2,"C":9})
kort9
('A', 'B', 'C')
```
## 3.4. Удаление объектов.
Удалил объекты и убедился в их отсутствии в оперативной памяти
```
del strk5, kort8
strk5
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
kort8
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Создал строку со своей фамилией и инициалами, преобразовал её в список,затем в кортёж, а затем в строку:
```
strr="KhoduykMR"
lstrr=list(strr)
lstrr
['K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R']
klstrr=tuple(lstrr)
klstrr
('K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R')
strr2=str(klstrr)
strr2
"('K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R')"
```
# 4.Арифметические операции.
## 4.1.Сложение и вычитание (+ и -)
```
12+7+90
109
5.689e-1 - 0.456
0.11289999999999994
23.6+54
77.6
14-56.7+89
46.3
```
## 4.2. Умножение (*)
-6.7*12
-80.4
## 4.3. Деление (/).
```
-234.5/6
-39.083333333333336
a=178/45
```
Проверил тип объекта а
```
type(a)
<class 'float'>
```
## 4.4. Деление с округлением вниз (//).
```
b=178//45
b
3
c=-24.6//12.1
c
-3.0
```
Попробовал смешанные комбинации типов чисел в этой операции
```
178//12.1
14.0
-24.6//15
-2.0
```
## 4.5. Получение остатка от деления (%).
```
148%33
16
12.6%3.8
1.2000000000000002
```
Попробовал применить в этой операции смешанные типы чисел
```
148%3.8
3.6000000000000068
12.6%33
12.6
12.6%3
0.5999999999999996
```
## 4.6. Возведение в степень (**).
```
14**3
2744
e=2.7**3.6
e
35.719843790663525
```
Попробовал смешанные типы чисел и в операции возведения в степень
```
14**3.6
13367.830445904418
2.7**3
19.683000000000003
```
Попробовал применить операции, представленные в пункте 4, с участием комплексных чисел
```
14**(3+8j)
(-1751.1118980727824+2112.6152324614004j)
(3+8j)*14
(42+112j)
(3+8j)/(15+883j)
(0.009115107563141576-0.0032426652169341747j)
(3+8j)//(15+883j)
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
(3+8j)//(15+883j)
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
(3+8j)%(15+883j)
Traceback (most recent call last):
File "<pyshell#99>", line 1, in <module>
(3+8j)%(15+883j)
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
```
К комплексным числам можно применить все действия, кроме деления с округлением и получения остатка от деления
# 5. Операции с двоичными представлениями целых чисел.
## 5.1. Двоичная инверсия (~).
При применении двоичной инверсии значение каждого бита в представлении числа меняется на противоположное:
```
dv1=9
dv2=~dv1
dv2
-10
```
## 5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
При применении данной команды результат - это число в десятичной системе счисления, которое в двоичной системе счисления представляется как результат побитового совпадения разрядов(то есть 1 в разряде получится только если в этом разряде у обоих сравниваемых чисел стоит 1)
```
7&9 #111 и 1001 = 0001
1
7&8 #111 и 1000 = 0000
0
```
## 5.3. Двоичное «ИЛИ» (|) – побитовое сравнение двоичных представлений чисел
Результат также как в предыдущем случае десятичное число, но на этот раз в двоичном представлении у числа будет 0 только если у обоих сравниваемых чисел в этом разряде 0
```
7|9
15
7|8
15
14|5
15
```
## 5.4. Двоичное «исключающее ИЛИ»(^) - побитовое сравнение двоичных представлений чисел
В данной операции получаем 0, если оба сравниваемых разряда имеют одинаковые значения
```
14^5
11
```
## 5.5 Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
Применение:
```
h=14
g=h<<2
g1=h>>1
g2=h>>2
g
56
g1
7
g2
3
```
Создал двоичное число с 11 знаками и попробовал к нему применить различные операции
```
hh=1924 #11110000100
gg=hh<<5
gg
61568
gg1=hh>>6
gg1
30
```
# 6.Операции при работе с последовательностями (строками, списками, кортежами).
## 6.1. Объединение последовательностей (конкатенация)(+)
Применил конкатенацию для строк, списков и кортежей:
```
'Система '+'регулирования'
'Система регулирования'
['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
## 6.2. Повторение (*)
Использование повторения для строк, списков и кортежей:
```
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
```
Применил примеры: Создание списка со 100 отсчётами сигнала-ступеньки
```
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. Проверка наличия заданного элемента в последовательности (in)
Проверил наличие подстроки в строке и наличие контекстов в созданных ранее списке и кортеже
```
stroka='Система автоматического управления'
stroka
'Система автоматического управления'
'автомат' in stroka
True
'ку' in ['ку','-']*3
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
## 6.4. Подстановка значений в строку с помощью оператора «%»
Применил пример 1:
```
stroka='Температура = %g %s %g'
stroka
'Температура = %g %s %g'
stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
Применил пример 2:
```
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka
'Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
# 7.Оператор присваивания
## 7.1. Обычное присваивание значения переменной (=)
```
zz=-12
zz
-12
```
## 7.2. Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```
zz+=5
zz
-7
zz-=3
zz
-10
```
Проверил работу сочетания знаков (+=) на строках
```
stroka='Система'
stroka
'Система'
stroka+=' регулирования'
stroka
'Система регулирования'
```
Для строк эта операция означает конкатенацию текущего значения с заданным дополнением
## 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```
zz/=2
zz
-5.0
zz*=5
zz
-25.0
```
Попробовал данную операцию на строке: она означает повторение текущего значения заданное количество раз
```
stroka*=2
stroka
'Система регулированияСистема регулирования'
```
## 7.4. Самостоятельное изучение операций (//=), (%=), (**=)
```
zz//=2
zz
-13.0
zz%=3
zz
2.0
zz**=4
zz
16.0
```
## 7.5. Множественное присваивание
```
w=v=10
w;v
10
10
n1,n2,n3=(11,-3,'all')
n1;n2;n3
11
-3
'all'
```
Самостоятельно проверил,можно ли вместо кортежа справа в последней инструкции использовать строку, список, словарь, множество
Список:
```
k1,k2,k3=[11,-3,'gfgdg']
k1;k2;k3
11
-3
'gfgdg'
```
Строка:
```
s1,s2,s3='123'
s1;s2;s3
'1'
'2'
'3'
```
Словарь:
```
d1,d2,d3={'Saratov':145, 'Orel':56, 'Vologda':45}
d1;d2;d3
'Saratov'
'Orel'
'Vologda'
```
Множество:
```
m1,m2,m3={'двигатель','датчик','линия связи'}
m1;m2;m3
'двигатель'
'линия связи'
'датчик'
```
# 8. Логические операции
## 8.1. Операции сравнение
Придумал примеры использования операций сравнения и сравнил ранее созданные переменные w и v
```
w==v
True
w>v
False
w>=v
True
12>2
True
1<7
True
w!=v
False
```
## Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
Применил операции со множеством:
```
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
True
'cap' in mnoz1
False
```
Применил операции со словарём:
```
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
```
Изучил пример работы со словарём:
```
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UII' in dct1['Depart']
True
dct1['Depart'][1] == 'MM'
False
```
## 8.3. Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
Использовал приведённый в методичке пример сложного логического выражения и придумал 2 своих
```
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
((w==v) or (18>234)) and ('pen' in mnoz1) and not (123<1) and (('M' in 'Messi') or ('M' in 'Nicolay'))
True
not (dct1['Depart'][1] == 'MM') and not (163.5>163.6) and ('Vologda' in dic1)
True
```
## 8.4. Проверка ссылок переменных на один и тот же объект (is).
Проверил, что при одновременном присваивании переменные ссылаются на один и тот же объект
```
w=v=10
w is v
True
```
После присвоил переменным одинаковые значения, но не одновременным присваиванием,поэтому переменные просто содержат одинаковые значения, но не ссылаются на одну и ту же "ячейку" в опертивной памяти
```
w1=['A','B']
w1
['A', 'B']
v1=['A','B']
w1 is v1
False
```
# 9.Операции с объектами, выполняемые с помощью методов.
Применил функцию dir() для получения списка атрибутов объекта
```
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. Методы для работы со строками.
Рассмотрел и применил примеры таких методом
Возвращение позиции первого вхождения контекста или -1 если он не встречается:
```
stroka.find('пр')
5
```
Подстчет числа вхождений подстрки в строку
```
stroka.count("с")
4
```
Замена первого вхождения указанной подстроки на вторую подстроку
```
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
```
Возвращение списка подстрок с заданным разделителем:
```
spis22=stroka.split(' ')
```
Возвращение строки со всеми заглавными буквами:
```
stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
```
Создание строки, собранной из элементов списка:
```
stroka3=" ".join(spis22)
```
Создание кортежей с результатами поиска "с" слева и "с" справа:
```
stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```
Изучение метода format
Создал строку и вместо фигурных скобок вставил значения с помощью метода format
```
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
```
Создал вторую строку, но на этот раз поставил индексы, определяющие порядок использования аргументов формата
```
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
```
Создал третью строкус именами аргументов-вставок, ис помощью метода формат вставил в строку значения по именами
```
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
```
## 9.2. Методы для работы со списками.
Создал список spsk с 5 элементами, применил к нему следующие методы:
```
spsk=[1,2,'ggwp', 'ss', 'Roman']
spsk
[1, 2, 'ggwp', 'ss', 'Roman']
spsk.pop(2)
'ggwp'
spsk.append('c')
spsk
[1, 2, 'ss', 'Roman', 'c']
spsk.insert(2,'a')
spsk
[1, 2, 'a', 'ss', 'Roman', 'c']
spsk.count('a')
1
```
Метод pop() удаляет из списка элемент с заданным индексом, метод append() добавляет новый элемент в конец списка
insert() вставляет в список перед заданным индексом заданный элемент, а count() подсчитывает число вхождений элемента в список
## 9.3 Методы для работы с кортежами
Применил к ранее созданному кортежу методы index и count, первый возвращает индекс первого вхождения элемента в кортёж, а второй подсчитывает число вхождений элемента в кортёж
```
kort1.index(222)
0
kort1.count(222)
1
```
Методов pop, append и insert у кортежей нет, так как это неизменяемые объекты
## 9.4. Методы словарей и множеств
Применил методы для добавления и удаления элементов из множеств:
```
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1.add('реле')
mnoz1
{'датчик', 'линия связи', 'микропроцессор', 'реле', 'двигатель'}
mnoz1.remove('линия связи')
mnoz1
{'датчик', 'микропроцессор', 'реле', 'двигатель'}
```
Создал словарь и применил к нему методы для: получения списка ключей, получения списка значений, и получения списка из пар ключ/значение
```
student = {
"name": "Анна",
"age": 20,
"course": "Информатика",
"grades": [4, 5, 4, 3],
"city": "Москва"
}
student.keys()
dict_keys(['name', 'age', 'course', 'grades', 'city'])
student.values()
dict_values(['Анна', 20, 'Информатика', [4, 5, 4, 3], 'Москва'])
student.items()
dict_items([('name', 'Анна'), ('age', 20), ('course', 'Информатика'), ('grades', [4, 5, 4, 3]), ('city', 'Москва')])
removed_city = student.pop("city")
removed_city
'Москва'
```
# 10. Сохранил отчёт работы и закончил сеанс работы с IDLE

@ -0,0 +1,86 @@
# Общее контрольное задание по Теме 3
Ходюк Максим Романович, А-01-23
## Задание
Преобразовать восьмеричное значение 45 в целое число.
Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
### Решение
```
vos=oct(45)
vos
'0o55'
des=int(vos,8)
des
45
```
```
D={"усиление":23, "запаздывание":12, "постоянная времени":78}
spis1=list(D)
spis2=list(D.values())
spis1
['усиление', 'запаздывание', 'постоянная времени']
spis2
[23, 12, 78]
kort=tuple(spis1+spis2)
kort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Кортежи отличаются от списков тем, что они являются неизменяемыми обьектами
```
((1768//24.8)%3)**2.4
5.278031643091577
```
```
(~(13&27)^14)<<2
-32
```
```
sps=["колебат","колебат","колебат","колебат"]
"аткол" in (sps[1]+sps[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']
D.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
D.values()
dict_values([23, 12, 78])
```
С помощью методов keys и values можно получить списки ключей и значений из словаря соответственно
```
str1="Создать объект - символьную строку с текстом данного предложения"
spisW=str1.split()
spisW
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
spisW[spisW.index('-')]=','
spisW
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
spisW.remove('данного')
spisW
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,46 @@
# Индивидуальное контрольное задание: тест по модулю 1
Ходюк Максим Романович А-01-23
## Задание
M1_1
1) Почему текстовый редактор оболочки IDLE предпочтителен при написании программ на языке Python?
2) Создайте объект - символьную строку с текстом данного предложения. Напишите инструкции, заменяющие дефис, точку и запятую на знаки пробелов.
3) Напишите инструкцию создания списка с отдельными словами из строки символов. Подсчитайте число слов в списке.
4) Напишите инструкции создания списка с целочисленными элементами, значения которых равны числу символов в соответствующих словах из первого списка.
5) Подсчитайте среднюю длину слов в рассматриваемом предложении.
### Решение
1)Текстовый редактор оболочки IDLE предпочтителен при написании программ на языке Python, так как в нём можно создавать скрипты(файлы с расширением .py), которые не получится создать при работе с консольным окном, а также скрипты можно запускать много раз без повторного ввода команд
2)
```
string = "Создайте объект - символьную строку с текстом данного предложения. Напишите инструкции, заменяющие дефис, точку и запятую на знаки пробелов."
string = string.replace('-',' ')
string = string.replace('.',' ')
string = string.replace(',',' ')
string
'Создайте объект символьную строку с текстом данного предложения Напишите инструкции заменяющие дефис точку и запятую на знаки пробелов '
```
3)
```
spisW=string.split()
spisW
['Создайте', 'объект', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения', 'Напишите', 'инструкции', 'заменяющие', 'дефис', 'точку', 'и', 'запятую', 'на', 'знаки', 'пробелов']
len(spisW)
18
```
4)
```
spis2=[len(word) for word in spisW]
spis2
[8, 6, 10, 6, 1, 7, 7, 11, 8, 10, 10, 5, 5, 1, 7, 2, 5, 8]
```
5)
```
srznac=sum(spis2)//len(spis2)
srznac
6
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,449 @@
# Отчёт по Теме 4
Ходюк Максим Романович, А-01-23
## 2. Изучение стандартных функций модуля builtins
### 2.1. Функция round
Использовал функцию на следующих примерах:
```
round(123.456,1)
123.5
round(123.456,0)
123.0
```
Как можно заметить, второй аргумент означает количество цифр в дробной части, до которой округляется число, и при введении этого аргумента результат получается типа float
Если этот аргумент не задать:
```
round(123.456)
123
type(round(123.456))
<class 'int'>
```
То число округлится до целых и будет типа int
### 2.2. Функция range
Пример:
```
gg=range(76,123,9)
gg
range(76, 123, 9)
```
Эта инструкция создает, так называемый, «итерируемый объект» класса range. Чтобы увидеть получившуюся последовательность чисел, его надо преобразовать, например, в список, обычным способом:
```
list(gg)
[76, 85, 94, 103, 112, 121]
```
Если вызвать эту функцию с одним аргументом, то создатся диапазон от 0 до заданного числа с шагом 1:
```
range(23)
range(0, 23)
list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
### 2.3. Функция zip
Создал обьект список с именем qq, после чего применил функцию zip к qq и ранее созданному списку gg
```
qq = ['Hodyuk','Kovalenko','Ivanov', 'Lykova']
ff=zip(gg,qq)
```
Как и в range здесь получается «итерируемый объект» класса zip, поэтому чтобы увидеть содержимое создал кортёж
```
tuple(ff)
((76, 'Hodyuk'), (85, 'Kovalenko'), (94, 'Ivanov'), (103, 'Lykova'))
```
Элементов в полученном кортеже 4, так как из аргументов функции zip меньшую длину имел список qq, равную 4
Проверил, можно ли обратиться к полученному обьекту по индексу:
```
ff[1]
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
К объекту zip нельзя обращаться по индексу
### 2.4. Функция eval
Применил пример использования, отобразил результат(переменную dan):
```
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=13
dan
-91.0
```
### 2.5 Функция exec
Функция выполняет совокупность инструкций на языке Python, например:
```
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
gg
221.456
```
### 2.6. Самостоятельное изучение других стандартных функций
Применил ранее известные функции:
```
abs(dan)
91.0
pow(2,4)
16
max([1,3,6,1])
6
min([1,16, -591, 0])
-591
sum([1,2,3,4])
10
len(qq)
4
```
Изучил функции divmod и map, и применил их
```
help(divmod)
Help on built-in function divmod in module builtins:
divmod(x, y, /)
Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
divmod(15,4)
(3, 3)
divmod(17,2)
(8, 1)
help(map)
Help on class map in module builtins:
class map(object)
| map(function, iterable, /, *iterables)
|
| Make an iterator that computes the function using arguments from
| each of the iterables. Stops when the shortest iterable is exhausted.
|
| Methods defined here:
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __iter__(self, /)
| Implement iter(self).
|
| __next__(self, /)
| Implement next(self).
|
| __reduce__(self, /)
| Return state information for pickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs)
| Create and return a new object. See help(type) for accurate signature.
map(len,qq)
<map object at 0x000002694337F220>
list(map(len,qq))
[6, 9, 6, 6]
```
## 3. Модуль math
Импортировал модуль и вывел его содержание:
```
import math
dir(math
)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', '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']
```
Применил некоторые функции из модуля, включая factorial
```
math.factorial(5)
120
math.sin(math.pi/2)
1.0
math.acos(math.sqrt(3)/2)
0.5235987755982989
help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
math.degrees(math.pi/2)
90.0
math.radians(90)
1.5707963267948966
math.log(15)
2.70805020110221
math.log(8,2)
3.0
math.exp
<built-in function exp>
math.log10(100)
2.0
math.ceil(25.181926)
26
math.floor(25.181915)
25
```
После применения всех необходимых функций написал инструкцию для вычисления значения выражения sin(2π/7+e0.23 )
```
math.sin((2*math.pi/7)+math.exp(0.23))
0.8334902641414562
```
## 4. Модуль cmath
Испортировал модуль,вывел его содержание и изучил функции вычисления корня и получения фазы комплексного числа
```
import cmath
dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
cmath.phase(1-0.5j)
-0.4636476090008061
```
## 5. Модуль random
Снова импортировал модуль и вывел список функций в модуле:
```
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']
```
Изучил функцию seed, задающую случайное начальное состояние для псевдослучайных чисел:
```
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 (равномерно распределенное случайное число), uniform (равномерно распределенное случайное число), randint (случайные целые числа), gauss (нормально распределенное случайное число), randint (случайное целое число), choice (случайный выбор из совокупности), shuffle (случайная перестановка элементов списка), sample (случайный выбор подмножества элементов), betavariate(случайное число с бета-распределением), gammavariate(случайное число с гамма-распределением).
```
random.random()
0.8415073202155561
help(random.uniform)
Help on method uniform in module random:
uniform(a, b) method of random.Random instance
Get a random number in the range [a, b) or [a, b] depending on rounding.
The mean (expected value) and variance of the random variable are:
E[X] = (a + b) / 2
Var[X] = (b - a) ** 2 / 12
random.uniform(4,13)
12.083229701608595
random.randint(1,4)
1
help(random.randint)
Help on method randint in module random:
randint(a, b) method of random.Random instance
Return random integer in range [a, b], including both end points.
help(random.gauss)
Help on method gauss in module random:
gauss(mu=0.0, sigma=1.0) method of random.Random instance
Gaussian distribution.
mu is the mean, and sigma is the standard deviation. This is
slightly faster than the normalvariate() function.
Not thread-safe without a lock around calls.
random.gauss()
0.9495673914994565
random.gauss(mu=3,sigma=2)
3.7978130361127436
help(random.choice)
Help on method choice in module random:
choice(seq) method of random.Random instance
Choose a random element from a non-empty sequence.
random.choice([1,3,5,2,1,5,7,8,9])
5
random.shuffle([1,3,5,2,1,5,7,8,9])
aa=random.shuffle([1,3,5,2,1,5,7,8,9])
aa
help(random.shuffle)
Help on method shuffle in module random:
shuffle(x) method of random.Random instance
Shuffle list x in place, and return None.
aa=[1,3,5,2,1,5,7,8,9]
random.shuffle(aa)
aa
[5, 1, 7, 5, 3, 8, 9, 1, 2]
random.sample(aa,4)
[1, 3, 5, 5]
help(random.betavariate)
Help on method betavariate in module random:
betavariate(alpha, beta) method of random.Random instance
Beta distribution.
Conditions on the parameters are alpha > 0 and beta > 0.
Returned values range between 0 and 1.
The mean (expected value) and variance of the random variable are:
E[X] = alpha / (alpha + beta)
Var[X] = alpha * beta / ((alpha + beta)**2 * (alpha + beta + 1))
random.betavariate(13,2)
0.9768043355909166
random.gammavariate(4,6)
6.383419053564046
```
Создал список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям:
```
spis=[random.uniform(4,13),random.gauss(mu=3,sigma=2),random.betavariate(13,2),random.gammavariate(4,6)]
spis
[8.823603554451614, 0.9688486416723059, 0.8365506057159969, 10.812180117279787]
```
## Модуль time
```
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']
```
Изучил функцию time, возвращающую время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г.
```
c1=time.time()
c2=time.time()-c1
```
Получил в переменную dat "Всемирное координатное время", и научился обращаться к компонентам получившегося объекта:
```
dat=time.gmtime()
dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=7, tm_min=19, tm_sec=44, tm_wday=0, tm_yday=286, tm_isdst=0)
dat.tm_mon
10
dat.tm_mday
13
dat.tm_wday
0
```
Получил местное время функцией localtime()
```
time.localtime()
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=10, tm_min=21, tm_sec=49, tm_wday=0, tm_yday=286, tm_isdst=0)
```
Изучил функции из модуля time:asctime (преобразование представления времени из кортежа в строку) , ctime (преобразование времени в секундах, прошедшего с начала эпохи, в строку), sleep (прерывание работы программы на заданное время), mktime (преобразование времени из типа кортежа или struct_time в число секунд с начала эпохи).
```
help(time.asctime)
Help on built-in function asctime in module time:
asctime(...)
asctime([tuple]) -> string
Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime()
is used.
time.asctime(time.localtime())
'Mon Oct 13 10:23:33 2025'
help(time.ctime)
Help on built-in function ctime in module time:
ctime(...)
ctime(seconds) -> string
Convert a time in seconds since the Epoch to a string in local time.
This is equivalent to asctime(localtime(seconds)). When the time tuple is
not present, current time as returned by localtime() is used.
time.ctime(156323)
'Fri Jan 2 22:25:23 1970'
time.ctime(1)
'Thu Jan 1 03:00:01 1970'
help(time.sleep)
Help on built-in function sleep in module time:
sleep(object, /)
sleep(seconds)
Delay execution for a given number of seconds. The argument may be
a floating-point number for subsecond precision.
time.sleep(3)
time.mktime(time.localtime())
1760340425.0
```
Преобразование из секунд в местное время также осуществляется функцией localtime:
```
time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=10, tm_min=19, tm_sec=23, tm_wday=0, tm_yday=286, tm_isdst=0)
```
## Графические функции
Импортировал модуль pylab из пакета matplotlib, после чего создал списки и научился создавать графики
```
import pylab
x=list(range(-3,55,4))
t=list(range(15))
pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000002695C316850>]
pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
pylab.xlabel('время')
Text(0.5, 0, 'время')
pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
pylab.show()
```
Сохранил получившийся график в файле Figure0.png
Рассмотрел возможность создания нескольких графиков на одном экране
```
X1=[12,6,8,10,7]
X2=[5,7,9,11,13]
pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x000002695D9BF110>]
pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x000002695D9BF250>]
pylab.show()
```
Сохранил в файл с названием Figure1.png
Построил круговую диаграмму, сохранил результат в файл Figure2.png
```
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000002695C2FD940>, <matplotlib.patches.Wedge object at 0x000002695D2E0B90>, <matplotlib.patches.Wedge object at 0x000002695D2E0F50>, <matplotlib.patches.Wedge object at 0x000002695D2E11D0>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
pylab.show()
```
Изучил функции bar и hist, результаты сохранил в файлы Figure3.png и Figure4.png соответственно
```
pylab.bar(X1,X1)
<BarContainer object of 5 artists>
pylab.show()
pylab.hist(X2,bins=3)
(array([2., 1., 2.]), array([ 5. , 7.66666667, 10.33333333, 13. ]), <BarContainer object of 3 artists>)
pylab.show()
```
## 8.Статистика
Импортировал модуль statistics и применил 3 функции из этого модуля
```
import statistics
dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtuple', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
statistics.mean(X1)
8.6
statistics.correlation(X1,X2)
-0.3939192985791677
statistics.covariance(X1,X2)
-3.0
```

@ -0,0 +1,81 @@
# Общее контрольное задание по Теме 4
Ходюк Максим Романович А-01-23
## Задание
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
### Решение
```
import cmath
divmod(round(cmath.phase(0.2+0.8j),2)*20,3)
(8.0, 2.6000000000000014)
kort = divmod(round(cmath.phase(0.2+0.8j),2)*20,3)
kort
(8.0, 2.6000000000000014)
```
```
MosTime=time.localtime()
MosTime
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=11, tm_min=17, tm_sec=51, tm_wday=0, tm_yday=286, tm_isdst=0)
string='Текущее время по МСК: часы - {}, минуты-{}'
string=string.format(MosTime.tm_hour,MosTime.tm_min)
string
'Текущее время по МСК: часы - 11, минуты-17'
```
```
spis = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
random.sample(spis,3)
['Wednesday', 'Friday', 'Tuesday']
```
```
random.choice(range(14,33,3))
29
```
```
N=random.gauss(15,4)
N
20.856697509675403
N=round(N)
```
```
import string
alf=string.ascii_lowercase
alf
'abcdefghijklmnopqrstuvwxyz'
ALF=list(alf)
ALF
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
spis1=list(random.choice(ALF)for i in range(N))
spis1
['d', 'i', 'g', 'g', 't', 'm', 'c', 'y', 'z', 'm', 'w', 'd', 'j', 'h', 'q', 't', 'k', 'v', 'i', 'r', 'w']
```
```
import time
MosTime1=time.localtime()
MosTime1
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=24, tm_hour=11, tm_min=42, tm_sec=27, tm_wday=4, tm_yday=297, tm_isdst=0)
MosTime2=time.localtime()
MosTime2
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=24, tm_hour=11, tm_min=46, tm_sec=4, tm_wday=4, tm_yday=297, tm_isdst=0)
interval=time.mktime(MosTime2)-time.mktime(MosTime1)
interval
217.0
IntervMin=interval/60
IntervMin
3.6166666666666667
```

@ -0,0 +1,27 @@
# Индивидуальное контрольное задание по Теме 4
Ходюк Максим Романович, А-01-23
## Задание, Вариант 6
Создайте переменную с календарными сведениями для текущего момента времени и выведите информацию в виде строки «Текущая дата: <день>-<месяц>-<год>». Создайте объект со значением 5-2j. Извлеките из него квадратный корень с записью результата в новый объект. Эту операцию выполните с использованием функции exec.
### Выполнение
Создание переменной с календарными сведениями и форматный вывод:
```
import time
MosTime=time.localtime()
LocalDate='Текущая дата:{day}-{month}-{year}'
LocalDate.format(day=MosTime.tm_mday, month=MosTime.tm_mon, year=MosTime.tm_year)
'Текущая дата:24-10-2025'
```
Создание обьекта-комплексного числа и извлечение из него квадратного корня с помощью функции exec
```
import cmath
perem=5-2j
perem
(5-2j)
exec(input("Введите инструкцию для извлечения квадратного корня из комплексного числа в переменной perem и записи в новую переменную: "))
Введите инструкцию для извлечения квадратного корня из комплексного числа в переменной perem и записи в новую переменную: PeremSqrt=cmath.sqrt(perem)
PeremSqrt
(2.27872385417085-0.4388421169022545j)
```

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

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

После

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

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

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

После

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

@ -0,0 +1,10 @@
import random as rn
kort=tuple(range(-24,769,11))
k = 0
spis = []
for i in range(40):
spis.append(rn.choice(kort))
if i>0 and spis[i]>spis[i-1]:
k += 1
print(f'Повышение в списке:{k} раз')

@ -0,0 +1,269 @@
# Отчёт по Теме 5
Ходюк Максим Романович А-01-23
## 2. Ветвление по условию
Применил примеры использования конструкции if:
```
porog = 4
rashod1 = 1
rashod2 = 3
if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
dohod
-8
rashod1 = 3
rashod2 = 4
if rashod1>=3 and rashod2==4:
dohod=rashod1
if rashod2==porog or rashod1<rashod2:
dohod=porog
dohod
4
if porog==3:
dohod=1
elif porog==4:
dohod=2
elif porog==5:
dohod=3
else:
dohod=0
dohod
2
dohod=2 if porog>=4 else 0
dohod
2
if porog>=5 : rashod1=6; rashod2=0
rashod1;rashod2
3
4
```
## 3. Цикл по перечислению
### 3.1.Простой цикл
```
temperatura=5
for i in range(3,18,3):
temperatura+=i
temperatura
50
```
### 3.2. Более сложный цикл
```
sps=[2,15,14,8]
for k in sps:
if len(sps)<=10:sps.append(sps[0])
else:break
sps
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
sps=[2,15,14,8]
for k in sps[:]:
if len(sps)<=10:sps.append(sps[0])
else:break
sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
### 3.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100
```
import random as rn
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
ss
537
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
ss
531
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
410
```
### 3.4. Пример с символьной строкой
```
stroka='Это – автоматизированная система'
stroka1=""
for ss in stroka:
stroka1+=" "+ss
stroka1
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
```
### 3.5. Запись цикла в строке
```
import math
sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
sps2
[0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965]
```
Отображение сигнала на графике:
```
pylab.plot(range(100),sps2)
[<matplotlib.lines.Line2D object at 0x0000027FA0ABEFD0>]
pylab.show()
```
График:
![График](Figure1.png)
## 4. Цикл "пока истинно условие"
### 4.1. Цикл со счетчиком
```
rashod=300
while rashod:
print("Расход=",rashod)
rashod-=50
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```
### 4.2 Пример с символьной строкой
```
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
```
Представление сигнала в виде графика:
```
import pylab
pylab.plot(range(39),sps2)
[<matplotlib.lines.Line2D object at 0x0000027FA129E710>]
pylab.show()
```
График сохранён в файле Figure0.png
### 4.3. Определение, является ли число простым
```
chislo=267
kandidat =chislo // 2
while kandidat > 1:
if chislo%kandidat == 0: # Остаток от деления
print(chislo, ' имеет множитель ', kandidat)
break # else выполняться не будет
kandidat -= 1
else: # При завершении цикла без break
print(chislo, ' является простым!')
267 имеет множитель 89
```
Дополнил программу, чтобы она выводила все простые числа в диапазоне от 250 до 300
```
for chislo in range(250,301):
kandidat = chislo // 2
while kandidat > 1:
if chislo%kandidat == 0:
break
kandidat -= 1
else: print(chislo, ' является простым!')
251 является простым!
257 является простым!
263 является простым!
269 является простым!
271 является простым!
277 является простым!
281 является простым!
283 является простым!
293 является простым!
```
### Использование инструкции continue
```
print("Нечетные числа от 1 до 10:")
Нечетные числа от 1 до 10:
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)
1
3
5
7
9
```

@ -0,0 +1,73 @@
# Общее контрольное задание по Теме 5
Ходюк Максим Романович А-01-23
## Задание
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
### Выполнение
Создание символьной строки и определение порядкового номера в алфавите:
```
text = 'You cannot kill me! I am Omega! You cannot kill me! I am Subhuman!'
from string import ascii_lowercase
for el in text:
index = ascii_lowercase.find(el.lower())
if index != -1:
print( index + 1, end = '_')
else:
print(el, end='')
25_15_21_ 3_1_14_14_15_20_ 11_9_12_12_ 13_5_! 9_ 1_13_ 15_13_5_7_1_! 25_15_21_ 3_1_14_14_15_20_ 11_9_12_12_ 13_5_! 9_ 1_13_ 19_21_2_8_21_13_1_14_!
```
Список со словами из пункта задания и поиск в нём заданного слова
```
words = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
KeyWord = input('Введите слово, искомое в списке: ')
Введите слово, искомое в списке: Создайте
if KeyWord in words:
res='присутствует в списке'
else:res='отсутствует в списке'
print(f'слово {KeyWord} {res}')
слово Создайте присутствует в списке
KeyWord = input('Введите слово, искомое в списке: ')
Введите слово, искомое в списке: ДАНТЕ
if KeyWord in words:
res='присутствует в списке'
else:res='отсутствует в списке'
print(f'слово {KeyWord} {res}')
слово ДАНТЕ отсутствует в списке
```
Список из фамилий и оценок на сессиях, вывод по указанной фамилии средних баллов студента:
```
surnames1 = ['Коваленко', 'Лыкова', 'Ходюк']
marks1 = [5, 4, 5]
surnames2 = ['Лыкова', 'Ходюк', 'Коваленко']
marks2 = [4.5, 4.2, 5]
student = input('Введите фамилию студента: ')
Введите фамилию студента: Спардович
if student in surnames1:
print(f'Средний балл введённого студента за летнюю сессию - {marks1[surnames1.index(student)]}, а за зимнюю сессию - {marks2[surnames2.index(student)]}')
else:
print(f'Студента {student} не существует')
Студента Спардович не существует
student = input('Введите фамилию студента: ')
Введите фамилию студента: Лыкова
if student in surnames1:
print(f'Средний балл введённого студента за летнюю сессию - {marks1[surnames1.index(student)]}, а за зимнюю сессию - {marks2[surnames2.index(student)]}')
else:
print(f'Студента {student} не существует')
Средний балл введённого студента за летнюю сессию - 4, а за зимнюю сессию - 4.5
```

@ -0,0 +1,36 @@
# Индивидуальное контрольное задание по Теме 5
Ходюк Максим Романович А-01-23
## Задание,Вариант 20
Создайте кортеж с целыми числами в диапазоне от -24 до 768 через 11. Напишите инструкцию создания списка с 40 случайно выбранными элементами из кортежа. Подсчитайте, сколько раз в этом списке последующий элемент оказался больше предыдущего. Отобразите результат в виде строки вида: «Повышение в списке: ХХХ раз».
### Выполнение
Скрипт для выполнения данного задания в файле [TestCode.py](TestCode.py)
```
kort=tuple(range(-24,769,11))
kort
(-24, -13, -2, 9, 20, 31, 42, 53, 64, 75, 86, 97, 108, 119, 130, 141, 152, 163, 174, 185, 196, 207, 218, 229, 240, 251, 262, 273, 284, 295, 306, 317, 328, 339, 350, 361, 372, 383, 394, 405, 416, 427, 438, 449, 460, 471, 482, 493, 504, 515, 526, 537, 548, 559, 570, 581, 592, 603, 614, 625, 636, 647, 658, 669, 680, 691, 702, 713, 724, 735, 746, 757, 768)
k = 0
spis = []
import random as rn
for i in range(40):
spis.append(rn.choice(kort))
if i>0 and spis[i]>spis[i-1]:
k += 1
spis
[757, 383, 757, 64, 185, 372, 262, 724, 350, 53, 306, 614, -2, 53, 416, 97, 262, 416, 350, 64, 394, 20, 405, 493, 207, 493, 86, 768, 757, -2, 119, 339, 306, 361, 713, 229, 119, 240, 53, 548]
k
21
len(spis)
40
print(f'Повышение в списке:{k} раз')
Повышение в списке:21 раз
======================= RESTART: D:\POAS\Hodyuk\Tema5\TestCode.py ======================
Повышение в списке:16 раз
======================= RESTART: D:\POAS\Hodyuk\Tema5\TestCode.py ======================
Повышение в списке:19 раз
```

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

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

@ -0,0 +1 @@
<EFBFBD>ףללא ‎כולוםעמג סןטסךא = -80.4 והטםטצ

Двоичные данные
TEMA6/OPLATA.dbf

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

@ -0,0 +1,13 @@
-6.301
-8.685
-4.592
-7.139
-5.445
-7.428
-7.014
-5.985
-5.544
-7.975
-4.388
-4.993
-4.873

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

@ -0,0 +1,29 @@
import os
os.chdir('D:\\POAS\\Hodyuk\\Tema6\\')
import random as rn
kort = []
for i in range(125): kort.append(str(rn.choice(range(6,57))))
kort = tuple(kort)
spis = ['Hodyuk','Timoshenko','Kovalenko','Lykova','Ivanov']
fp = open('TestDan.mnz','wb')
if !fp.closed:
pickle.dump(kort,fp)
pickle.dump(spis,fp)
fp.close()
fp = open('TestDan.mnz','rb')
if !fp.closed:
kort1=pickle.load(fp)
spis1=pickle.load(fp)
if kort1==kort and spis1==spis:
print("новые обьекты совпадают с теми, что были записаны в файл")
else:
print("Ошибка записи или чтения")
fp.close()
for i in range(len(kort)//5):
exec('list' + str(i) + '=' + str(list(kort[i:i+5])))

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

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,468 @@
# Отчёт по Теме 6
Ходюк Максим Романович А-01-23
## Пункт 1
Запустил среду IDLE и выставил рабочий каталог:
```
import os
os.chdir('D:\\POAS\\Hodyuk\\Tema6\\')
```
## Пункт 2
### 2.1. Вывод в командной строке
```
stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'
```
Данный способ вывода называется Эхо-выводом
### 2.2 Функция print
Пример использования
```
fff=234.5;gg='Значение температуры = '
print(gg, fff)
Значение температуры = 234.5
```
Можно изменить разделитель при выводе аргументом sep и символы, оканчивающие вывод с помощью аргумента end
```
print(gg, fff, sep='/')
Значение температуры = /234.5
print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
print()
```
Оператор вывода может располагаться на нескольких строках:
```
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
### 2.3 Функция write
Импортирую модуль sys и применяю функцию write
```
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
## Пункт 3. Функция input (ввод с клавиатуры)
```
psw=input('Введите пароль:')
Введите пароль: 12345
psw
' 12345'
```
Пример 1. Ввод с контролем значения
```
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 20
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 3
Ошибка!
Задайте коэф.усиления = 5
Ошибка!
Задайте коэф.усиления = 19
```
Пример 2. Ввод и обработка выражения
```
import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## Пункт 4.
### 4.1 Функции для работы с путём к файлу
Модуль os был импортирован ранее, а также выставлен рабочий каталог, поэтому сразу перейду к использованию других функций в этом модуле
Использование функции для создания и удаления каталога:
```
os.mkdir('gg')
```
На рис.1 представлен скриншот созданного каталога gg
Рис. 1:
![Рис 1.](photo1.png)
```
os.rmdir('gg')
```
На рис. 2 представлен скриншот после выполнения функций удаления каталога
Рис. 2:
![Рис 2.](photo2.png)
Использовал функцию для выводе всех файлов, находящихся в выбранном каталоге(при пустых аргументах выдаёт содержимое рабочего каталога)
```
os.listdir()
['photo1.png', 'photo2.png', 'report.md']
```
Использования функции isdir из модуля os.path (для проверки наличия подкаталога в каталоге)
```
help(os.path.isdir)
Help on built-in function _path_isdir in module nt:
_path_isdir(s)
Return true if the pathname refers to an existing directory.
os.mkdir('test_isdir')
os.path.isdir('test_isdir')
True
```
Пусть в рабочем каталоге находится файл OPLATA.DBF. С помощью функции os.path.abspath можно получить символьную строку, содержащую имя файла вместе с полным путем доступа к нему:
```
fil=os.path.abspath("oplata.dbf")
fil
'D:\\POAS\\Hodyuk\\Tema6\\oplata.dbf'
fil=os.path.abspath("photo1.png")
fil
'D:\\POAS\\Hodyuk\\Tema6\\photo1.png'
```
Выделил путь доступа к файлу из строки с помощью следующей функции:
```
drkt=os.path.dirname(fil)
drkt
'D:\\POAS\\Hodyuk\\Tema6'
```
Далее выделил имя файла из этой строки
```
bn=os.path.basename(fil)
bn
'photo1.png'
```
Самостоятельно применил функцию os.path.split
```
help(os.path.split)
Help on function split in module ntpath:
split(p)
Split a pathname.
Return tuple (head, tail) where tail is everything after the final slash.
Either part may be empty.
os.path.split(fil)
('D:\\POAS\\Hodyuk\\Tema6', 'photo1.png')
```
Функция возвращает кортёж из пути доступа к файлу и его имени, отделив их друг от друга
С помощью функции os.path.exists можно проверить существует ли путь, заданный в символьной строке – аргументе функции.
```
os.path.exists(drkt)
True
os.path.exists('D:test\\wrong\\way\\')
False
```
Проверил наличие файла с известным расположением(если как аргумент задать только имя файла, функция будет искать файл в рабочем каталоге)
```
os.path.isfile(fil)
True
os.path.isfile(os.path.dirname(fil)+'fil1.txt')
False
```
### 4.2 Общая схема работы с файлом
Для обмена данными с файлом необходимо выполнить следующие операции:
• Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
• Выполнение одной или нескольких операций обмена данными с файлом;
• Закрытие файла.
### 4.3 Открытие файла для записи или чтения - функция open
Открыл файл zapis1.txt для записи данных
```
fp=open(file=drkt+'\\zapis1.txt',mode='w')
```
Проверил наличие открываемого файла:
```
os.path.isfile(drkt+'\\zapis1.txt')
True
```
Вообще говоря, аргументы функции с их именами могут располагаться в любом порядке. Если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать и просто вводить
```
fp=open(drkt+'\\zapis1.txt','w')
```
С помощью функции closed проверил, открыт ли файл(соответственно, если функция возвращает True - файл закрыт, а если False - то открыт). Далее буду использовать этот способ для проверки открытия файла
```
fp.closed
False
```
Если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла:
```
fp=open('zapis1.txt','w')
fp.closed
False
```
Отобразил тип и список атрибутов объекта fp
```
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']
```
Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b».
```
fp1=open(drkt+'\\zapis2.bin',mode='wb+')
fp1.closed
False
```
### 4.4 Закрытие файла
```
fp.close()
fp.closed
True
```
### 4.5 Запись в файл с помощью функции write
Рассмотрел пример создания списка и записи его в файл
```
sps=list(range(1,13))
sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
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()
```
Содержимое файла [zapis3.txt](zapis3.txt) представлено на рис.3
Рис. 3:
![Рис.3](photo3.png)
Следующий пример
```
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()
```
Содержимое файла [zapis4.txt](zapis4.txt) представлено на рис.4
Рис. 4:
![Рис.4](photo4.png)
Легко заметить, что информация записана в файл не очень удачно.
Пробую записать информацию в файл другим способом
```
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
```
Содержимое файла [zapis5.txt](zapis5.txt) представлено на рис.5
Рис. 5:
![Рис.5](photo5.png)
Представил цикл в одной строке:
```
gh=open('zapis5.txt','w')
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
```
После выполнения цикла содержимое файла такое же, как было
### 4.6 Чтений информации из текстового файла: Способ Первый
Прочитал информацию из созданного ранее файла zapis3.txt
```
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()
sps1
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
```
Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки, а с помощью метода replace – скобки.
Видно, что полученный список отличается от исходного sps, в первую очередь, типом данных
Преобразовать sps1 в sps можно, например, так:
```
sps2 = [int(i.strip()) for i in sps1]
sps2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
### 4.7 Чтение с помощью метода read
```
fp=open('zapis3.txt')
stroka1=fp.read(12)
stroka2=fp.read()
fp.close()
stroka1
'[1, 2, 3, 4]'
stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
```
### 4.8 Самостоятельно изучил чтение информации с помощью методов readline и readlines
```
fp=open('zapis3.txt')
stroka3=fp.readline()
stroka3
'[1, 2, 3, 4]\n'
stroka4=fp.readline()
stroka4
'[5, 6, 7, 8]\n'
strokaAll=fp.readlines()
strokaAll
['[9, 10, 11, 12]\n']
fp.close()
fp=open('zapis3.txt')
strokaAll=fp.readlines()
strokaAll
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
### 4.9 Ввод-вывод с помощью модуля pickle
Пример этого способа работы с файлами
```
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'}
fp=open('zapis6.mnz','wb')
fp.closed
False
pickle.dump(mnoz1,fp)
fp.close()
```
Теперь прочитаю из файла zapis6.mnz
```
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
mnoz2
{'book', 'pen', 'table', 'iPhone'}
mnoz1 == mnoz2
True
```
Как можно заметить, визуально файлы отличаются, но проверка на совпадение выдаёт результат True
mnoz2 не совпадает с тем, что было задано, потому что это множество. Оно исключает повторяющиеся элементы, оставляя только один, а еще не содержит конкретный порядок элементов. Но два множества равны, если у них равны все элементы и их одинаковое количество, вне зависимости от порядка, так что сравнение возвращает True.
А теперь с использованием тех же функций запишите в файл, а затем прочитайте два объекта разных типов: то же множество mnoz1 и ранее созданный список sps3.
```
fp=open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
pickle.dump(sps3,fp)
fp.close()
fp=open('zapis7.2ob','rb')
obj1=pickle.load(fp)
obj2=pickle.load(fp)
fp.close()
obj1,obj2
({'book', 'pen', 'table', 'iPhone'}, [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]])
obj1 == mnoz1
True
obj2 == sps3
True
```
Убедился в совпадении прочитанных данных с введёнными
## Пункт 5. Перенаправление потоков ввода и вывода
Пример 1
```
vr_out=sys.stdoutmnoz1
fc=open('Stroka.txt','w')
sys.stdout=fc
print('запись строки в файл')
sys.stdout=vr_out
print('запись строки на экран')
запись строки на экран
fc.close()
```
В результате получаю файл [Stroka.txt](Stroka.txt) со следующим содержанием
Рис. 6:
![Рис.6](photo6.png)
Точно также можно перенаправить поток ввода – sys.stdin – вместо клавиатуры – из файла.
```
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,87 @@
# Общее контрольное задание по Теме 6
Ходюк Максим Романович А-01-23
## Задание
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
• Записывается кортеж в бинарный файл.
• Записывается в этот же файл список и закрывается файл.
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
### Выполнение
Скрипт для выполнения OKZ в файле [TaskCode.py](TaskCode.py)
Создание необходимого кортежа
```
import random as rn
kort = []
for i in range(125): kort.append(str(rn.choice(range(6,57))))
kort
['34', '35', '31', '40', '51', '53', '18', '19', '42', '51', '18', '16', '20', '56', '21', '37', '29', '19', '22', '48', '31', '47', '40', '42', '51', '28', '20', '36', '37', '33', '14', '21', '9', '24', '16', '46', '38', '15', '37', '49', '48', '21', '45', '10', '55', '7', '33', '53', '42', '31', '56', '32', '8', '53', '7', '20', '45', '52', '11', '52', '28', '18', '8', '30', '30', '17', '36', '25', '47', '44', '25', '40', '27', '18', '20', '12', '53', '30', '20', '45', '17', '12', '21', '36', '45', '32', '30', '7', '48', '36', '12', '10', '30', '19', '19', '30', '12', '42', '52', '9', '55', '44', '22', '6', '38', '27', '27', '38', '55', '41', '52', '16', '6', '16', '43', '30', '33', '18', '12', '28', '29', '29', '28', '11', '6']
kort = tuple(kort)
kort
('34', '35', '31', '40', '51', '53', '18', '19', '42', '51', '18', '16', '20', '56', '21', '37', '29', '19', '22', '48', '31', '47', '40', '42', '51', '28', '20', '36', '37', '33', '14', '21', '9', '24', '16', '46', '38', '15', '37', '49', '48', '21', '45', '10', '55', '7', '33', '53', '42', '31', '56', '32', '8', '53', '7', '20', '45', '52', '11', '52', '28', '18', '8', '30', '30', '17', '36', '25', '47', '44', '25', '40', '27', '18', '20', '12', '53', '30', '20', '45', '17', '12', '21', '36', '45', '32', '30', '7', '48', '36', '12', '10', '30', '19', '19', '30', '12', '42', '52', '9', '55', '44', '22', '6', '38', '27', '27', '38', '55', '41', '52', '16', '6', '16', '43', '30', '33', '18', '12', '28', '29', '29', '28', '11', '6')
```
Создание списка
```
spis = ['Hodyuk','Timoshenko','Kovalenko','Lykova','Ivanov']
```
Открытие бинарного файла [TestDan.mnz](TestDan.mnz) и запись в него кортежа и списка, после чего закрытие файла(атрибутом .closed роисходит проверка на то,удалось ли программе открыть файл)
```
fp = open('TestDan.mnz','wb')
fp.closed
False
pickle.dump(kort,fp)
pickle.dump(spis,fp)
fp.close()
fp.closed
True
```
Открытие файла для чтения из него в новые объекты данных, записанных в него
```
fp = open('TestDan.mnz','rb')
kort1=pickle.load(fp)
spis1=pickle.load(fp)
kort1
('34', '35', '31', '40', '51', '53', '18', '19', '42', '51', '18', '16', '20', '56', '21', '37', '29', '19', '22', '48', '31', '47', '40', '42', '51', '28', '20', '36', '37', '33', '14', '21', '9', '24', '16', '46', '38', '15', '37', '49', '48', '21', '45', '10', '55', '7', '33', '53', '42', '31', '56', '32', '8', '53', '7', '20', '45', '52', '11', '52', '28', '18', '8', '30', '30', '17', '36', '25', '47', '44', '25', '40', '27', '18', '20', '12', '53', '30', '20', '45', '17', '12', '21', '36', '45', '32', '30', '7', '48', '36', '12', '10', '30', '19', '19', '30', '12', '42', '52', '9', '55', '44', '22', '6', '38', '27', '27', '38', '55', '41', '52', '16', '6', '16', '43', '30', '33', '18', '12', '28', '29', '29', '28', '11', '6')
spis1
['Hodyuk', 'Timoshenko', 'Kovalenko', 'Lykova', 'Ivanov']
```
Проверка на совпадение новых переменных с записываемыми
```
if kort1==kort and spis1==spis:
print("новые обьекты совпадают с теми, что были записаны в файл")
else:
print("Ошибка записи или чтения")
```
новые обьекты совпадают с теми, что были записаны в файл
```
fp.close()
```
Разделение кортежа на совокупность списков по 5 чисел, проверка их наличия в памяти
```
for i in range(len(kort)//5):
exec('list' + str(i) + '=' + str(list(kort[i:i+5])))
list1
['35', '31', '40', '51', '53']
list0
['34', '35', '31', '40', '51']
list6
['18', '19', '42', '51', '18']
list25
['28', '20', '36', '37', '33']
```

@ -0,0 +1,123 @@
# Индивидуальное контрольное задание по Теме 6
Ходюк Максим Романович, А-01-23
## Задание, Вариант 12
M2_12
1) Создайте список с 25 случайными элементами, подчиняющимися нормальному распределению с математическим ожиданием -6.7 и стандартным отклонением 1.23. Округлите значения элементов до 3-х знаков после точки.
2) Из элементов списка с нечетными индексами сформируйте кортеж и запишите его в бинарный файл. Остальные элементы запишите в текстовый файл по одному числу на строке.
3) Удалите из памяти список и кортеж.
4) Прочитайте числа из текстового файла с записью их в список. Рассчитайте сумму элементов списка. Отобразите результат расчета по шаблону: " Сумма элементов списка=<значение> единиц". Выводите значение с точностью до одного знака после точки.
5) Запишите это же сообщение в текстовый файл с именем, совпадающим с именем бинарного файла, и с расширением ТХТ.
### Выполнение
Создание списка:
```
import random
spis=[]
for i in range(25):
spis.append(round(random.gauss(mu=-6.7,sigma=1.23),3))
spis
[-6.301, -8.251, -8.685, -5.54, -4.592, -5.929, -7.139, -5.715, -5.445, -9.013, -7.428, -6.661, -7.014, -5.691, -5.985, -5.061, -5.544, -5.526, -7.975, -7.513, -4.388, -8.961, -4.993, -6.828, -4.873]
```
Создание кортежа:
```
kort=()
SpisToKort= []
for i in range(1,25,2):
SpisToKort.append(spis[i])
kort = tuple(SpisToKort)
kort
(-8.251, -5.54, -5.929, -5.715, -9.013, -6.661, -5.691, -5.061, -5.526, -7.513, -8.961, -6.828)
```
Запись в файлы [KORT.mnz](KORT.mnz) и [SPIS.txt](SPIS.txt) необходимых данных:
```
import os
os.chdir('D:\\POAS\\Hodyuk\\TEMA6\\')
fpK=open('KORT.mnz','wb+')
import pickle
pickle.dump(kort,fpK)
fpK.close()
fpS=open('SPIS.txt','w')
for i in range(0,25,2):
fpS.write(str(spis[i])+'\n')
7
7
7
7
7
7
7
7
7
7
7
7
7
fpS.close()
```
Удаление списка и кортежа из памяти и проверка наличия:
```
del spis
del kort
spis
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
spis
NameError: name 'spis' is not defined
kort
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
kort
NameError: name 'kort' is not defined
```
Чтение данных из файла [SPIS.txt](SPIS.txt)
```
fpS=open('SPIS.txt','r')
for i in range(0,25,2):
chislo= fpS.readline()
chislo=chislo.rstrip('\n')
chislo=float(chislo)
NewSpis.append(chislo)
NewSpis
[-6.301, -8.685, -4.592, -7.139, -5.445, -7.428, -7.014, -5.985, -5.544, -7.975, -4.388, -4.993, -4.873]
fpS.close()
```
Вычисление суммы элементов списка и вывод сообщения с округлением суммы до 1 знака после запятой
```
summa=sum(NewSpis)
summa
-80.362
print(f'Сумма элементов списка = {round(summa,1)} единиц')
Сумма элементов списка = -80.4 единиц
```
Вывод того же сообщения в файл [KORT.txt](KORT.txt)
```
fp = open('KORT.txt','w')
import sys
vr_out=sys.stdout
sys.stdout=fp
print(f'Сумма элементов списка = {round(summa,1)} единиц')
sys.stdout=vr_out
fp.close()
```

Двоичные данные
TEMA6/zapis1.txt

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

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

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

@ -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

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

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

После

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

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

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

После

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

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

@ -0,0 +1,83 @@
# Общее контрольное задание по Теме 7
Ходюк Максим Романович А-01-23
## Задание
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с за-держкой на заданное время Т.
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращае-мый результат функции: список с числами элементов выборки в интервалах разбиения.
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
### Решение
#### Пункт 1:
```
def DelayDevice(x,T):
Delayed = x.copy()
if T<len(x):
Delayed = [0]*T+x[:-T]
else:
Delayed = [0]*len(x)
return Delayed
import random as rn
x = [rn.gauss(3, 1.5) for i in range(40)]
x
[3.1589137709718664, 0.15786881651624274, 3.655937104939686, 1.3856988790368416, 2.4149579106455343, 3.568139429890449, 0.6502982925728604, 2.1288342216840332, 0.10248162468353073, 5.438586993036432, 1.297796576373099, 3.514772803475419, 0.3936488059210079, 3.3886107922050206, 2.673091880093213, 4.618651491868087, 4.317410501200125, 3.0369790324418533, 2.6505882683872373, 2.526249500767949, 4.45594490411977, 3.0154987709680396, 1.60901116619933, 3.686469689169056, 2.66935184492142, 0.8004068095518924, -0.06600109304723034, 0.8947107481055605, 4.979471939334061, 2.8688993459163132, 1.7797761176870224, 1.1081847381986072, 4.7503090811221185, 5.261889235788347, 2.715216417011531, 4.564748747903588, 2.32931481167102, 5.32068272026709, 3.686288757113939, 3.7262748782542134]
y = DelayDevice(x,3)
y
[0, 0, 0, 3.1589137709718664, 0.15786881651624274, 3.655937104939686, 1.3856988790368416, 2.4149579106455343, 3.568139429890449, 0.6502982925728604, 2.1288342216840332, 0.10248162468353073, 5.438586993036432, 1.297796576373099, 3.514772803475419, 0.3936488059210079, 3.3886107922050206, 2.673091880093213, 4.618651491868087, 4.317410501200125, 3.0369790324418533, 2.6505882683872373, 2.526249500767949, 4.45594490411977, 3.0154987709680396, 1.60901116619933, 3.686469689169056, 2.66935184492142, 0.8004068095518924, -0.06600109304723034, 0.8947107481055605, 4.979471939334061, 2.8688993459163132, 1.7797761176870224, 1.1081847381986072, 4.7503090811221185, 5.261889235788347, 2.715216417011531, 4.564748747903588, 2.32931481167102]
```
#### Пункт 2:
```
def histog(Data, NumOfBins):
PartIntervals = np.linspace(min(Data),max(Data),NumOfBins+1)
Bins = [0]*NumOfBins
for x in Data:
for i in range(NumOfBins):
if PartIntervals[i]<= x < PartIntervals[i+1]:
Bins[i] += 1
break
if x == max(Data):
Bins[-1] += 1
return Bins, PartIntervals
import matplotlib.pyplot as plt
data = [rn.gauss(rn.random(), rn.random()) for i in range(rn.randint(10,200))]
data
[0.5378216995683558, 1.1641589082566997, 0.9147103596009363, 0.5776633502983135, 0.2792996433359695, -0.5380463152699617, -0.11398986117548277, 0.464250090411372, -0.1180243219953355, 0.9392621334129809, 0.2602467488731561, 0.11137063002511538, 1.0143704999861716, 0.9405864021219105, 0.30064634170255167, 0.8562856595996535, 0.051083247475117444, 0.34072284772951444, -0.5532354093325268, 0.6866962172012473, 0.8965397875222096, 0.9929453387120099, -0.5953523836268519, 0.8021587960226041, 1.9546837866138094, -0.7424097094091009, -0.0956552481747655, 0.6924390955614415, 1.0250337911920306, 0.8275003913021624, 0.10994750512663758, 0.5289757668604967, 0.26799949912357107, 0.37973524002087466, 1.5113353518207422, 1.1939154246440982, -0.8249955650037828, 1.126892111969929, -1.016215293110937, 0.9759837638837126, 0.6950225161885795, 0.7572837212456087, -0.5265904134149108, 2.457010568216869, 0.44672225119196785, -0.5509641066519938, 0.4696290378726147, 0.8814765811801879, 0.6762491768403642, 0.17190218474929633, 0.8218627371754621, 0.5416170394630445, 0.9114921616592224, 0.3544816188119451, 0.4756829010056257, 0.00782646665602904, 1.2358999602753222, 0.8083393494705281, 1.2588457987982808, 0.805988133090431, 0.16219883634120713, 0.4518205658327258, 0.1599602558137734, 0.5097603200711073, -0.4610511433897865, -0.3819260879741204, 1.5600558952457446, 0.339825431792831, -0.17078684174281955, 0.20058378403870256, 1.0033775253872794, 1.0724613439660726, 0.032684733867573895, -0.7728994174164051, 0.48671452779023466, 0.9724145477348829, 1.135568097372498, 0.7199643203270871, -0.3531333720621094, 1.072205774213457, 0.7677224563206929, 1.0049793264905427, 1.8202742272818593, 1.8932219658939857, 0.6290284540098144, 1.312187448195754, -1.0052240958876464, -0.2512858370869674, 0.5643550634286253, 0.9573448967654771, 0.31651970752940917, 0.9738021341667136, 0.6345303352005807, -1.1491797486267818, 0.7906710751543553, 0.33372584330754596, 0.058350198023357724, 0.9341769987228196, 0.4012483646843851, -0.005374018323411889, 0.744254234579628, 0.12330272842228102, 0.6786227936939597, -0.37632710171874495, 0.9245031060710469, 0.8035701765839196, 2.6078433227329296, 0.07119641031349294, 0.6102599343061698, 0.49953869236728743, 0.5448863221554354, 0.4586548778361403, 0.7942965401929633, 0.31567333732179226, 0.32774877428259147, 0.25933335901074467, 1.0225612714563157, 1.374256108299675, 0.3097228764845623, 0.13431896141567445, 0.924405334005902, -0.22299081295116258, 0.7964179022876605, 1.1184587921307172, 0.779729411597617, 0.8926712397832665, -0.17674282596964386, 0.8829109759002627, 0.8186014299523164, -0.057807379612117044, -0.04785851777817823, 1.2294159898452923, -0.13041631377597987, 0.6675005746749451, 0.9915678237703984]
N = int(input('Введите количество интервалов разбиения'))
Введите количество интервалов разбиения 5
import numpy as np
bins, partintervals = histog(data,N)
plt.hist(data, bins=partintervals)
(array([12., 39., 67., 13., 4.]), array([-1.14917975, -0.39777513, 0.35362948, 1.10503409, 1.85643871,
2.60784332]), <BarContainer object of 5 artists>)
plt.xlabel('Значения выборки')
Text(0.5, 0, 'Значения выборки')
plt.ylabel('Число элементов')
Text(0, 0.5, 'Число элементов')
plt.title('Гистограмма выборки')
Text(0.5, 1.0, 'Гистограмма выборки')
plt.show()
print("кол-во элементов в корзинах:", bins)
кол-во элементов в корзинах: [12, 39, 67, 13, 4]
```
Полученный график:
![Figure1.png](Figure1.png)
#### Пункт 3:
```
LinRegr = lambda b1,b2,X: b1+b2*X
b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
Введите коэффициент b1 линейной регрессии: 5
b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
Введите коэффициент b2 линейной регрессии: 7
X = float(input("Введите значение x: "))
Введите значение x: 12
print(LinRegr(b1,b2,X))
89.0
```

@ -0,0 +1,39 @@
# Индивидуальное контрольное задание по Теме 7
Ходюк Максим Романович А-01-23
## Задание
Вариант 5
Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигна-ла x по формуле: y=0 при -B≤x≤B, y=x - B при x>B, y=x+B при x<-B. Создайте список со 100 значениями входного сигнала х случайными, нормально распределенными числами с мате-матическим ожиданием 0.5 и дисперсией 25. Для элементов списка с помощью функции рас-считайте список со значениями выходного сигнала y при В=4.5. Записать результаты в тексто-вый файл в виде двух столбцов: хi, yi.
### Выполнение
Создание функции:
```
def transform(x,B):
y = []
for xi in x:
if -B<=xi<=B:
y.append(0)
elif xi>B:
y.append(xi-B)
else:
y.append(xi+B)
return y
```
Создание данных и применение функции
```
import random as rn
import math
x = [rn.gauss(0.5,math.sqrt(25)) for i in range(100)]
x
[0.26397882118320026, 2.5669334322451287, 1.458303017652087, 8.610013575540764, -8.138607057785759, 3.432294826411966, 11.2276125902589, 4.730306952360786, 4.161136447888679, 6.901374205465032, -1.0126061327352323, -1.6125262920643002, 0.9206192155603055, -5.103701726056998, -3.252867614279044, -11.065716944607981, 4.366773668680859, 4.76989751550616, -4.484818214302562, 4.6371364240509685, -12.114476940364137, -3.213637816226469, 2.2020194476802963, -1.0605781700564538, 1.6260043158745168, -7.667450696462312, 10.521122887098112, 2.518672711827453, 2.501786002073765, -4.862413182269662, 0.8355437456938446, 4.191578422423441, 2.8948229334279016, 7.9844076987958505, 4.923356571370169, 9.363777242099875, -1.8133151178346925, -6.240180360161059, -1.7279981467691283, -6.022669361417824, 2.4830020464089855, 10.547024490013719, 9.149740686920369, -0.255190723006106, -0.5421597668067644, -0.859942656635438, 1.9278193949999298, 7.804755032116398, 6.646134977368288, 8.190999570566689, 0.6003283454307713, -0.20593312281412546, -5.197889647622478, 3.8343550269905804, -9.531535689308328, 1.325784085494855, 0.5534870659018295, -7.102874222066001, -13.675762550943762, 3.9636575618555803, -1.749294987934169, 1.2030521567236219, 6.232233252361516, -8.400948358967225, -0.0401645842059255, 7.029215929691404, 11.192892070385724, 6.096802546687919, 6.426480403802853, -9.26147331014739, -1.4716299105736765, -3.1840381441570633, -2.3059280944683342, 6.164419831200721, 5.681731221213691, -0.1669023554988457, -6.081636275522419, 3.3173364492848805, 3.6957709191976957, 10.289002607429847, 3.897251367951322, -9.728289414967538, -0.5357291708806988, -6.635059244643971, 3.4328517368277622, 1.0423563347617755, -0.36800794583401675, 2.6924764746597685, 1.434281875577846, -0.6660585695563244, 8.375208669468924, 0.5656132745209681, 13.852985702287752, 0.3122876528114459, -3.079416106753241, -7.846632087876243, 6.191694931110419, 3.83634269275283, -4.2409001708395815, -0.8595283155417268]
y = transform(x,4.5)
y
[0, 0, 0, 4.110013575540764, -3.6386070577857588, 0, 6.7276125902589, 0.23030695236078635, 0, 2.401374205465032, 0, 0, 0, -0.6037017260569977, 0, -6.565716944607981, 0, 0.2698975155061598, 0, 0.1371364240509685, -7.614476940364137, 0, 0, 0, 0, -3.1674506964623124, 6.021122887098112, 0, 0, -0.3624131822696617, 0, 0, 0, 3.4844076987958505, 0.423356571370169, 4.863777242099875, 0, -1.7401803601610588, 0, -1.5226693614178242, 0, 6.047024490013719, 4.649740686920369, 0, 0, 0, 0, 3.3047550321163977, 2.1461349773682876, 3.6909995705666887, 0, 0, -0.6978896476224783, 0, -5.031535689308328, 0, 0, -2.602874222066001, -9.175762550943762, 0, 0, 0, 1.7322332523615156, -3.9009483589672254, 0, 2.5292159296914036, 6.692892070385724, 1.5968025466879192, 1.9264804038028531, -4.761473310147389, 0, 0, 0, 1.6644198312007212, 1.181731221213691, 0, -1.5816362755224187, 0, 0, 5.789002607429847, 0, -5.228289414967538, 0, -2.135059244643971, 0, 0, 0, 0, 0, 0, 3.8752086694689236, 0, 9.352985702287752, 0, 0, -3.346632087876243, 1.691694931110419, 0, 0, 0]
```
Запись данных в файл [test_file.txt](test_file.txt):
```
file = open('test_file.txt','w')
if not file.closed:
for i in range(100):
file.write(f'{x[i]} {y[i]} \n')
file.close()
```

@ -0,0 +1,100 @@
0.26397882118320026 0
2.5669334322451287 0
1.458303017652087 0
8.610013575540764 4.110013575540764
-8.138607057785759 -3.6386070577857588
3.432294826411966 0
11.2276125902589 6.7276125902589
4.730306952360786 0.23030695236078635
4.161136447888679 0
6.901374205465032 2.401374205465032
-1.0126061327352323 0
-1.6125262920643002 0
0.9206192155603055 0
-5.103701726056998 -0.6037017260569977
-3.252867614279044 0
-11.065716944607981 -6.565716944607981
4.366773668680859 0
4.76989751550616 0.2698975155061598
-4.484818214302562 0
4.6371364240509685 0.1371364240509685
-12.114476940364137 -7.614476940364137
-3.213637816226469 0
2.2020194476802963 0
-1.0605781700564538 0
1.6260043158745168 0
-7.667450696462312 -3.1674506964623124
10.521122887098112 6.021122887098112
2.518672711827453 0
2.501786002073765 0
-4.862413182269662 -0.3624131822696617
0.8355437456938446 0
4.191578422423441 0
2.8948229334279016 0
7.9844076987958505 3.4844076987958505
4.923356571370169 0.423356571370169
9.363777242099875 4.863777242099875
-1.8133151178346925 0
-6.240180360161059 -1.7401803601610588
-1.7279981467691283 0
-6.022669361417824 -1.5226693614178242
2.4830020464089855 0
10.547024490013719 6.047024490013719
9.149740686920369 4.649740686920369
-0.255190723006106 0
-0.5421597668067644 0
-0.859942656635438 0
1.9278193949999298 0
7.804755032116398 3.3047550321163977
6.646134977368288 2.1461349773682876
8.190999570566689 3.6909995705666887
0.6003283454307713 0
-0.20593312281412546 0
-5.197889647622478 -0.6978896476224783
3.8343550269905804 0
-9.531535689308328 -5.031535689308328
1.325784085494855 0
0.5534870659018295 0
-7.102874222066001 -2.602874222066001
-13.675762550943762 -9.175762550943762
3.9636575618555803 0
-1.749294987934169 0
1.2030521567236219 0
6.232233252361516 1.7322332523615156
-8.400948358967225 -3.9009483589672254
-0.0401645842059255 0
7.029215929691404 2.5292159296914036
11.192892070385724 6.692892070385724
6.096802546687919 1.5968025466879192
6.426480403802853 1.9264804038028531
-9.26147331014739 -4.761473310147389
-1.4716299105736765 0
-3.1840381441570633 0
-2.3059280944683342 0
6.164419831200721 1.6644198312007212
5.681731221213691 1.181731221213691
-0.1669023554988457 0
-6.081636275522419 -1.5816362755224187
3.3173364492848805 0
3.6957709191976957 0
10.289002607429847 5.789002607429847
3.897251367951322 0
-9.728289414967538 -5.228289414967538
-0.5357291708806988 0
-6.635059244643971 -2.135059244643971
3.4328517368277622 0
1.0423563347617755 0
-0.36800794583401675 0
2.6924764746597685 0
1.434281875577846 0
-0.6660585695563244 0
8.375208669468924 3.8752086694689236
0.5656132745209681 0
13.852985702287752 9.352985702287752
0.3122876528114459 0
-3.079416106753241 0
-7.846632087876243 -3.346632087876243
6.191694931110419 1.691694931110419
3.83634269275283 0
-4.2409001708395815 0
-0.8595283155417268 0

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

@ -0,0 +1,26 @@
import math
from IKZMod1 import MathFunc
from numpy import arange
a = float(input('введите значение константы a: '))
b = float(input('введите значение константы b: '))
LeftBord = a-3*b**(0.5)
RightBord = a+3*b**(0.5)
Step = 0.2*b**(0.5)
y = []
for x in arange(LeftBord,RightBord,Step):
y.append(MathFunc(x, a, b))
with open('TestFile.txt','w') as file:
for i in range(0,len(y),2):
if i+1<len(y):
file.write(f'{y[i]}, {y[i+1]} \n')
else:
file.write(f'{y[i]}\n')

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

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

@ -0,0 +1,24 @@
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,10 @@
#Модуль 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)
#Модуль 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)

@ -1,2 +1,2 @@
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)

@ -1,11 +1,9 @@
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)

@ -0,0 +1,7 @@
def ReadFile(file):
Spis = []
with open(file) as fl:
for line in fl:
Spis.extend(map(float,line.split()))
return Spis

@ -0,0 +1,14 @@
import statistics as st
def CalcCorr(s1,s2):
n = min(len(s1),len(s2))
mean1 = st.mean(s1)
mean2 = st.mean(s2)
cov = sum((s1i - mean1) * (s2i - mean2) for s1i, s2i in zip(s1, s2)) / n
stdS1 = st.stdev(s1)
stdS2 = st.stdev(s2)
if stdS1 == 0 or stdS2 == 0:
return 0
return cov/(stdS1*stdS2)

@ -0,0 +1,12 @@
from ModOKZ1 import ReadFile
from ModOKZ2 import CalcCorr
file1 = input('Введите имя первого файла: ')
file2 = input('Введите имя второго файла: ')
spis1 = ReadFile(file1)
spis2 = ReadFile(file2)
if not(spis1 == []) and not(spis2 == []):
print(f'Коэффициент корреляции: {CalcCorr(spis1,spis2)}')

@ -0,0 +1,16 @@
2.099318746451056e-05, 6.69668672647875e-05
0.00019719596463353917, 0.0005360342073088022
0.0013450654850770993, 0.003115665271240636
0.006662152960521624, 0.013150275377486781
0.02396136399563107, 0.04030367676515082
0.06257980984579728, 0.08969748220957399
0.11868141280309415, 0.14495780494004476
0.1634394686817576, 0.17010955993225252
0.16343946868175718, 0.14495780494004407
0.11868141280309329, 0.08969748220957313
0.06257980984579653, 0.040303676765150245
0.023961363995630612, 0.01315027537748653
0.006662152960521497, 0.0031156652712405583
0.00134506548507706, 0.0005360342073087869
0.00019719596463353375, 6.696686726478525e-05
2.0993187464509702e-05

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

@ -0,0 +1,79 @@
# Общее контрольное задание по Теме 8
Ходюк Максим Романович
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
### Выполнение
Содержание файла [ModOKZ1.py](ModOKZ1.py):
```
def ReadFile(file):
Spis = []
with open(file) as fl:
for line in fl:
Spis.extend(map(float,line.split()))
return Spis
```
Содержание файла [ModOKZ2.py](ModOKZ2.py):
```
import statistics as st
def CalcCorr(s1,s2):
n = min(len(s1),len(s2))
mean1 = st.mean(s1)
mean2 = st.mean(s2)
cov = sum((s1i - mean1) * (s2i - mean2) for s1i, s2i in zip(s1, s2)) / n
stdS1 = st.stdev(s1)
stdS2 = st.stdev(s2)
if stdS1 == 0 or stdS2 == 0:
return 0
return cov/(stdS1*stdS2)
```
Содержание файла [ModOKZ3.py](ModOKZ3.py):
```
from ModOKZ1 import ReadFile
from ModOKZ2 import CalcCorr
file1 = input('Введите имя первого файла: ')
file2 = input('Введите имя второго файла: ')
spis1 = ReadFile(file1)
spis2 = ReadFile(file2)
if not(spis1 == []) and not(spis2 == []):
print(f'Коэффициент корреляции: {CalcCorr(spis1,spis2)}')
```
Содержание текстовых файлов с данными:
[testdata1.txt](testdata1.txt)
```
10.0 9.5 9.0 8.5 8.0
7.5 3.2 6.5
```
[testdata2.txt](testdata2.txt)
```
10.0 9.5 9.0 8.5 8.0
7.5 3.2 6.5
```
Вызов программы:
```
import os
os.chdir('D:\\POAS\\Hodyuk\\Tema8\\')
import ModOKZ3
Введите имя первого файла: testdata1.txt
Введите имя второго файла: testdata2.txt
Коэффициент корреляции: -0.4838833004874475
```

@ -0,0 +1,67 @@
# Индивидуальное контрольное задание по Теме 8
Ходюк Максим Романович А-01-23
## Задание
Вариант 12
По указанному преподавателем варианту контрольного задания обратитесь к индивидуально-му заданию с таким номером в теме 7, разработайте функцию, на ее основе создайте модуль. Со-здайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
Разработайте анонимную функцию с 3 аргументами: х, a, b, вычисляющую значение exp(-(x-a)2/b)/(2*π*b)1/2. Рассчитайте значения функции в диапазоне значений х от a-3*b1/2 до a+3*b1/2 с шагом 0.2*b1/2 и запишите эти значения в текстовый файл по два значения на строке, разде-ленных запятыми.
### Выполнение
Создал модуль с функцией MathFunc - [IKZMod1.py](IKZMod1.py) со следующим содержанием:
```
import math
MathFunc = lambda x, a, b: math.exp((-(x-a)**2)/b)/((2*math.pi*b)**(0.5))
```
Создал модуль с выполнением оставшейся части задания - [IKZMod2.py](IKZMod2.py):
```
import math
from IKZMod1 import MathFunc
from numpy import arange
a = float(input('введите значение константы a: '))
b = float(input('введите значение константы b: '))
LeftBord = a-3*b**(0.5)
RightBord = a+3*b**(0.5)
Step = 0.2*b**(0.5)
y = []
for x in arange(LeftBord,RightBord,Step):
y.append(MathFunc(x, a, b))
with open('TestFile.txt','w') as file:
for i in range(0,len(y),2):
if i+1<len(y):
file.write(f'{y[i]}, {y[i+1]} \n')
else:
file.write(f'{y[i]}\n')
```
Вызов программы:
```
import IKZMod2
введите значение константы a: 13.2
введите значение константы b: 5.5
```
Содержание текстового файла [TestFile.txt](TestFile.txt) после выполнения программы:
```
2.099318746451056e-05, 6.69668672647875e-05
0.00019719596463353917, 0.0005360342073088022
0.0013450654850770993, 0.003115665271240636
0.006662152960521624, 0.013150275377486781
0.02396136399563107, 0.04030367676515082
0.06257980984579728, 0.08969748220957399
0.11868141280309415, 0.14495780494004476
0.1634394686817576, 0.17010955993225252
0.16343946868175718, 0.14495780494004407
0.11868141280309329, 0.08969748220957313
0.06257980984579653, 0.040303676765150245
0.023961363995630612, 0.01315027537748653
0.006662152960521497, 0.0031156652712405583
0.00134506548507706, 0.0005360342073087869
0.00019719596463353375, 6.696686726478525e-05
2.0993187464509702e-05
```

@ -0,0 +1,3 @@
1.2 1.0 5.0 7.3 8.3
6.0 7.5 3.5 3.1

@ -0,0 +1,2 @@
10.0 9.5 9.0 8.5 8.0
7.5 3.2 6.5

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

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

После

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

Двоичные данные
TEMA9/Figure_-3.png

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,8 @@
import M2
import pickle
result_signal = M2.M1_execution()
name = input("Введите имя бинарного файла, в который хотите записать полученный сигнал: ")
with open(name,'wb') as file:
pickle.dump(result_signal,file)

@ -0,0 +1,22 @@
import matplotlib.pyplot as plt
def func1(sps,vh):
i = len(sps) - 1
while True:
value = (vh - sps[i] * 8) / 9
sps.append(value)
i+=1
if abs(sps[i]-sps[i-1])< 0.05:
break
return sps
def func2(sps):
"""
Функция 2: отображает график сигнала
"""
plt.figure(figsize=(10, 6))
plt.plot(sps, linewidth=2, markersize=5)
plt.xlabel('Номер отсчета (i)', fontsize=12)
plt.ylabel('Значение SPS[i]', fontsize=12)
plt.title('График выходного сигнала системы', fontsize=14)
plt.grid(True, alpha=0.3)
plt.show()

@ -0,0 +1,18 @@
import M1
def M1_execution():
sps = [0]
while True:
zn = float(input('Введите требуемое значение на выходе системы: '))
if zn==0:
print('Было введено zn = 0. Завершение работы модуля M2')
break
result = M1.func1(sps.copy(), zn)
print(f'Итоговый список: \n{result}')
M1.func2(result)
return result

@ -0,0 +1,29 @@
import os
os.chdir('D:\\POAS\\Hodyuk\\Tema9\\')
from Sotrudniki import Sotrudniki
sot1 = Sotrudniki("Пронин А.Д", "Кафедра Управления и информационных технологий", "Ассистент",60000)
sot2 = Sotrudniki("Бирюков А.М.", "Кафедра Математического и компьютерного моделирования", "Доцент", 75000)
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
print(f"{sot1.fio}, {sot1.otdel}, {sot1.dolzhnost}, оклад: {sot1.oklad}")
print(f"{sot2.fio}, {sot2.otdel}, {sot2.dolzhnost}, оклад: {sot2.oklad}")
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
sot2.salary_raise(20000)
sot1.change_department("Кафедра Математического и компьютерного моделирования")
sot1.change_position("Старший преподаватель")
sot2.add_pooshrenie("За преданность делу")
sot1.add_pooshrenie("За создание позитивной атмосферы")
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
print(f"{sot1.fio}, {sot1.otdel}, {sot1.dolzhnost}, оклад: {sot1.oklad}")
print(f"{sot2.fio}, {sot2.otdel}, {sot2.dolzhnost}, оклад: {sot2.oklad}")
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
print(f"Поощрения {sot1.fio}: {sot1.pooshrenia}")
print(f"Поощрения {sot2.fio}: {sot2.pooshrenia}")

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

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

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

@ -0,0 +1,253 @@
# Отчёт к Теме 9
Ходюк Максим Романович, А-01-23
## Пункт 1
Запустил интерактивную оболочку IDLE и выставил рабочий каталог
```
import os,sys,importlib as imp
os.chdir('D:\\POAS\\Hodyuk\\Tema9\\')
```
## Пункт 2
### 2.1. Создание автономного класса
Создал класс , содержащий 2 функции, реализующие его методы
```
class Class1: #Объявление класса
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
self.data=znach # self - ссылка на экземпляр класса
def otobrazh(self): # Метод 2 класса1
print(self.data)#Отображение данных экземпляра класса
```
Создал 2 экземпляра этого класса и задал разные значения атрибута у двух экземпляра:
```
z1=Class1()
z2=Class1()
z1.zad_zn('экз.класса 1')
z2.zad_zn(-632.453)
z1.otobrazh()
экз.класса 1
z2.otobrazh()
-632.453
z1.data='Новое значение атрибута у экз.1'
z1.otobrazh()
Новое значение атрибута у экз.1
```
### 2.2. Создание класса-наследника
В объявлении класса после его имени в скобках перечисляются его «родительские классы»
```
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
print('значение=',self.data)#Отображение данных экземпляра
```
Создаю экземпляр второго класса и смотрю список его атрибутов:
```
z3=Class2()
dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
z3.zad_zn('Совсем новое')
z3.otobrazh()
значение= Совсем новое
```
Сработал метод класса Class2
```
z1.otobrazh()
Новое значение атрибута у экз.1
del z1,z2,z3
```
Значение у объекта z1 не изменилось
## Пункт 3
Создал модуль с именем [Mod3.py](Mod3.py)
Импортирую первый класс из модуля и выполняю инструкцию
```
from Mod3 import Class1
z4=Class1()
z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
z4.otobrazh()
File "D:\POAS\Hodyuk\Tema9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
Инструкция выдаёт ошибку, так как до вызова функции zad_zn у класса не существует объекта data
Пробую сделать так:
```
from Mod3 import Class1
z4=Class1()
z4.data='значение данного data у экз.4'
z4.otobrazh()
значение данного data у экз.4
del z4
```
После удаления экземпляра z4 и импортирую модуль целиком
```
import Mod3
z4=Mod3.Class2()
z4.zad_zn('Класс из модуля')
z4.otobrazh()
значение= Класс из модуля
Mod3.otobrazh('Объект')
значение объекта= Объект
```
Разница в том, что в первом случае я импортирую только Class1, и создаю экземпляр именно Class1, а во втором импортирую весь модуль, и создаю экземпляр Class2, а далее я вызываю отдельную функцию из модуля
## Пункт 4
Использование специальных методом
Создаю класс, содержащий 2 специальных метода
```
class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
def __init__(self,znach): #Конструктор-вызывается при создании нового экземпляра класса
self.data=znach
def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
return Class3(self.data+drug_zn)
def zad_dr_zn(self,povtor): #А это - обычный метод
self.data*=povtor
```
Метод __add__ - это один из методов, осуществляющих так называемую «перегрузку» операто-ров.
Создаю экземпляр класса Class3 и отображаю его
```
z5=Class3('abc')
z5.otobrazh()
значение= abc
z6=z5+'def'
z6.otobrazh()
значение= abcdef
z6.zad_dr_zn(3)
z6.otobrazh()
значение= abcdefabcdefabcdef
```
## Пункт 5
Присоединение атрибутов к классу
Вывожу список атрибутов класса
```
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
Class3.fio='Иванов И.И.'
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
```
Убедился в том, что после задания нового атрибута класса он появился при выполнении функции dir
Создаю новый экземпляр
```
z7=Class3(123)
dir(z7)==dir(Class3)
False
z7.fio
'Иванов И.И.'
z7.rozden='1987'
dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
```
В объекте z7 появился атрибут rozden, а у Class3 нет
## Пункт 6
Выявление родительских классов
Проверяю родительские классы для Class3, Class2 и Class1
```
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__bases__
(<class 'object'>,)
```
Получение полной цепочки наследования:
```
Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## Пункт 7
Создание свойства класса
Создаю класс с определённым в нём свойством
```
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#61>", line 1, in <module>
exempl.svojstvo
File "<pyshell#55>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Ошибка возникает потому, что мы удаляем все атрибуты обьекта exempl, а после пытаемся вывести значение __prm, которое не задаём заново
Создаю модуль [SAU.py](SAU.py)
Тестирую этот класс с помощью следующей программы:
```
prm=[2.5,4,1.3,0.8]
from SAU import *
xx=[0]+[1]*20
SAUe=SAU(prm)
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
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
import pylab
pylab.plot(yt)
[<matplotlib.lines.Line2D object at 0x000001F6E6DB2710>]
pylab.show()
```
Полученный график:
![Figure0.png](Figure0.png)
## Пункт 9
Закончил сеанс работы с IDLE

@ -0,0 +1,100 @@
# Общее контрольное задание по Теме 9
Ходюк Максим Романович А-01-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
### Выполнение
Модуль с созданным необходимым классом [Sotrudniki.py](Sotrudniki.py):
```
class Sotrudniki:
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self._pooshrenia = []
def salary_raise(self, summa):
if summa > 0:
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
else:
print("Сумма для повышения оклада должна быть больше нуля.")
def change_department(self, new_department):
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
self.otdel = new_department
def change_position(self, new_position):
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
self.dolzhnost = new_position
@property
def pooshrenia(self):
return self._pooshrenia
def add_pooshrenie(self, tekst):
self._pooshrenia.append(tekst)
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")
```
Модуль для выполнения необходимых операций с классом Sotrudniki: [Main.py](Main.py)
```
from Sotrudniki import Sotrudniki
sot1 = Sotrudniki("Пронин А.Д", "Кафедра Управления и информационных технологий", "Ассистент",60000)
sot2 = Sotrudniki("Бирюков А.М.", "Кафедра Математического и компьютерного моделирования", "Доцент", 75000)
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
print(f"{sot1.fio}, {sot1.otdel}, {sot1.dolzhnost}, оклад: {sot1.oklad}")
print(f"{sot2.fio}, {sot2.otdel}, {sot2.dolzhnost}, оклад: {sot2.oklad}")
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
sot2.salary_raise(20000)
sot1.change_department("Кафедра Математического и компьютерного моделирования")
sot1.change_position("Старший преподаватель")
sot2.add_pooshrenie("За преданность делу")
sot1.add_pooshrenie("За создание позитивной атмосферы")
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
print(f"{sot1.fio}, {sot1.otdel}, {sot1.dolzhnost}, оклад: {sot1.oklad}")
print(f"{sot2.fio}, {sot2.otdel}, {sot2.dolzhnost}, оклад: {sot2.oklad}")
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
print(f"Поощрения {sot1.fio}: {sot1.pooshrenia}")
print(f"Поощрения {sot2.fio}: {sot2.pooshrenia}")
```
Вывод программы:
```
========================================================================= RESTART: D:\POAS\Hodyuk\Tema9\Main.py ========================================================================
=== НАЧАЛЬНЫЕ ДАННЫЕ ===
Пронин А.Д, Кафедра Управления и информационных технологий, Ассистент, оклад: 60000
Бирюков А.М., Кафедра Математического и компьютерного моделирования, Доцент, оклад: 75000
=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===
Оклад сотрудника Бирюков А.М. увеличен на 20000. Новый оклад: 95000
Сотрудник Пронин А.Д переведен из отдела Кафедра Управления и информационных технологий в отдел Кафедра Математического и компьютерного моделирования.
Должность сотрудника Пронин А.Д изменена с Ассистент на Старший преподаватель.
Сотрудник Бирюков А.М. теперь имеет поощрение: За преданность делу
Сотрудник Пронин А.Д теперь имеет поощрение: За создание позитивной атмосферы
=== ИТОГОВЫЕ ДАННЫЕ ===
Пронин А.Д, Кафедра Математического и компьютерного моделирования, Старший преподаватель, оклад: 60000
Бирюков А.М., Кафедра Математического и компьютерного моделирования, Доцент, оклад: 95000
=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===
Поощрения Пронин А.Д: ['За создание позитивной атмосферы']
Поощрения Бирюков А.М.: ['За преданность делу']
```

@ -0,0 +1,119 @@
# Тест по модулю 3
Ходюк Максим Романович, А-01-23
## Задание:
Вариант 15
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - список с отсчетами выходного сигнала SPS некоторой системы и заданное входное воздействие VH; в функции список SPS дополняется по формуле:
SPS[i]=(VH-SPS[i-1]*8)/9
Расчеты продолжаются до тех пор, пока не окажется |SPS[i] - SPS[i-1]|<0.05; удлиненный список SPS возвращается в вызывающую программу;
- функция 2: аргумент - список с отсчетами сигнала; в функции должно быть выполнено отображение сигнала на графике с разметкой его осей.
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- создается начальный список с одним нулевым элементом;
- запрашивается требуемое значение ZN на выходе системы;
- производится обращение к функции 1 со списком и значением ZN; отображается результирующий список;
- отображается полученный сигнал путем обращения к функции 2;
- запрос и обращения к функциям повторяются с изменением значения ZN до тех пор, пока не будет введено значение ZN=0.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и после завершения ее работы запрашивает имя бинарного файла и записывает в него полученный сигнал.
4) Проверьте работу программы, задавая значения ZN, равные 6, 10, -3 и 0.
### Выполнение
Содержимое модуля [M1](M1.py):
```
import matplotlib.pyplot as plt
def func1(sps,vh):
i = len(sps) - 1
while True:
value = (vh - sps[i] * 8) / 9
sps.append(value)
i+=1
if abs(sps[i]-sps[i-1])< 0.05:
break
return sps
def func2(sps):
"""
Функция 2: отображает график сигнала
"""
plt.figure(figsize=(10, 6))
plt.plot(sps, linewidth=2, markersize=5)
plt.xlabel('Номер отсчета (i)', fontsize=12)
plt.ylabel('Значение SPS[i]', fontsize=12)
plt.title('График выходного сигнала системы', fontsize=14)
plt.grid(True, alpha=0.3)
plt.show()
```
Содержимое модуля [M2](M2.py):
```
import M1
def M1_execution():
sps = [0]
while True:
zn = float(input('Введите требуемое значение на выходе системы: '))
if zn==0:
print('Было введено zn = 0. Завершение работы модуля M2')
break
result = M1.func1(sps.copy(), zn)
print(f'Итоговый список: \n{result}')
M1.func2(result)
return result
```
Содержимое модуля [M0](M0.py):
```
import M2
import pickle
result_signal = M2.M1_execution()
name = input("Введите имя бинарного файла, в который хотите записать полученный сигнал: ")
with open(name,'wb') as file:
pickle.dump(result_signal,file)
```
Запуск программы:
```
====================== RESTART: D:/POAS/Hodyuk/Tema9/M0.py =====================
Введите требуемое значение на выходе системы: 6
Итоговый список:
[0, 0.6666666666666666, 0.07407407407407411, 0.6008230452674898, 0.13260173754000912, 0.5487984555199918, 0.17884581731556282, 0.5076926068306108, 0.2153843494839015, 0.4752139115698653, 0.2442543008267864, 0.44955173259841213, 0.26706512657918924, 0.4292754430407207, 0.28508849507491496, 0.41325467104452, 0.29932918129375996, 0.4005962832944356, 0.31058108151605723, 0.3905945942079491, 0.31947147181515634, 0.3826920250531944, 0.3264959777304939, 0.37644801979511655]
Введите требуемое значение на выходе системы: 10
Итоговый список:
[0, 1.1111111111111112, 0.12345679012345674, 1.001371742112483, 0.2210028959000151, 0.91466409253332, 0.2980763621926044, 0.846154344717685, 0.3589739158065022, 0.7920231859497758, 0.40709050137797703, 0.7492528876640203, 0.4451085442986486, 0.7154590717345345, 0.4751474917915249, 0.6887577850742002, 0.4988819688229332, 0.6676604721573928, 0.5176351358600954, 0.6509909903465819, 0.5324524530252606, 0.6378200417553239, 0.5441599628841565, 0.6274133663251943, 0.5534103410442718, 0.6191908079606473, 0.560719281812758, 0.6126939717219929, 0.5664942473582285]
Введите требуемое значение на выходе системы: -3
Итоговый список:
[0, -0.3333333333333333, -0.037037037037037056, -0.3004115226337449, -0.06630086877000456, -0.2743992277599959, -0.08942290865778141, -0.2538463034153054, -0.10769217474195075, -0.23760695578493266, -0.1221271504133932, -0.22477586629920607, -0.13353256328959462, -0.21463772152036034, -0.14254424753745748, -0.20662733552226, -0.14966459064687998, -0.2002981416472178, -0.15529054075802862]
Введите требуемое значение на выходе системы: 0
Было введено zn = 0. Завершение работы модуля M2
Введите имя бинарного файла, в который хотите записать полученный сигнал: testov_dan.mnz
```
Графики, полученный при разных значениях zn:
Для значения zn=6
![Figure_6.png](Figure_6.png)
Для значения zn=10
![Figure_10.png](Figure_10.png)
Для значения zn=-3
![Figure_-3.png](Figure_-3.png)
Загрузка…
Отмена
Сохранить