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

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

Автор SHA1 Сообщение Дата
cf4690c073 test is done 2025-12-08 11:09:30 +03:00
c431dedd31 test is done 2025-12-08 10:28:52 +03:00
5c09e6c686 task is done 2025-12-06 19:36:58 +03:00
d0fa1be9ce task is done 2025-12-06 19:36:32 +03:00
5dc6afe8f8 task is done 2025-12-06 19:35:46 +03:00
936e79691b report is done 2025-12-06 19:24:21 +03:00
320b58cb10 test is done 2025-11-24 10:35:51 +03:00
29de407dad report is done 2025-11-23 21:52:22 +03:00
6232dfac05 task is done 2025-11-23 19:22:28 +03:00
438762c324 report.md 2025-11-23 19:14:23 +03:00
116ab7ec85 report.md 2025-11-23 18:33:13 +03:00
04e3bc4b5a test_module2 is done 2025-11-10 11:20:27 +03:00
1795c878d4 report is fixed 2025-11-10 10:00:37 +03:00
fb8715a1fb task is done 2025-11-09 17:51:57 +03:00
9bb25f8594 report is done 2025-11-09 17:41:15 +03:00
3024f15e66 test is done 2025-10-27 11:32:15 +03:00
e9e27ea50f all done 2025-10-27 10:47:23 +03:00
8a867318c6 all done 2025-10-27 10:41:49 +03:00
895441f7ac all done 2025-10-27 10:23:36 +03:00
21054ea3b6 report is done 2025-10-23 22:26:47 +03:00
1e07f8c002 test is done 2025-10-13 11:00:11 +03:00
6cbab7ebd4 report is done 2025-10-13 10:59:27 +03:00
80a1a6fb6f report is done 2025-10-13 10:25:28 +03:00
32c6c77608 report is done 2025-10-12 21:50:31 +03:00
c101db8fe2 task is done 2025-10-12 19:06:38 +03:00
73375c0df9 task is done 2025-10-12 19:05:50 +03:00
ae6dce2432 report is done 2025-10-12 18:57:10 +03:00
3d35159e78 test is done 2025-09-29 11:34:05 +03:00
4e6d2620d1 task is done 2025-09-28 22:42:19 +03:00
7c5b6fc430 task is done 2025-09-28 22:40:53 +03:00
4dab084c26 report is done 2025-09-28 22:27:33 +03:00
58de7649bc report 2025-09-28 21:03:12 +03:00
ac71af9cd0 okr 2025-09-08 15:59:45 +03:00
a852084ec4 report 2025-09-08 14:05:57 +03:00
c492ee6f95 Merge branch 'main' of http://uit.mpei.ru/git/MarkovNikS/python-labs 2025-09-08 13:55:43 +03:00
abe9380abe first commit 2025-09-08 13:42:51 +03:00
Пользователь № 6 аудитории Ж-111
1298e7fab8 test 2025-09-08 12:17:24 +03:00
Пользователь № 6 аудитории Ж-111
95abd79bbe report v2 2025-09-08 12:17:24 +03:00
Пользователь № 6 аудитории Ж-111
3971e5e58f report 2025-09-08 12:17:24 +03:00
Пользователь № 6 аудитории Ж-111
f61d94e737 first commit 2025-09-08 12:17:24 +03:00
Пользователь № 6 аудитории Ж-111
ffddb83384 test 2025-09-01 15:36:35 +03:00
Пользователь № 6 аудитории Ж-111
f094f84cd1 report v2 2025-09-01 15:29:15 +03:00
Пользователь № 6 аудитории Ж-111
88ac1a54e1 report 2025-09-01 15:27:14 +03:00
Пользователь № 6 аудитории Ж-111
b87e9684ba first commit 2025-09-01 14:52:08 +03:00
69 изменённых файлов: 5133 добавлений и 5 удалений

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

@@ -1,7 +1,6 @@
# Программное обеспечение автоматизированных систем: лабораторные работы
[Репозиторий с методическими указаниями и заданиями.](http://uit.mpei.ru/git/main/python)
Обратите внимание на файл с комментариями в репозитории по ссылке.
## Работа с Git
@@ -110,7 +109,7 @@
### Оформление решений
Решение всех заданий и тестов оформляется по образцу:
Решение всех заданий оформляется по образцу:
# Общее контрольное задание по теме 2
@@ -130,8 +129,5 @@
Для темы 1 вместо «Задания» — «Вопрос», вместо «Решения» — «Ответ».
Для тем 3, 6 и 9 вместо «Индивидуального контрольного задания по теме 3 (6, 9)» —
«Тест по модулю 1 (2, 3)».
Для тем 8 и 9 раздела «Решение» не нужно,
вместо этого решение размещается в отдельных файлах `*.py`.

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

@@ -0,0 +1,4 @@
#Программа по Теме 1 Марков Никита Сергеевич
print('Hello')
h=input('Your name=')
import os

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

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

После

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

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

@@ -0,0 +1,72 @@
# Отчет по теме 1
Марков Никита, А-03-23
## 1 Изучение среды IDLE
## Выполнение 3-8 пунктов
```
>>> print('Hello')
Hello
>>> h=input('Your name=')
Your name=Nikita
>>> exit()
>>> import os
>>> os.chdir('C:\\Users\\u111-06\\Desktop\\python-labs\\TEMA1\\')
```
## Выполнение 10-14 пунктов
```
Hello
Your name=Nikita
import Pr0
Hello
Your name=Nikita
import prb1
Как Вас зовут? Nikita
Привет, Nikita
help(print),help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
(None, None)
```
## Выполнение 15 пункта
```py
import tdemo_chaos
```
<image src="turtle.png">
<image src="clock.png">

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

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

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

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

После

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

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

@@ -0,0 +1,26 @@
# Протокол по Теме 2
Марков Никита Сергеевич, А-03-23
## Выполнение ОКР
```py
>>> import keyword
>>> familia='markov'
>>> first_word = familia[0]
>>> sp_kw=keyword.kwlist
>>> sp_kw.remove('nonlocal')
>>> sp_kw
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> kort_nam=('nikita','sasha','victor','dima')
>>> type(kort_nam)
<class 'tuple'>
>>> kort_nam=kort_nam + ('egor','misha')
>>> kort_nam
('nikita', 'sasha', 'victor', 'dima', 'egor', 'misha')
>>> dict_bas={'Список':[1,2,4], 'Множество':{1,2,3,4},'Словарь':{'key':'value'}}
>>> dict_bas
{'Список': [1, 2, 4], 'Множество': {1, 2, 3, 4}, 'Словарь': {'key': 'value'}}
```

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

@@ -0,0 +1,360 @@
# Протокол по Теме 2
Марков Никита Сергеевич, А-03-23
## Выполнение пункта 2
```py
>>> f1=16; f2=3
>>> f1,f2
(16, 3)
>>> f1;f2
16
3
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
>>> dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> type(f2)
<class 'int'>
>>> del f1,f2
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
```
Как видим, после применения del ммы удалили f1 и f2 из оперативной памяти
## Выполнение пункта 3
```py
>>> gg1=1.6
>>> hh1='Строка'
>>> 73sr=3
SyntaxError: invalid syntax
>>> and=7
SyntaxError: invalid syntax
```
## Выполнение пункта 4
```py
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## Выполнение пункта 5
```py
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', '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(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(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 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 arguments, return the smallest argument.
>>> 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(zip)
Help on class zip in module builtins:
class zip(object)
| zip(*iterables) --> A zip object yielding tuples until an input is exhausted.
|
| >>> list(zip('abcdefg', range(3), range(4)))
| [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
|
| The zip object yields n-length tuples, where n is the number of iterables
| passed as positional arguments to zip(). The i-th element in every tuple
| comes from the i-th iterable argument to zip(). This continues until the
| shortest argument is exhausted.
|
| Methods defined here:
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __iter__(self, /)
| Implement iter(self).
|
| __next__(self, /)
| Implement next(self).
|
| __reduce__(...)
| Return state information for pickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
```
## Выполнение пункта 6
```py
>>> Gg1=45
>>> Gg1;gg1
45
1.6
```
## Изучение простых базовых типов объектов(пункт 7)
```py
>>> bb1=True; bb2=False
>>> bb1;bb2
True
False
>>> type(bb1)
<class 'bool'>
>>> ii1=-1234567890
>>> ff1=-8.9876e-12
>>> dv1=0b1101010
>>> vsm1=0o52765
>>> shest1=0x7109af6
>>> cc1=2-3j
>>> a=3.67; b=-0.45
>>> cc2=complex(a,b)
>>> type(ii1)
<class 'int'>
>>> type(ff1)
<class 'float'>
>>> type(dv1)
<class 'int'>
>>> type(vsm1)
<class 'int'>
>>> type(shest1)
<class 'int'>
>>> type(cc1)
<class 'complex'>
>>> ss1='Это - строка символов'
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>> print(ss1)
Это - строка символов
>>> print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1b= 'Меня зовут: \n Марков Н.С.'
>>> print(ss1b)
Меня зовут:
Марков Н.С.
>>> mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
>>> print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
>>> ss1[0]
'Э'
>>> ss1[-2]
'о'
>>> ss1[6:9]
'стр'
>>> ss1[13:]
'символов'
>>> ss1[5:-8]
' строка '
>>> ss1[3:17:2]
' тоасм'
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[-4:3:-2]
'омсаот '
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> print(ss1)
Это = строка символов
```
## Изучение более сложных типов объектов(пункт 8)
```py
>>> spis1=[111,'Spisok',5-9j]
>>> print(spis1)
[111, 'Spisok', (5-9j)]
>>> stup=[0,0,1,1,1,1,1,1,1]
>>> print(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
>>> spis1.append('New item')
>>> spis1
[111, 'Список', (5-9j), 'New item']
>>> spis1+['New item 2']
[111, 'Список', (5-9j), 'New item', 'New item 2']
>>> spis1+[ss1b]
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Марков Н.С.']
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2
[[111, (5-9j), 'New item'], [4, 5, 6, 7]]
>>> spis2[0][1]
(5-9j)
>>> spis2[0][1]=78
>>> spis2
[[111, 78, 'New item'], [4, 5, 6, 7]]
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1= kort1+(1,2)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2)
>>> kort1= kort1+(ss1b,)
>>> kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Марков Н.С.')
>>> kort2=kort1[:2]+kort1[3:]
>>> kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Марков Н.С.')
>>> kort1.index(2)
4
>>> kort1.count(222)
1
>>> kort3=(21, 'wqasf') + kort1 + (ss1b,)
>>> kort3
(21, 'wqasf', 222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Марков Н.С.', 'Меня зовут: \n Марков Н.С.')
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1['Orel']
56
>>> dic1['Pskov']=78
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
>>> sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>> sorted(dic1.values())
[45, 56, 78, 145]
>>> a = ("a", "b", "c", "d", "e", "f", "g")
>>> b = [1, 2, 3, 4, 5]
>>> d = dict(zip(a,b))
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
```
Элементов в получившимся словаре - 5, т.к. zip() работает до конца b
```py
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>> AVTI[' Курс III '][5]
>>> AVTI['Курс III'][5]
15
```
```py
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'датчик', 'линия связи', 'микропроцессор', 'двигатель'}
```
```py
>>> mnoz2={'тетрадь','тетрадь',32, complex(2.242 , 12), 32}
>>> mnoz2
{32, 'тетрадь', (2.242+12j)}
>>> mnoz2.add('asasdads')
>>> mnoz2.remove(32)
>>> mnoz2
{'тетрадь', (2.242+12j), 'asasdads'}
```

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

@@ -0,0 +1,791 @@
# Протокол по Теме 2
Марков Никита Сергеевич, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Преобразование простых базовых типов объектов
### 2.1 Преобразование в логический тип с помощью функции bool
```py
>>> logiz1=bool(56)
>>> type(logiz1)
<class 'bool'>
>>> logiz1
True
>>> logiz2=bool(0)
>>> logiz2
False
>>> type(logiz2)
<class 'bool'>
>>> logiz3=bool("Beta")
>>> logiz3
True
>>> type(logiz3)
<class 'bool'>
>>> logiz4=bool("")
>>> logiz4
False
>>> type(logiz4)
<class 'bool'>
```
### 2.2 Преобразование в целое десятичное число / в вещественное число
```py
>>> tt1=int(198.6)
>>> tt1
198
>>> tt2=int("-76")
>>> tt2
-76
>>> tt3=int("B",16)
>>> tt3
11
>>> tt4=int("71",8)
>>> tt4
57
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
Объяснение:
int() ожидает увидеть целочисленное значение в строке, решение проблемы - int(float("98.76"))
```py
>>> 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 Преобразование десятичных чисел в другие системы счисления
```py
>>> hh=123
>>> dv1=bin(hh) # двоичная сс
>>> vos1=oct(hh) # 8-ричная сс
>>> shs1=hex(hh) # 16-ричная сс
>>> dv1
'0b1111011'
>>> vos1
'0o173'
>>> shs1
'0x7b'
>>> int(dv1, 2)
123
>>> int(vos1, 8)
123
>>> int(shs1, 16)
123
```
## 3. Преобразование более сложных базов типов объектов
### 3.1 Преобразование в строку
```py
>>> strk1=str(23.6)
>>> strk1
'23.6'
>>> strk2=str(logiz3)
>>> strk2
'True'
>>> strk3=str(["A","B","C"])
>>> strk3
"['A', 'B', 'C']"
>>> strk4=str(("A","B","C"))
>>> strk4
"('A', 'B', 'C')"
>>> strk5=str({"A":1,"B":2,"C":9})
>>> strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
### 3.2 Преобразование эл-ов объекта в список с помощью list()
```py
>>> spis1=list("Строка символов")
>>> spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2=list((124,236,-15,908))
>>> spis2
[124, 236, -15, 908]
>>> spis3=list({"A":1,"B":2,"C":9})
>>> spis3
['A', 'B', 'C']
```
Решение задания:
```py
>>> spis3=list({"A":1,"B":2,"C":9}.values())
>>> spis3
[1, 2, 9]
```
### 3.3 Преобразование элементов объектов в кортеж
```py
>>> kort7=tuple('Строка символов')
>>> kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>> kort8=tuple(spis2)
>>> kort8
(124, 236, -15, 908)
>>> kort9=tuple({"A":1,"B":2,"C":9})
>>> kort9
('A', 'B', 'C')
```
### 3.4 Удаление объектов
```py
>>> del strk5, kort8
>>> strk5
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined
>>> kort8
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined
```
Решение задания:
```py
>>> fio = 'Markov N.S.'
>>> listfio=list(fio)
>>> listfio
['M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.']
>>> cortfio = tuple(listfio)
>>> cortfio
('M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.')
>>> strfio = str(cortfio)
>>> strfio
"('M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.')"
```
## 4. Арифметические операции
### 4.1 Сложение и вычитание
```py
>>> 12+7+90
109
>>> 5.689e-1 - 0.456
0.11289999999999994
>>> 23.6+54
77.6
>>> 14-56.7+89
46.3
```
### 4.2 Умножение
```py
>>> -6.7*12
-80.4
```
### 4.3 Деление
Результатом деления всегда будет вещественное число
```py
>>> -234.5/6
-39.083333333333336
>>> a=178/45
>>> a
3.9555555555555557
>>> type(a)
<class 'float'>
```
### 4.4 Деление с округлением вниз (целочисленное деление)
```py
>>> b=178//45
>>> b
3
>>> c=-24.6//12.1
>>> c
-3.0
>>> type(b)
<class 'int'>
>>> type(c)
<class 'float'>
```
Если в целочисленном делении используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый
```py
>>> asas= 123.4 // 3
>>> asas
41.0
>>> type(asas)
<class 'float'>
```
### 4.5 Получение остатка от деления
```py
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
>>> 1245.4 % 4
1.400000000000091
```
Если в остатке от деления используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый
### 4.6 Возведение в степень
```py
>>> 14**3
2744
>>> e=2.7**3.6
>>> e
35.719843790663525
>>> 3**2.3
12.513502532843182
```
К комплексным числам можно применять следующие операции:
сложение
вычитание
умножение
деление
возведение в степень
и нельзя следующие:
целочисленное деление
остаток от деления
## 5. Операции с двоичными представлениями целых чисел
### 5.1 Двоичная инверсия (~)
```py
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
~x = -x - 1
### 5.2 Двоичное "И"
```py
>>> 7&9
1
>>> 7&8
0
```
### 5.3 Двоичное "Или"
```py
>>> 7|9
15
>>> 7|8
15
>>> 14|5
15
```
### 5.4 Двоичное исключающее "Или"
```py
>>> 14^5
11
```
### 5.5 Двоичное исключающее "Или" (Влево или вправо)
```py
>>> h=14
>>> g=h<<2
>>> g
56
>>> g1=h>>1
>>> g1
7
>>> g2=h>>2
>>> g2
3
```
Решение задания
```py
>>> a = 197
>>> b = 154
>>> bin(a)[2:]
'11000101'
>>> bin(b)[2:]
'10011010'
>>> a & b
128
>>> a | b
223
>>> a ^ b
95
```
## 6. Операции при работе с последовательностями
### 6.1 Объединение последовательностей (конкатенация)
```py
>>> 'Система '+'регулирования'
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2 Повторение
```py
>>> 'ля-'*5
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99
>>> signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> signal2=(0,)*3+(1,)*5+(0,)*7
>>> signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
### 6.3 Проверка наличия заданного элемента в последовательности
```py
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka
True
>>> 'ку' in ['ку','-']*3
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
### 6.4 Подстановка значений в строку с помощью оператора «%»
```py
>>> stroka='Температура = %g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
%g - placeholder для чисел
%s - placeholder для строк
```py
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
### 7.1 Обычное присваивание значения переменной
```py
>>> zz=-12
>>> zz
-12
```
### 7.2 Увеличение/уменьшение значения переменной на заданную величину
```py
>>> zz+=5
>>> zz-=3
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> zz
-10
>>> stroka
'Система регулирования'
```
### 7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
>>> qw = 8
>>> qw *= 3
>>> qw
24
>>> qw /= 4
>>> qw
6.0
```
### 7.4 Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```py
>>> qw
6.0
>>> qw //=2
>>> qw
3.0
>>> qw = 8
>>> qw%=2
>>> qw
0
>>> qw=4
>>> qw **= 3
>>> qw
64
```
### 7.5. Множественное присваивание
```py
>>> w=v=10
>>> w,v
(10, 10)
>>> n1,n2,n3=(11,-3,'all')
>>> n1,n2,n3
(11, -3, 'all')
```
Решение задания:
Со списком работает поэлементно, со строками посимвольно, с множествами работает, но не в той очередности присваивания, со словарем работает, но нужно знать что присваивать - ключи либо значения
## 8. Логические операции
### 8.1. Операции сравнения
```py
>>> w == v
True
>>> w != v
False
>>> w < v
False
>>> w > v
False
>>> w <= v
True
>>> w >= v
True
```
### 8.2 Проверка наличия заданного элемента в последовательности или во множестве
```py
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> 56 in dic1.values()
True
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```
### 8.3 Создание больших логических выражений с использованием соединительных слов
```py
>>> a=17
>>> b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
```
Решение задания:
```py
>>> (a == b) and ('Orel' in dic1) or ('Pskov' in dic1)
False
>>> (a > b) or 'pen' in mnoz1
True
>>> 'cap' in mnoz1 or a == b
False
```
### 8.4. Проверка ссылок переменных на один и тот же объект
```py
>>> w=v=10
>>> w is v
True
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1 is v1
False
```
В начале присваивания двум переменным w и v значения 10 мы храним обе переменные в одной ячейке памяти, затем мы по отдельности присвоили двум этим переменным списки, они хоть и одинаковые, но всё равно переменные по отдельности претерпели изменения -> хранятся в разных ячейках памяти
## 9. Операции с объектами, выполняемые с помощью методов
```py
>>> stroka='Микропроцессорная система управления'
>>> dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
### 9.1 Методы для работы со строками
```py
>>> stroka.find('пр')
5
>>> stroka.count("с")
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ')
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22)
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```
```py
>>> strk1='Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
>>> strk3='Момент времени {num}, значение = {znch}'
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2. Методы для работы со списками.
```py
>>> spsk = [1, 'blablabla', 7.0, (1, 2, 3), True]
>>> dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> spsk.pop(2)
7.0
>>> spsk.append('c')
>>> spsk
[1, 'blablabla', (1, 2, 3), True, 'c']
>>> spsk.insert(2,'a')
>>> spsk
[1, 'blablabla', 'a', (1, 2, 3), True, 'c']
>>> spsk.count('a')
1
```
1.методом pop() удалили 2-ой эл-т списка (2-ой начиная с нуля)
2.добавили 'c' в конец списка (метод append() всегда добавляет элемент в конец списка)
3.методом insert() на позицию 2 (также начиная с нуля) вставили строку 'a'
4.методом count() посчитали количество вхождений элемента 'a' в список
### 9.3. Самостоятельно создайте кортеж и изучите применение его методов.
```py
>>> mytuple = ('abc', 23, (1, 2, 3), True)
>>> mytuple.count(23)
1
>>> mytuple.index(23)
1
```
### 9.4.Cамостоятельно изучите методы словарей и множеств.
Словари
```py
>>> student = {
"name": "Nikita",
"age": 19,
"city": "Moscow",
"courses": ["Math", "Physics"],
"gpa": 2.74
}
>>> student
{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 2.74}
>>> student.get("name")
'Nikita'
>>> student.keys()
dict_keys(['name', 'age', 'city', 'courses', 'gpa'])
>>> student.values()
dict_values(['Nikita', 19, 'Moscow', ['Math', 'Physics'], 2.74])
>>> student.update({"gpa": 4.5, "lazy": True})
>>> student
{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5, 'lazy': True}
>>> student.pop("lazy")
True
>>> student
{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5}
>>> student.clear()
>>> student
{}
```
Множества
```py
>>> A = {1, 2, 3, 4, 5}
>>> A.add(6)
>>> A
{1, 2, 3, 4, 5, 6}
>>> A.remove(4)
>>> A
{1, 2, 3, 5, 6}
>>> A.pop()
1
>>> A
{2, 3, 5, 6}
>>> A.clear()
>>> A
set()
```

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

@@ -0,0 +1,139 @@
# Общее контрольное задание по теме 3
Марков Никита Сергеевич, А-03-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
1.Преобразовать восьмеричное значение 45 в целое число.
2.Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
3.Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
4.Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
5.Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
6.Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
7.Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
1.
```py
>>> a = int ('45', 8)
>>> a
37
```
2.
```py
>>> D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
>>> D
{'усиление': 23, 'запаздывание': 12, 'постоянная времени': 78}
>>> D_keys, D_values = list(D.keys()), list(D.values())
>>> D_keys
['усиление', 'запаздывание', 'постоянная времени']
>>> D_values
[23, 12, 78]
>>> D_cort = tuple(D_keys + D_values)
>>> D_cort
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Список изменяемый, кортеж неизменяемыйСписок изменяемый, кортеж неизменяемый
3.
```py
>>> ((1768 // 24.8) % 3)**2.4
5.278031643091577
```
4.
```py
>>> (~(13 & 27)^14) << 2
-32
```
5.
```py
>>> spis = ['колебат', 'колебат', 'колебат', 'колебат']
>>> spis
['колебат', 'колебат', 'колебат', 'колебат']
>>> check = 'аткол' in (spis[2] + spis[3])
>>> check
True
```
6.
```py
>>> wqw = dir(D)
>>> wqw
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> D_values, D_keys = D.values(), D.keys()
>>> D_values
dict_values([23, 12, 78])
>>> D_keys
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
```
7.
```py
>>> stroke = "Создать объект - символьную строку с текстом данного предложения"
>>> stroke
'Создать объект - символьную строку с текстом данного предложения'
>>> only_words = stroke.split(' ')
>>> only_words
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> index_of_replace_symbol = only_words.index('-')
>>> index_of_replace_symbol
2
>>> only_words[index_of_replace_symbol] = ','
>>> only_words
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> only_words.remove('данного')
>>> only_words
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

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

@@ -0,0 +1,69 @@
# Тест по модулю 1
Марков Никита Сергеевич, А-03-23
## 7 вариант
### 1)Можно ли работать со средой без использования интерактивной оболочки IDLE?
Да можно работать без IDLE.
В первой лабораторной работе мы работали в командной строке.
### 2)Создайте объект-словарь с 7 элементами: ключи - названия (аббревиатура) вузов, значения - число студентов (задать произвольно). Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
```py
>>> msk={
"МЭИ" : 52146,
"МГУ" : 54831,
'МФТИ': 7500,
'ВШЭ': 42000,
'МГТУ': 18500,
'РУДН': 29500,
'МИФИ': 8200
}
>>> msk
{'МЭИ': 52146, 'МГУ': 54831, 'МФТИ': 7500, 'ВШЭ': 42000, 'МГТУ': 18500, 'РУДН': 29500, 'МИФИ': 8200}
>>> type(msk)
<class 'dict'>
>>> dir(msk)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
```
### 3)Напишите инструкцию, позволяющую вычислить общее число студентов в двух указываемых вузах из словаря.
```py
>>> total=msk["МФТИ"] + msk["МЭИ"]
>>> total
59646
```
### 4)Преобразуйте значения из словаря в список и, затем, список - в строку. Отобразите полученные объекты. Получите новый список, разделением строки на части по разделителю: ",".
```py
>>> strk = ', '.join(str(x) for x in spismsk)
>>> strk
'52146, 54831, 7500, 42000, 18500, 29500, 8200, МЭИ, МГУ, МФТИ, ВШЭ, МГТУ, РУДН, МИФИ'
```
### 5) Используя операцию подстановки, отобразить рассчитанное число студентов в 2-х вузах по шаблону: "Число студентов в <название вуза 1> и <название вуза 2> =:".
```py
print(f"Число студентов в {spismsk[7]} и {spismsk[8]} = {spismsk[0] + spismsk[1]}")
Число студентов в МЭИ и МГУ = 106977
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

@@ -0,0 +1,347 @@
# Протокол по Теме 4
Марков Никита Сергеевич, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Стандартные функции
### 2.1 Функция round – округление числа с заданной точностью
```py
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> round(123.456)
123
```
### 2.2. Функция range
```py
>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
>>> list(gg)
[76, 85, 94, 103, 112, 121]
>>> range(23)
range(0, 23)
>>> list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
### 2.3. Функция zip
```py
>>> qq = ['Markov','Butko','Ogarkov','Krishtul']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x0000026369CB4400>
>>> tuple(ff)
((76, 'Markov'), (85, 'Butko'), (94, 'Ogarkov'), (103, 'Krishtul'))
>>> ff[0]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
ff[0]
TypeError: 'zip' object is not subscriptable
```
Нельзя обращаться с указанием индекса, т.к. объект является итерируемым класса zip
### 2.4 Функция eval
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
>>> dan
-131.0
```
### 2.5 Функция exec
```py
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
```
### 2.6. Функции abs, pow, max, min, sum, divmod, len, map
```py
>>> abs(-14)
14
>>> pow(2, 3)
8
>>> max(1, 2, 3)
3
>>> min(1, 2, 3)
1
>>> sum([1, 2, 3])
6
>>> divmod(5, 3)
(1, 2)
>>> len(range(0, 15+1))
16
>>> map_test = map(lambda x: round(x, 1), [12.1245, 14.125234, 534.222])
>>> list(map_test)
[12.1, 14.1, 534.2]
```
## 3. Функции из стандартного модуля math
```py
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
>>> math.sin(90)
0.8939966636005579
>>> math.acos(0)
1.5707963267948966
>>> math.degrees(math.pi)
180.0
>>> math.radians(180)
3.141592653589793
>>> math.exp(1)
2.718281828459045
>>> math.log(10)
2.302585092994046
>>> math.log10(100)
2.0
>>> math.sqrt(16)
4.0
>>> math.ceil(3.14) # округление вверх
4
>>> math.floor(3.14) # округление вниз
3
>>> math.pi
3.141592653589793
>>> math.sin((2*math.pi/7) + math.exp(0.23))
0.8334902641414562
```
## 4. Функции из модуля cmath, c комплексными числами
```py
>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1-0.5j)
-0.4636476090008061
```
## 5. random
```py
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.seed)
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.
```
```py
>>> random.random() # вещественное число от 0.0 до 1.0
0.12874671061082976
>>> random.uniform(5, 15) # вещественное число от 5.0 до 15.0
13.134575401523493
>>> random.randint(1, 100) # целое число от 1 до 100
32
>>> random.gauss(0, 1) # mu - среднее значение, sigma - стандартное отклонение
-0.07800637063087972
>>> random.choice([1, 2, 3, 4]) # случайный выбор элемента из списка, кортежа, строки и т.д.
3
>>> My_Numbers = [1, 2, 3, 4]
>>> random.shuffle(My_Numbers)
>>> My_Numbers
[1, 2, 4, 3]
>>> random.sample(My_Numbers, 2) # случайный выбор двух элементов из My_Numbers
[4, 1]
>>> random.betavariate(2, 5)
0.16541871582286427
>>> random.gammavariate(2, 1)
0.6551814424330216
```
## 6. time - работа с календарем и временем
```py
>>> import time
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
>>> c1=time.time()
>>> c1
1760283309.499735
>>> c2=time.time()-c1
>>> c2
10.906989812850952
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=15, tm_min=35, tm_sec=35, tm_wday=6, tm_yday=285, tm_isdst=0)
>>> dat.tm_mon
10
>>> time.asctime((2024, 12, 10, 18, 7, 14, 1, 345, 0)) #год, месяц, день, час, минута, секунда, день недели, день года, летнее время
'Tue Dec 10 18:07:14 2024'
>>> time.ctime(time.time())
'Sun Oct 12 18:36:59 2025'
>>> time.mktime((2025, 12, 25, 15, 30, 0, 0, 0, 0))
1766665800.0
```
## 7. Графические функции
```py
>>> import pylab
>>> x=list(range(-3,55,4))
>>> x
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
>>> t=list(range(15))
>>> t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000002630D20D340>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show()
```
**Результат:**
<image src="Figure_1.png">
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000026312246130>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x00000263122463D0>]
>>> pylab.show()
```
**Результат:**
<image src="Figure_2.png">
```py
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000002631062D130>, <matplotlib.patches.Wedge object at 0x000002631062D1F0>, <matplotlib.patches.Wedge object at 0x000002631063B970>, <matplotlib.patches.Wedge object at 0x000002631063BDF0>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()
```
**Результат:**
<image src="diag.png">
```py
>>> pylab.bar(region, naselen)
<BarContainer object of 4 artists>
>>> pylab.title('Население по регионам')
Text(0.5, 1.0, 'Население по регионам')
>>> pylab.ylabel('Население (млн)')
Text(0, 0.5, 'Население (млн)')
>>> pylab.show()
```
**Результат:**
<image src="hist.png">
```py
>>> pylab.hist(naselen)
(array([2., 0., 1., 0., 0., 0., 0., 0., 0., 1.]), array([12. , 17.3, 22.6, 27.9, 33.2, 38.5, 43.8, 49.1, 54.4, 59.7, 65. ]), <BarContainer object of 10 artists>)
>>> pylab.title('Гистограмма распределения населения')
Text(0.5, 1.0, 'Гистограмма распределения населения')
>>> pylab.xlabel('Население (млн)')
Text(0.5, 0, 'Население (млн)')
>>> pylab.ylabel('Частота')
Text(0, 0.5, 'Частота')
>>> pylab.show()
```
**Результат:**
<image src="hist2.png">
## 8. Статистический модуль statistics
```py
>>> import statistics
>>> numbers = [1,2,3,4,5,6,7,8,9]
>>> statistics.mean(numbers)
5
>>> statistics.median(numbers)
5
>>> statistics.mode(numbers)
1
```

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

@@ -0,0 +1,64 @@
# Общее контрольное задание по теме 4
Марков Никита Сергеевич, А-03-23
## Задание
1.Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
2.Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
3.Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
4.Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
5.Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
6.Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
import cmath
import math
import time
import random
import string
# 1
>>> first = round(cmath.phase(0.2+0.8j), 2) * 20
>>> divmod(math.floor(first), 3)
(8, 2)
# 2
>>> moscow_time = time.localtime()
>>> string_with_time = f"{moscow_time.tm_hour}:{moscow_time.tm_min}"
>>> print(string_with_time, type(moscow_time))
19:1 <class 'time.struct_time'>
# 3
>>> days_of_week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']
>>> random.sample(days_of_week, 3)
['Четверг', 'Среда', 'Понедельник']
# 4
>>> numbers = list(range(14, 32+1, 3))
>>> random.choice(numbers)
20
#5
>>> N = round(random.normalvariate(15, 4))
>>> N
14
>>> gen_list = random.choices(string.ascii_uppercase, k=N)
>>> gen_list
['A', 'N', 'V', 'L', 'N', 'U', 'O', 'V', 'N', 'R', 'L', 'Z', 'Q', 'R']
#6
>>> current_time = time.time()
>>> previous_time = time.mktime(moscow_time)
>>> time_interval_minutes = (current_time - previous_time) / 60
>>> time_interval_minutes
1.379131011168162
```

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

@@ -0,0 +1,26 @@
# Индивидуальное контрольное задание
Марков Никита Сергеевич, А-03-23
## 1 вариант
### Задание
Создайте список1 со значениями от 45 до 235 с шагом 5. Создайте список2 с элементами: 1,2,3,…(число элементов в списке2 должно быть таким же, как и в списке1). Напишите инструкцию создания с использованием двух ранее созданных списков общего списка с элементами- кортежами по образцу: (45,1), (50, 2),… . Выполните эту инструкцию с помощью функции eval.
```py
>>> spis1=list(range(45,235,5))
>>> spis1
[45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230]
>>> len(spis1)
38
>>> spis2=list(range(1,len(spis1) + 1))
>>> spis2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]
>>> instr="list(zip(spis1,spis2))"
>>> spis12 = eval(instr)
>>> spis12
[(45, 1), (50, 2), (55, 3), (60, 4), (65, 5), (70, 6), (75, 7), (80, 8), (85, 9), (90, 10), (95, 11), (100, 12), (105, 13), (110, 14), (115, 15), (120, 16), (125, 17), (130, 18), (135, 19), (140, 20), (145, 21), (150, 22), (155, 23), (160, 24), (165, 25), (170, 26), (175, 27), (180, 28), (185, 29), (190, 30), (195, 31), (200, 32), (205, 33), (210, 34), (215, 35), (220, 36), (225, 37), (230, 38)]
```

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

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

После

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

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

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

После

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

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

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

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

@@ -0,0 +1,120 @@
# Общее контрольное задание по теме 5
Марков Никита Сергеевич, А-03-23
## Задание
1.Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
2.Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
3.Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
### Задание №1
```py
>>> alphabet="abcdefghijklmnopqrstuvwxyz"
>>> stroka="My name is Nikita. I am a student of MPEI"
>>> for cur_ind in range(len(stroka)):
low_stroka=stroka.lower()
letter=low_stroka[cur_ind]
if not letter in alphabet:
continue
else:
print("Порядковый номер буквы ",letter," - ", alphabet.index(letter)+1)
Порядковый номер буквы m - 13
Порядковый номер буквы y - 25
Порядковый номер буквы n - 14
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
Порядковый номер буквы s - 19
Порядковый номер буквы n - 14
Порядковый номер буквы i - 9
Порядковый номер буквы k - 11
Порядковый номер буквы i - 9
Порядковый номер буквы t - 20
Порядковый номер буквы a - 1
Порядковый номер буквы i - 9
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы a - 1
Порядковый номер буквы s - 19
Порядковый номер буквы t - 20
Порядковый номер буквы u - 21
Порядковый номер буквы d - 4
Порядковый номер буквы e - 5
Порядковый номер буквы n - 14
Порядковый номер буквы t - 20
Порядковый номер буквы o - 15
Порядковый номер буквы f - 6
Порядковый номер буквы m - 13
Порядковый номер буквы p - 16
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
```
### Задание 2
```py
>>> text="Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."
>>> text=text.replace('.','');text=text.replace(',','');text=text.replace('(','');text=text.replace(')','');text=text.replace(':','');text=text.replace('','');
>>> text
'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
>>> text=text.replace(' ',' ')
>>> text_list = text.split()
>>> text_list
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
>>> word1='как'
>>> word2='Андрей'
>>> if word1 in text_list:
print("Слово '",word1,"' найдено в списке слов.")
else:
print("Слово '",word1,"' не найдено в списке слов.")
Слово ' как ' найдено в списке слов.
>>> if word2 in text_list:
print("Слово '",word2,"' найдено в списке слов.")
else:
print("Слово '",word2,"' не найдено в списке слов.")
Слово ' Андрей ' не найдено в списке слов.
```
### Задание 3
```py
>>> sr_ball_summer=[3.35,4,3.5,3.5]
>>> stud_summer=['Markov','Butko','Ogarkov','Stepanishev']
>>> stud_winter=['Butko','Ogarkov','Markov','Stepanishev']
>>> sr_ball_winter=[4,4.25,4.5,3]
>>> search_surname = input("Введите фамилию студента: ")
Введите фамилию студента: Markov
>>> print("Средний балл студента с фамилией",search_surname,"по зимней сессии -", sr_ball_winter[stud_winter.index(search_surname)], ", а по летней -",sr_ball_summer[stud_summer.index(search_surname)])
Средний балл студента с фамилией Markov по зимней сессии - 4.5 , а по летней - 3.35
```

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

@@ -0,0 +1,28 @@
# Индивидуальное контрольное задание
Марков Никита Сергеевич, А-03-23
## 23 вариант
23.Создайте множество с 20 элементами – случайными, нормально распределенными числами с математическим ожиданием -5 и стандартным отклонением 8. Превратите множество в список, рассчитайте по нему среднее значение. Подсчитайте сколько элементов списка превышают это среднее значение и отобразите результат в виде символьной строки вида: «превышение в ХХ случаях».
```py
>>> import random
>>> random_set = set()
>>> while len(random_set) < 20:
random_set.add(random.gauss(-5, 8))
>>> numbers_list = list(random_set)
>>> average = sum(numbers_list) / len(numbers_list)
>>> count = 0
>>> above_avg = []
>>> for num in numbers_list:
if num > average:
count += 1
above_avg.append(num)
>>> print(f"превышение в {count} случаях")
превышение в 9 случаях
```

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

@@ -0,0 +1,3 @@
asddsadsad
2134
@!#42112

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

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

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

@@ -0,0 +1,370 @@
# Протокол по Теме 6
Марков Никита Сергеевич, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Вывод данных на экран дисплея
### 2.1 Вывод в командной строке.
```py
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
```
### 2.2 Вывод с использованием функции print
```py
>>> fff=234.5;gg='Значение температуры = '
>>> print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
>>> print(gg, fff, sep='/')
Значение температуры = /234.5
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
>>> print()
>>> print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
### 2.3 Вывод с использованием метода write объекта sys.stdout
Объект stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. Обычно это – экран дисплея. Объект находится в модуле sys, который надо импортировать
```py
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3.Ввод данных с клавиатуры.
```py
>>> psw
'12345'
>>> type(psw)
<class 'str'>
>>> while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4.Ввод-вывод при работе с файлами.
### 4.1. Функции для работы с путем к файлу.
```py
>>> import os
>>> os.getcwd()
'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python39_64'
>>> Markov = os.getcwd()
>>> print(Markov)
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64
```
#### Пробую методы вложенного модуля path
```py
>>> os.chdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6')
>>> os.getcwd()
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6'
>>> os.mkdir("aa") #Создание папки в рабочем каталоге
>>> os.rmdir("aa") #Удаление папки
>>> os.listdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6') #Вывод файлом, находящихся в рабочем каталоге
['.gitkeep', 'report.md']
>>> os.path.isdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6') #Проверка существует ли каталог
True
>>> os.path.abspath("OPLATA.DBF")
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6\\OPLATA.DBF'
>>> fil=os.path.abspath("OPLATA.DBF")
>>> fil
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6\\OPLATA.DBF'
>>> drkt=os.path.dirname(fil)
>>> drkt
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6'
>>> os.path.basename(fil)
'OPLATA.DBF'
>>> os.path.split(fil)
('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6', 'OPLATA.DBF')
>>> os.path.exists(fil)
True
>>> os.path.isfile(fil)
True
>>> os.path.isfile(os.path.dirname(fil)+'fil1.txt')
False
```
### 4.3.Открытие файла для записи или чтения данных – функция open.
```py
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
>>> drkt
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6'
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
>>> fp=open(drkt+'\\zapis1.txt','w')
>>> fp=open('zapis1.txt','w')
>>> fp
<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='cp1251'>
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> drkt
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA6'
>>> fp.close()
```
w – запись с созданием нового файла или перезапись существующего файла,
w+ - чтение и запись/перезапись файла,
r – только чтение (это значение - по умолчанию),
r+ - чтение и/или запись в существующий файл,
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
a+ - то же, что и в «a», но с возможностью чтения из файла.
### 4.5. Запись информации в файл с помощью метода write.
```py
>>> sps=list(range(1,13))
>>> fp2=open('zapis3.txt','w')
>>> fp2.write(str(sps[:4])+'\n')
13
>>> fp2.write(str(sps[4:8])+'\n')
13
>>> fp2.write(str(sps[8:])+'\n')
16
>>> fp2.close()
```
**Результат:**
<image src="screen1.jpg">
```py
>>> sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
>>> fp3=open('zapis4.txt','w')
>>> for i in range(len(sps3)):
stroka4=sps3[i][0]+' '+str(sps3[i][1])
fp3.write(stroka4)
11
11
12
>>> fp3.close()
>>> gh=open('zapis5.txt','w')
>>> for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
>>> gh.close()
```
**Результат:**
<image src="screen2.jpg">
<image src="screen3.jpg">
### 4.6. Первый способ чтения информации из текстового файла.
```py
>>> sps1=[]
>>> fp=open('zapis3.txt')
>>> for stroka in fp:
stroka=stroka.rstrip('\n')
stroka=stroka.replace('[','')
stroka=stroka.replace(']','')
sps1=sps1+stroka.split(',')
>>> fp.close()
>>> print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
>>> for i in range(len(sps1)):
sps1[i] = int(sps1[i])
>>> sps1==sps
True
```
### 4.7. Чтение информации из файла с помощью метода read.
```py
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> print(stroka1)
[1, 2, 3, 4]
>>> print(stroka2)
[5, 6, 7, 8]
[9, 10, 11, 12]
```
### 4.8. Чтение информации с помощью методов readline и readlines.
```py
>>> fp=open('zapis3.txt')
>>> strok1 = fp.readline()
>>> strok1
'[1, 2, 3, 4]\n'
>>> print(strok1)
[1, 2, 3, 4]
>>> fp.close()
>>> fp=open('zapis3.txt');stroka1=fp.readlines()
>>> print(stroka1)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
>>> fp.close()
```
### 4.9. Ввод-вывод объектов с использованием функций из модуля pickle.
```py
>>> import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>> pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
>>> fp.close()
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>> fp.close()
>>> mnoz2 == mnoz1
True
>>> mnoz1
{'book', 'table', 'pen', 'iPhone'}
>>> mnoz2
{'table', 'book', 'pen', 'iPhone'}
>>> sps3
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
>>> fp=open('zapis7.2ob','wb')
>>> pickle.dump(mnoz1,fp)
>>> pickle.dump(sps3,fp)
>>> fp.close()
>>> fp=open('zapis7.2ob','rb')
>>> obj1=pickle.load(fp) #Первое обращение к load читает первый объект
>>> obj2=pickle.load(fp) #Второе – читает второй
>>> fp.close()
```
## 5.Перенаправление потоков ввода и вывода данных.
```py
>>> import sys
>>> vr_out=sys.stdout #Запоминаем текущий поток вывода
>>> fc=open('Stroka.txt','w') #Откроем файл вывода
>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
>>> sys.stdout=vr_out #Восстановление текущего потока
>>> print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
>>> fc.close()
>>> tmp_in = sys.stdin #Запоминаем текущий поток ввода
>>> fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения)
>>> sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
>>> 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 #Не забыть вернуть стандартное назначение для потока ввода
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

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

@@ -0,0 +1,109 @@
# Общее контрольное задание по теме 5
Марков Никита Сергеевич, А-03-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
1.Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
2.Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
3.Записывается кортеж в бинарный файл.
4.Записывается в этот же файл список и закрывается файл.
5.Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
6.Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
7.Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
### Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
```py
>>> import random as rn
>>> kort = tuple(str(rn.randint(6,56)) for _ in range(126))
>>> kort
('35', '56', '22', '10', '20', '39', '10', '40', '31', '10', '45', '35', '47', '29', '50', '7', '54', '55', '49', '23', '41', '47', '12', '49', '17', '23', '17', '34', '19', '28', '16', '45', '48', '17', '8', '9', '33', '37', '25', '37', '55', '25', '41', '41', '29', '24', '29', '36', '9', '31', '24', '13', '14', '54', '28', '20', '7', '25', '45', '18', '17', '32', '21', '49', '41', '14', '23', '45', '10', '26', '51', '19', '14', '56', '44', '33', '50', '32', '16', '35', '15', '29', '39', '30', '46', '27', '31', '37', '20', '39', '50', '29', '31', '17', '53', '49', '42', '50', '27', '33', '47', '39', '48', '43', '14', '22', '29', '29', '26', '51', '50', '42', '36', '43', '39', '21', '55', '6', '19', '52', '38', '52', '32', '50', '29', '27')
```
### Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
```py
>>> spis = ['Марков','Бутко','Грудинин','Степанищев','Криштул']
```
### Записывается кортеж и список в бинарный файл.
```py
>>> import pickle
>>> fp=open('task.bn','wb')
>>> pickle.dump(kort,fp)
>>> pickle.dump(spis,fp)
>>> fp.close()
>>> fp=open('task.bn','rb')
>>> obj1=pickle.load(fp)
>>> obj2=pickle.load(fp)
>>> fp.close()
>>> obj1 == kort; obj2 == spis
True
True
>>> obj1
('35', '56', '22', '10', '20', '39', '10', '40', '31', '10', '45', '35', '47', '29', '50', '7', '54', '55', '49', '23', '41', '47', '12', '49', '17', '23', '17', '34', '19', '28', '16', '45', '48', '17', '8', '9', '33', '37', '25', '37', '55', '25', '41', '41', '29', '24', '29', '36', '9', '31', '24', '13', '14', '54', '28', '20', '7', '25', '45', '18', '17', '32', '21', '49', '41', '14', '23', '45', '10', '26', '51', '19', '14', '56', '44', '33', '50', '32', '16', '35', '15', '29', '39', '30', '46', '27', '31', '37', '20', '39', '50', '29', '31', '17', '53', '49', '42', '50', '27', '33', '47', '39', '48', '43', '14', '22', '29', '29', '26', '51', '50', '42', '36', '43', '39', '21', '55', '6', '19', '52', '38', '52', '32', '50', '29', '27')
>>> obj2
['Марков', 'Бутко', 'Грудинин', 'Степанищев', 'Криштул']
>>> if(obj1 == kort and obj2 == spis):
print("Объекты схожи")
Объекты схожи
```
### Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
```py
>>> vocab = {}
>>> for i in range(0,len(kort),5):
vocab['группа №'+str(i//5)] = list(kort[i:i+5])
```

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

@@ -0,0 +1,3 @@
<EFBFBD>אלאנא, <20>טזםטי <20>מגדמנמה
<EFBFBD>מסךגא, <20>נוםבףנד
<EFBFBD>אםךע-<2D>ועונבףנד

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

@@ -0,0 +1,119 @@
# Тест по модулю 2
Марков Никита Сергеевич, А-03-23
## 14 вариант
### 1) Создайте кортеж с 8 разными названиями городов России. Напишите инструкцию создания списка с 5 городами, случайно отобранными из кортежа.
```py
>>> import random
>>> cities = ('Москва', 'Санкт-Петербург', 'Новосибирск', 'Екатеринбург','Оренбург', 'Нижний Новгород', 'Челябинск', 'Самара')
>>> spis = random.sample(cities, 5)
>>> spis
['Самара', 'Нижний Новгород', 'Москва', 'Оренбург', 'Санкт-Петербург']
```
### 2) Запросите у пользователя имя текстового файла и сохраните в нем созданный список - по два города на строке.
```py
>>> file = input('Введите имя файла: ')
Введите имя файла: test.txt0
>>> f = open(file, 'w')
>>> for i in range(0, len(spis), 2):
line = spis[i:i+2]
f.write(', '.join(line) + '\n')
24
17
16
>>> file
'test.txt'
>>> fp.close()
```
### 3) Создайте список с 30 целыми случайными десятичными числами из интервала значений от 100 до 200. Определите по нему, сколько значений попадает в интервал от 130 до 170. Выведите результат на экран.
```py
>>> import random as rn
>>> spis = list(rn.randint(100,200) for _ in range(1,31))
>>> len(spis)
30
>>> spis
[104, 140, 160, 143, 114, 189, 172, 114, 170, 179, 148, 110, 151, 195, 112, 141, 111, 115, 133, 117, 161, 127, 177, 168, 130, 102, 187, 173, 160, 199]
>>> k=0
>>> for i in spis:
if i>=130 and i<=170:
k+=1
>>> k
12
```
### 4) Определите, сколько в списке четных и сколько нечетных чисел. Отобразите результат в виде одной строки на экране.
```py
>>> chet=0
>>> nechet=0
>>> for i in spis:
if i%2==0:
chet+=1
else:
nechet+=1
>>> chet
14
>>> nechet
16
```
### 5) Прочитайте данные из ранее созданного текстового файла и отобразите их на экране так, как они лежат в файле под общим заголовком: "Города России".
```py
>>> f = open(file, 'r')
>>> cities = f.read()
>>> cities
'Самара, Нижний Новгород\nМосква, Оренбург\nСанкт-Петербург\n'
>>> print("Города России");print("=" * 30);print(cities)
Города России
==============================
Самара, Нижний Новгород
Москва, Оренбург
Санкт-Петербург
```

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

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

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

@@ -0,0 +1 @@
['1', ' ', '2', ' ', '3', ' ', '4', ' ', '5']

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

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

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

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

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

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

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

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

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

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

После

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

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

@@ -0,0 +1,515 @@
# Протокол по Теме 7
Марков Никита Сергеевич, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Создание пользовательской функции.
### 2.1. Первый пример: функция – без аргументов.
```py
def uspeh():
"""Подтверждение успеха операции"""
print('Выполнено успешно!')
uspeh()
Выполнено успешно!
type(uspeh)
<class 'function'>
dir(uspeh)
['__annotate__', '__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
help(uspeh)
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
```
### 2.2. Пример функции с аргументами.
```py
def sravnenie(a,b):
"""Сравнение a и b"""
if a>b:
print(a,' больше ',b)
elif a<b:
print(a, ' меньше ',b)
else:
print(a, ' равно ',b)
n,m=16,5;sravnenie(n,m)
16 больше 5
```
### 2.3. Пример функции, содержащей return.
```py
def logistfun(b,a):
"""Вычисление логистической функции"""
import math
return a/(1+math.exp(-b))
v,w=1,0.7;z=logistfun(w,v)
z
0.6681877721681662
```
### 2.4. Сложение для разных типов аргументов
```py
def slozh(a1,a2,a3,a4):
""" Сложение значений четырех аргументов"""
return a1+a2+a3+a4
slozh(1,2,3,4) # Сложение чисел
10
slozh('1','2','3','4') # Сложение строк
'1234'
b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
q=slozh(b1,b2,b3,b4) #Сложение списков
q
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 2.5. Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
```py
def inerz(x,T,ypred):
""" Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства"""
y=(x+T*ypred)/(T+1)
return y
sps=[0]+[1]*100
spsy=[] #Заготовили список для значений выхода
TT=20 #Постоянная времени
yy=0 #Нулевое начальное условие
for xx in sps:
yy=inerz(xx,TT,yy)
spsy.append(yy)
spsy
[0.0, 0.047619047619047616, 0.09297052154195011, 0.13616240146852393, 0.177297525208118, 0.21647383353154095, 0.25378460336337233, 0.2893186698698784, 0.3231606379713128, 0.35539108378220263, 0.38608674645924057, 0.4153207109135625, 0.4431625818224405, 0.46967864935470527, 0.4949320470044812, 0.5189829019090297, 0.5418884780085997, 0.5637033123891426, 0.5844793451325168, 0.6042660429833493, 0.6231105171269993, 0.6410576353590469, 0.6581501289133781, 0.6744286942032173, 0.6899320897173498, 0.7046972283022379, 0.7187592650497504, 0.7321516809997624, 0.7449063628569166, 0.7570536789113491, 0.768622551344142, 0.7796405250896592, 0.7901338334187231, 0.800127460398784, 0.8096452003797943, 0.8187097146474231, 0.8273425853784983, 0.8355643670271411, 0.8433946352639439, 0.8508520335847084, 0.8579543176997223, 0.8647183978092594, 0.8711603788659613, 0.8772955989199631, 0.88313866563806, 0.8887034910838667, 0.8940033248417778, 0.899050785563598, 0.9038578910129503, 0.9084360866790003, 0.9127962730276193, 0.9169488314548756, 0.9209036490046435, 0.9246701419091843, 0.9282572780087468, 0.9316735981035684, 0.9349272362891128, 0.9380259393229645, 0.94097708506949, 0.9437877000661808, 0.9464644762535056, 0.9490137869081006, 0.9514417018172386, 0.9537540017307035, 0.9559561921244795, 0.958053516309028, 0.96005096791336, 0.9619533027746285, 0.963765050261551, 0.9654905240586201, 0.9671338324367811, 0.9686988880350297, 0.9701894171762188, 0.971608968739256, 0.9729609226088152, 0.9742484977226811, 0.9754747597358867, 0.976642628319892, 0.9777548841141828, 0.9788141753468407, 0.9798230241398483, 0.9807838325141413, 0.981698888108706, 0.982570369627339, 0.9834003520260372, 0.9841908114533686, 0.9849436299555892, 0.9856605999577039, 0.9863434285311466, 0.9869937414582349, 0.9876130871030808, 0.9882029400981722, 0.988764704855402, 0.9892997189099068, 0.9898092561046732, 0.9902945296234982, 0.9907566948795221, 0.9911968522662116, 0.9916160497773444, 0.9920152855022327, 0.9923955100021263]
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
<Figure size 1000x500 with 0 Axes>
plt.plot(spsy, 'b-', linewidth=2)
[<matplotlib.lines.Line2D object at 0x000001C53CE7FB60>]
plt.title('Выходной сигнал инерционной системы')
Text(0.5, 1.0, 'Выходной сигнал инерционной системы')
plt.xlabel('Время')
Text(0.5, 0, 'Время')
plt.ylabel('Амплитуда')
Text(0, 0.5, 'Амплитуда')
plt.grid()
plt.show()
```
**Результат:**
<image src="Figure_1.png">
## 3. Функции как объекты.
### 3.1. Получение списка атрибутов объекта-функции.
```py
dir(inerz)
['__annotate__', '__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
inerz.__doc__
'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\n T -постоянная времени,\n ypred - предыдущее значение выхода устройства'
help(inerz)
Help on function inerz in module __main__:
inerz(x, T, ypred)
Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства
```
### 3.2. Сохранение ссылки на объект-функцию в другой переменной.
```py
fnkt=sravnenie
v=16
fnkt(v,23)
16 меньше 23
```
### 3.3. Возможность альтернативного определения функции в программе.
```py
typ_fun=8
if typ_fun==1:
def func():
print('Функция 1')
else:
def func():
print('Функция 2')
func()
Функция 2
```
## 4. Аргументы функции.
### 4.1. Изучите возможность использования функции в качестве аргумента другой функции
```py
def fun_arg(fff,a,b,c):
"""fff-имя функции, используемой
в качестве аргумента функции fun_arg"""
return a+fff(c,b)
zz=fun_arg(logistfun,-3,1,0.7)
zz
-2.3318122278318336
```
### 4.2. Обязательные и необязательные аргументы.
```py
def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1
"""Вычисление логистической функции"""
import math
return b/(1+math.exp(-a))
logistfun(0.7) #Вычисление со значением b по умолчанию
0.6681877721681662
logistfun(0.7,2) #Вычисление с заданным значением b
1.3363755443363323
```
### 4.3. Изучите возможность обращения к функции с произвольным (непозиционным) расположением аргументов. При этом надо в обращении к функции указывать имена аргументов:
```py
logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
0.34498724056380625
```
### 4.4. Пример со значениями аргументов функции, содержащимися в списке или кортеже.
```py
b1234=[b1,b2,b3,b4] # Список списков из п.2.4
b1234
[[1, 2], [-1, -2], [0, 2], [-1, -1]]
qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку
qq
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 4.5. Пример со значениями аргументов функции, содержащимися в словаре
```py
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
qqq
10
```
### 4.6. Смешанные ссылки
```py
e1=(-1,6);dd2={'a3':3,'a4':9}
qqqq=slozh(*e1,**dd2)
qqqq
17
```
### 4.7. Переменное число аргументов у функции.
```py
def func4(*kort7):
"""Произвольное число аргументов в составе кортежа"""
smm=0
for elt in kort7:
smm+=elt
return smm
func4(-1,2) #Обращение к функции с 2 аргументами
1
func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами
10
```
### 4.8. Комбинация аргументов
```py
def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж
"""Кортеж - сборка аргументов - должен быть последним!"""
smm=0
for elt in kort7:
smm+=elt
return a*smm+b
func4(-1,2,0,3,6)
-7
```
### 4.9. Изменение значений объектов, используемых в качестве аргументов функции.
```py
a=90 # Числовой объект – не изменяемый тип
def func3(b):
b=5*b+67
func3(a)
a
90
sps1=[1,2,3,4] #Список – изменяемый тип объекта
def func2(sps):
sps[1]=99
func2(sps1)
print(sps1)
[1, 99, 3, 4]
kort=(1,2,3,4) #Кортеж – неизменяемый тип объекта
func2(kort)
Traceback (most recent call last):
File "<pyshell#75>", line 1, in <module>
func2(kort)
File "<pyshell#71>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
```
## 5. Специальные типы пользовательских функций
### 5.1. Анонимные функции.
```py
import math
anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов
anfun1() # Обращение к объекту-функции
2.7362852774480286
anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами
anfun2(17,234)
19.369215857410143
anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом
anfun3(100)
102.36921585741014
```
### 5.2. Функции-генераторы.
```py
def func5(diap,shag):
""" Итератор, возвращающий значения
из диапазона от 1 до diap с шагом shag"""
for j in range(1,diap+1,shag):
yield j
for mm in func5(7,3):
print(mm)
1
4
7
alp=func5(7,3)
print(alp.__next__())
1
print(alp.__next__())
4
print(alp.__next__())
7
print(alp.__next__())
Traceback (most recent call last):
File "<pyshell#92>", line 1, in <module>
print(alp.__next__())
StopIteration
```
## 6. Локализация объектов в функциях.
### 6.1. Примеры на локализацию объектов.
```py
glb=10
def func7(arg):
loc1=15
glb=8
return loc1*arg
res=func7(glb)
res
150
def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
res=func8(glb)
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
res=func8(glb)
File "<pyshell#97>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
glb=11
def func7(arg):
loc1=15
global glb
print(glb)
glb=8
return loc1*arg
res=func7(glb)
11
res
165
glb
8
```
### 6.2. Выявление локализации объекта с помощью функций locals() и globals() из builtins.
```py
def func8(arg):
loc1=15
glb=8
print(globals().keys()) #Перечень глобальных объектов «изнутри» функции
print(locals().keys()) #Перечень локальных объектов «изнутри» функции
return loc1*arg
hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
'glb' in globals().keys()
True
```
### 6.3. Локализация объектов при использовании вложенных функций.
```py
def func9(arg2,arg3):
def func9_1(arg1):
loc1=15
glb1=8
print('glob_func9_1:',globals().keys())
print('locl_func9_1:',locals().keys())
return loc1*arg1
loc1=5
glb=func9_1(loc1)
print('loc_func9:',locals().keys())
print('glob_func9:',globals().keys())
return arg2+arg3*glb
kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9', 'loc1'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9', 'loc1'])
kk
85
```
### 6.4. Большой пример – моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
```py
import math
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1,T,k2,Xm,A,F,N=1.5,0.1,0.8,0.2,1.0,10,50
k1 = float(znach[0])
T = float(znach[1])
k2 = float(znach[2])
Xm = float(znach[3])
A = float(znach[4])
F = float(znach[5])
N = int(znach[6])
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
print("Входной сигнал:", vhod)
def realdvig(xtt, kk1, TT, yti1, ytin1):
"""Модель реального двигателя"""
yp = kk1 * xtt # усилитель
yti1 = yp + yti1 # Интегратор
ytin1 = (yti1 + TT * ytin1) / (TT + 1)
return [yti1, ytin1]
def tahogen(xtt, kk2, yti2):
"""Модель тахогенератора"""
yp = kk2 * xtt # усилитель
yti2 = yp + yti2 # интегратор
return yti2
def nechus(xtt, gran):
"""Зона нечувствительности"""
if xtt < gran and xtt > (-gran):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt
yi1 = 0; yin1 = 0; yi2 = 0
vyhod = []
for xt in vhod:
xt1 = xt - yi2 # отрицательная обратная связь
[yi1, yin1] = realdvig(xt1, k1, T, yi1, yin1)
yi2 = tahogen(yin1, k2, yi2)
yt = nechus(yin1, Xm)
vyhod.append(yt)
print('y=', vyhod)
y= [0, 0.6015253440351906, 1.096895249493391, 0.14963802472452992, -1.4055603261317517, -2.5023946767056238, -1.3746543603374242, 0.7777548679354078, 2.3930377777245795, 1.589728806501168, -0.18435823514401645, -1.262236228089791, -0.1499221532340092, 1.1432335494953787, 0.9284774407601177, -1.092316839336339, -3.1053851997702706, -1.9708827095800603, 1.4179982683905918, 4.178467267009747, 2.8704598657124154, -0.9554762632284055, -3.6907891747930823, -2.0460936031856565, 1.5516985830908399, 3.050939390566601, 0, -3.803109375076022, -3.7144283665966316, 1.1278012079884292, 6.1915501329945455, 5.067998743352809, -1.4695723076381413, -7.114338992237411, -5.15766901200028, 2.1332451522780023, 6.998570550403378, 3.258668282071149, -4.636620081834843, -7.5743517324240575, -0.7423964478503129, 8.407306390701049, 9.309658304307437, -0.5482852890529228, -11.499859882265268, -10.552533675209967, 2.0050221789726197, 13.153568445829352, 9.570130082024441, -5.115533432227267]
```

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

@@ -0,0 +1,7 @@
1.9051482536448667 1.8396541756543754 1.7530659048695518
1.65270670596199 1.5511280285381468 1.4621171572600098
1.3969304320050775 1.362707467578051 1.3627074675780513
1.3969304320050775 1.4621171572600098 1.5511280285381468
1.65270670596199 1.7530659048695518 1.8396541756543754
1.9051482536448667 1.9488384233759848 1.9747656786413226
1.988582158445953 1.99524819886711 1.9981778976111988

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

@@ -0,0 +1,117 @@
# Общее контрольное задание по теме 7
Марков Никита Сергеевич, А-03-23
## Задание
1.Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
2.Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3.Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
### 1 задание
```py
def signal_delay(current_input, delay_time, output_history, input_history):
"""
Расчет выходного сигнала устройства задержки
current_input - текущее значение входного сигнала
delay_time - время задержки
output_history - история выходных значений
input_history - история входных значений
"""
if len(input_history) < delay_time:
return 0
else:
return input_history[-delay_time]
delay = 3
output_signal = []
input_signal = [1, 2, 3, 4, 5, 6, 7]
input_history = []
for x in input_signal:
input_history.append(x)
y = signal_delay(x, delay, output_signal, input_history)
output_signal.append(y)
print("Входной сигнал:", input_signal)
Входной сигнал: [1, 2, 3, 4, 5, 6, 7]
print("Выходной сигнал (задержка 3):", output_signal)
Выходной сигнал (задержка 3): [0, 0, 1, 2, 3, 4, 5]
```
### 2 задание
```py
def raschet_giostogrammy(viborka, kol_int):
minn = min(viborka)
maxx = max(viborka)
shirina_intervala = (minn - maxx) / kol_int
w = [0] * kol_int
for znachenie in viborka:
num_int = int((znachenie - maxx) / shirina_intervala)
if num_int == kol_int:
num_int = kol_int - 1
w[num_int] += 1
print("Гистограмма:")
for i in range(kol_int):
start = maxx + i * shirina_intervala
end = maxx + (i + 1) * shirina_intervala
print(f"[{start:.2f}, {end:.2f}]: {w[i]}")
return w
import random
rand = [random.gauss(0, 1) for _ in range(100)]
kol_int = 5
res = raschet_giostogrammy(rand, kol_int)
Гистограмма:
[2.17, 1.24]: 12
[1.24, 0.32]: 26
[0.32, -0.61]: 33
[-0.61, -1.54]: 22
[-1.54, -2.47]: 7
```
### 3 задание
```py
anonim_func = lambda b1, b2, X: b1 + b2 * X
print(anonim_func (2, 3, 5))
17
```

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

@@ -0,0 +1,59 @@
# Индивидуальное контрольное задание
Марков Никита Сергеевич, А-03-23
## 11 вариант
Разработайте анонимную функцию с 5 аргументами: х, a,b,c,d, вычисляющую значение a/(1+exp(-b-c*x-d*x2)). Рассчитайте значения этой функции в диапазоне значений входного параметра х: -20 ≤ x ≤ 20 с шагом 2 при некоторых положительных значениях параметров a,b,c,d. Обеспечьте запись рассчитанных значений в текстовый файл по три значения на строке, разделенных пробелами.
```py
anonim= lambda x,a,b,c,d: a/(1+math.exp(-b-c*x-d*x**2))
a, b, c, d = 2, 1, 0.1, 0.01
values = [anonim(x, a, b, c, d) for x in range(-20, 21, 2)]
values
[1.9051482536448667, 1.8396541756543754, 1.7530659048695518, 1.65270670596199, 1.5511280285381468, 1.4621171572600098, 1.3969304320050775, 1.362707467578051, 1.3627074675780513, 1.3969304320050775, 1.4621171572600098, 1.5511280285381468, 1.65270670596199, 1.7530659048695518, 1.8396541756543754, 1.9051482536448667, 1.9488384233759848, 1.9747656786413226, 1.988582158445953, 1.99524819886711, 1.9981778976111988]
import os,sys
os.chdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA8\\') #Делаем рабочий каталог текущим
os.getcwd()
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA7'
with open('result.txt', 'w') as file:
for i in range(0, len(values), 3):
file.write(' '.join(str(v) for v in values[i:i+3]) + '\n')
57
55
56
57
55
57
54
file.close()
```

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

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

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

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

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

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

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

@@ -1,6 +1,7 @@
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
print(f'Увеличенное в 3 раза значение perm1= {int(Mod1.perm1)*3}')
from Mod2 import alpha as al
tt=al()
print('tt=',tt)

352
TEMA8/report.md Обычный файл

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

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

@@ -0,0 +1,7 @@
1.905148 1.839654 1.753066
1.652707 1.551128 1.462117
1.396930 1.362707 1.362707
1.396930 1.462117 1.551128
1.652707 1.753066 1.839654
1.905148 1.948838 1.974766
1.988582 1.995248 1.998178

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

@@ -0,0 +1,90 @@
# Индивидуальное контрольное задание
Марков Никита Сергеевич, А-03-23
## 11 вариант
Разработайте анонимную функцию с 5 аргументами: х, a,b,c,d, вычисляющую значение a/(1+exp(-b-c*x-d*x2)). Рассчитайте значения этой функции в диапазоне значений входного параметра х: -20 ≤ x ≤ 20 с шагом 2 при некоторых положительных значениях параметров a,b,c,d. Обеспечьте запись рассчитанных значений в текстовый файл по три значения на строке, разделенных пробелами.
Разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
```py
#test func
import math
f = lambda x, a, b, c, d: a / (1 + math.exp(-b - c * x - d * x**2))
def calc_and_save(a, b, c, d, filename="results.txt"):
xs = [x for x in range(-20, 21, 2)]
values = [f(x, a, b, c, d) for x in xs]
with open(filename, "w", encoding="utf-8") as file:
for i, val in enumerate(values, start=1):
file.write(f"{val:.6f}")
if i % 3 == 0:
file.write("\n")
else:
file.write(" ")
```
```py
#test_main
from test_func import calc_and_save
def main():
print("Ввод параметров a, b, c, d (положительные числа):")
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
d = float(input("d = "))
filename = input("Имя выходного файла (по умолчанию results.txt): ").strip()
if not filename:
filename = "results.txt"
calc_and_save(a, b, c, d, filename)
print(f"Расчёт завершён. Результаты записаны в файл {filename}.")
if __name__ == "__main__":
main()
```
results.txt
1.905148 1.839654 1.753066
1.652707 1.551128 1.462117
1.396930 1.362707 1.362707
1.396930 1.462117 1.551128
1.652707 1.753066 1.839654
1.905148 1.948838 1.974766
1.988582 1.995248 1.998178

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

@@ -0,0 +1,14 @@
import math
f = lambda x, a, b, c, d: a / (1 + math.exp(-b - c * x - d * x**2))
def calc_and_save(a, b, c, d, filename="results.txt"):
xs = [x for x in range(-20, 21, 2)]
values = [f(x, a, b, c, d) for x in xs]
with open(filename, "w", encoding="utf-8") as file:
for i, val in enumerate(values, start=1):
file.write(f"{val:.6f}")
if i % 3 == 0:
file.write("\n")
else:
file.write(" ")

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

@@ -0,0 +1,20 @@
from test_func import calc_and_save
def main():
print("Ввод параметров a, b, c, d (положительные числа):")
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
d = float(input("d = "))
filename = input("Имя выходного файла (по умолчанию results.txt): ").strip()
if not filename:
filename = "results.txt"
calc_and_save(a, b, c, d, filename)
print(f"Расчёт завершён. Результаты записаны в файл {filename}.")
if __name__ == "__main__":
main()

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

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

После

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

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

@@ -0,0 +1,17 @@
from M2 import main as run_M2
import matplotlib.pyplot as plt
def main():
values, t, F = run_M2()
x_axis = list(range(1, len(values) + 1))
plt.figure()
plt.plot(x_axis, values, marker="o")
plt.xlabel("Номер дня")
plt.ylabel("Прирост заболевших")
plt.title("Сигнал из файла (COVID-19, январь 2022)")
plt.grid(True)
plt.show()
if __name__ == "__main__":
main()

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

@@ -0,0 +1,48 @@
import math
def stats_on_signal(x, N):
NN = len(x)
if N <= 0 or N >= NN:
raise ValueError("N должно быть > 0 и < количества отсчётов сигнала")
part1 = x[:N]
part2 = x[N:]
M1 = sum(part1) / len(part1)
M2 = sum(part2) / len(part2)
def sample_var(data):
n = len(data)
m = sum(data) / n
return sum((v - m) ** 2 for v in data) / (n - 1)
C1 = sample_var(part1)
C2 = sample_var(part2)
return M1, M2, C1, C2, NN
def process_file(filename, N):
values = []
with open(filename, "r", encoding="utf-8") as f:
for line in f:
if not line.strip():
continue
for token in line.replace(",", " ").split():
values.append(float(token))
M1, M2, C1, C2, NN = stats_on_signal(values, N)
print(f"Число отсчётов NN = {NN}")
print(f"M1 = {M1}, M2 = {M2}")
print(f"C1 = {C1}, C2 = {C2}")
aaa = (C1 * N + C2 * (NN - N)) / (NN - 2)
t = abs(M1 - M2) / math.sqrt(aaa)
F = max(C1, C2) / min(C1, C2)
print(f"t = {t}")
print(f"F = {F}")
return values, t, F

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

@@ -0,0 +1,41 @@
from M1 import process_file
def main():
import os
while True:
filename = input("Введите имя текстового файла с сигналом: ").strip()
if os.path.isfile(filename):
break
print("Файл не найден. Повторите ввод.")
N_str = input("Введите N (число первых отсчётов для первой части): ").strip()
N = int(N_str)
values, t, F = process_file(filename, N)
print("Считанный сигнал (отсчёты):")
print(" ".join(f"{v}" for v in values))
if t > 2:
msg_t = "Сигнал сильно меняется"
else:
msg_t = "Сигнал заметно не меняется"
if F > 4:
msg_F = "Разброс сигнала сильно меняется"
else:
msg_F = "Разброс сигнала заметно не меняется"
print(msg_t)
print(msg_F)
with open("Res101.txt", "w", encoding="utf-8") as f:
f.write(msg_t + "\n")
f.write(msg_F + "\n")
return values, t, F
if __name__ == "__main__":
main()

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

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

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

@@ -0,0 +1,2 @@
Сигнал заметно не меняется
Разброс сигнала сильно меняется

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

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

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

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

После

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

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

@@ -0,0 +1 @@
-440 -131 -456 1419 -167 -322 -416 1695 421 3209 2665 3359 2051 1496 526 2647 4951 10663 7699 5993

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

@@ -0,0 +1,324 @@
# Протокол по Теме 9
Марков Никита Сергеевич, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Создание классов и их наследников
### 2.1. Создание автономного класса
```py
class Class1: #Объявление класса
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
self.data=znach # self - ссылка на экземпляр класса
def otobrazh(self): # Метод 2 класса1
print(self.data)#Отображение данных экземпляра класса
z1=Class1() #Создаём 1-й экземпляр класса
z1
<__main__.Class1 object at 0x000001F6FDDA5550>
z2=Class1() #Создаём 2-й экземпляр класса
z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
z1.otobrazh() # Обращение ко второму методу класса
экз.класса 1
z2.otobrazh()
-632.453
z1.data='Новое значение атрибута у экз.1'
z1.otobrazh()
Новое значение атрибута у экз.1
```
### 2.2. Создание класса-наследника
```py
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
```py
z1.otobrazh()
Новое значение атрибута у экз.1
```
Нет, не изменилось, т.к. z1 принадлежит к Class1
```py
del z1,z2,z3
```
## 3. Использование классов, содержащихся в модулях
```py
#Mod3.py
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)
```
```py
import os,sys
import importlib as imp
os.chdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA9\\')
os.getcwd()
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA9'
from Mod3 import Class1 #Частичный импорт содержимого модуля
z4=Class1()
z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
z4.otobrazh()
File "C:\Users\nikit\Desktop\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
Ошибка возникла т.к. z4 не имеет никакого значения
```py
from Mod3 import Class1
z4=Class1()
z4.data='значение данного data у экз.4'
z4.otobrazh()
значение данного data у экз.4
```
```py
del z4
import Mod3 #Полный импорт содержимого модуля
z4=Mod3.Class2()
z4.zad_zn('Класс из модуля')
z4.otobrazh()
значение= Класс из модуля
Mod3.otobrazh('Объект')
значение объекта= Объект
```
Это вызвало самостоятельную функцию otobrazh() из модуля,которая принимает любой объект и печатает его с префиксом "значение объекта ="
## 4. Использование специальных методов
```py
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
z5=Class3('abc') #При создании экземпляра срабатывает конструктор
z5.otobrazh()
значение= abc
z6=z5+'def'
z6.otobrazh()
значение= abcdef
z6.zad_dr_zn(3)
z6.otobrazh()
значение= abcdefabcdefabcde
```
## 5. Присоединение атрибутов к классу.
```py
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
Class3.fio='Иванов И.И.'
z7=Class3(123)
dir(z7)==dir(Class3)
False
dir(z7.fio)
['__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']
dir(z7.fio)==dir(Class3.fio)
True
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']
```
## 6. Выявление родительских классов
```py
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__bases__
(<class 'object'>,)
Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## 7. Создание свойства класса.
```py
class Class4:
def __init__(sam,znach):
sam.__prm=znach
def chten(sam):
return sam.__prm
def zapis(sam,znch):
sam.__prm=znch
def stiran(sam):
del sam.__prm
svojstvo=property(chten,zapis,stiran)
exempl=Class4(12)
exempl.svojstvo
12
exempl.svojstvo=45
print(exempl.svojstvo)
45
del exempl.svojstvo
exempl.svojstvo
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
exempl.svojstvo
File "<pyshell#53>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Потому что атрибут __prm больше не существует
## 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
```py
# SAU.py
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
#testSau.py
prm=[2.5,4,1.3,0.8]
from SAU import *
xx=[0]+[1]*20
SAUe=SAU(prm)
yt=[]
for xt in xx:
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
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
```
**Результат:**
<image src="Figure_1.png">

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

@@ -0,0 +1,121 @@
# Общее контрольное задание по теме 9
Марков Никита Сергеевич, А-03-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
-конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
-метод для обеспечения операции повышения оклада сотрудника на заданное значение;
-метод для обеспечения перевода сотрудника из одного отдела в другой;
-метод для изменения должности сотрудника;
-свойство, содержащее перечень (список) поощрений сотрудника.
-Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобрази-те эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изме-нения должности и оклада, объявления благодарности.
```py
#task.py
class Employee:
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self._pooshrenia = []
def salary_raise(self, summa):
self.oklad += summa
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
def change_department(self, new_department):
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
self.otdel = new_department
def change_position(self, new_position):
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
self.dolzhnost = new_position
@property
def pooshrenia(self):
return self._pooshrenia
def add_encouragement(self, tekst):
self._pooshrenia.append(tekst)
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")
```
```py
import os, sys
os.chdir('C:\\Users\\nikit\\Desktop\\python-labs\\TEMA9\\')
os.getcwd()
'C:\\Users\\nikit\\Desktop\\python-labs\\TEMA9'
from task import *
emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 76000)
emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 760000)
emp1.change_department('УИТ')
Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ.
emp1.otdel
'УИТ'
emp1.change_position('Старший преподаватель')
Должность сотрудника Челышев Эдуард Артурович изменена с Ассистент на Старший преподаватель.
emp1.dolzhnost
'Старший преподаватель'
emp2.salary_raise(-100000)
Оклад сотрудника Бобряков Александр Владимирович увеличен на -100000. Новый оклад: 660000
emp2.oklad
660000
emp2.add_encouragement('За победу в конкурсе "лучшая кафедра"')
Сотрудник Бобряков Александр Владимирович теперь имеет поощрение: За победу в конкурсе "лучшая кафедра"
emp2.pooshrenia
['За победу в конкурсе "лучшая кафедра"']
```

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

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

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

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

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

@@ -0,0 +1,215 @@
# Тест по модулю 2
Марков Никита Сергеевич, А-03-23
## 20 вариант
## 1) Создайте модуль М1, содержащий две функции:
-функция 1: аргументы - ряд отсчетов некоторого сигнала и целочисленный параметр N; функция должна рассчитать и возвратить оценки средних значений М1 и М2 и дисперсий С1 и С2 по первым N отсчетам сигнала и по оставшейся его части;
-функция 2: аргумент - имя текстового файла с отсчетами сигнала Х; функция должна прочитать данные из указанного файла, передать их в функцию 1, отобразить результаты расчета и по возвращенным данным рассчитать и вернуть 2 статистики
t=|M1-M2| /((C1*N+С2*(NN-N))/(NN-2))0.5
F=max(C1,C2)/min(C1,C2)
```py
#M1.py
import math
def stats_on_signal(x, N):
NN = len(x)
if N <= 0 or N >= NN:
raise ValueError("N должно быть > 0 и < количества отсчётов сигнала")
part1 = x[:N]
part2 = x[N:]
M1 = sum(part1) / len(part1)
M2 = sum(part2) / len(part2)
def sample_var(data):
n = len(data)
m = sum(data) / n
return sum((v - m) ** 2 for v in data) / (n - 1)
C1 = sample_var(part1)
C2 = sample_var(part2)
return M1, M2, C1, C2, NN
def process_file(filename, N):
values = []
with open(filename, "r", encoding="utf-8") as f:
for line in f:
if not line.strip():
continue
for token in line.replace(",", " ").split():
values.append(float(token))
M1, M2, C1, C2, NN = stats_on_signal(values, N)
print(f"Число отсчётов NN = {NN}")
print(f"M1 = {M1}, M2 = {M2}")
print(f"C1 = {C1}, C2 = {C2}")
aaa = (C1 * N + C2 * (NN - N)) / (NN - 2)
t = abs(M1 - M2) / math.sqrt(aaa)
F = max(C1, C2) / min(C1, C2)
print(f"t = {t}")
print(f"F = {F}")
return values, t, F
```
## 2) Создайте еще один модуль М2, в котором должны выполняться операции:
-запрашивается и вводится имя текстового файла, в котором содержатся данные для расчета; проверяется наличие файла и при отсутствии - повторение запроса;
-вызывается функция 2 и затем отображается в числовом виде введенный из файла сигнал и рассчитанные статистики;
-при t>2 выдается сообщение: "Сигнал сильно меняется", а в ином случае: "Сигнал заметно не меняется"; при F>4 выдается сообщение: "Разброс сигнала сильно меняется", а в ином случае: "Разброс сигнала заметно не меняется"; эти же сообщения должны быть записаны в текстовый файл Res101.txt.
```py
# M2.py
from M1 import process_file
def main():
import os
while True:
filename = input("Введите имя текстового файла с сигналом: ").strip()
if os.path.isfile(filename):
break
print("Файл не найден. Повторите ввод.")
N_str = input("Введите N (число первых отсчётов для первой части): ").strip()
N = int(N_str)
values, t, F = process_file(filename, N)
print("Считанный сигнал (отсчёты):")
print(" ".join(f"{v}" for v in values))
if t > 2:
msg_t = "Сигнал сильно меняется"
else:
msg_t = "Сигнал заметно не меняется"
if F > 4:
msg_F = "Разброс сигнала сильно меняется"
else:
msg_F = "Разброс сигнала заметно не меняется"
print(msg_t)
print(msg_F)
with open("Res101.txt", "w", encoding="utf-8") as f:
f.write(msg_t + "\n")
f.write(msg_F + "\n")
return values, t, F
if __name__ == "__main__":
main()
```
## 3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика введенный из файла числовой ряд.
```py
#Mo.py
from M2 import main as run_M2
import matplotlib.pyplot as plt
def main():
values, t, F = run_M2()
x_axis = list(range(1, len(values) + 1))
plt.figure()
plt.plot(x_axis, values, marker="o")
plt.xlabel("Номер дня")
plt.ylabel("Прирост заболевших")
plt.title("Сигнал из файла (COVID-19, январь 2022)")
plt.grid(True)
plt.show()
if __name__ == "__main__":
main()
```
## 4) Для проверки запишите в текстовый файл числовой ряд со значениями приращений заболеваемости COVID-19 в России в январе 2022 г.:
-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665, 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993
Проверьте программу с использованием этих данных.
```py
Введите имя текстового файла с сигналом: covid.txt
Введите N (число первых отсчётов для первой части): 10
Число отсчётов NN = 20
M1 = 481.2, M2 = 4205.0
C1 = 1529922.177777778, C2 = 9855042.0
t = 1.4806648475081259
F = 6.4415315649025455
Считанный сигнал (отсчёты):
-440.0 -131.0 -456.0 1419.0 -167.0 -322.0 -416.0 1695.0 421.0 3209.0 2665.0 3359.0 2051.0 1496.0 526.0 2647.0 4951.0 10663.0 7699.0 5993.0
Сигнал заметно не меняется
Разброс сигнала сильно меняется
```
**Результат:**
<image src="covid.png">