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

...

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

Автор SHA1 Сообщение Дата
byvs 9149b7f098 fix 2 test.md
2 месяцев назад
byvs 56fc83fb48 fix test.md
2 месяцев назад
byvs f1271d299c test is done
2 месяцев назад
byvs 3b9e04afc6 all is done
2 месяцев назад
byvs ca5ecda65d report is done
2 месяцев назад
byvs f7f1d81e93 test is done
2 месяцев назад
byvs a5d8cf70cb lab7 is done
2 месяцев назад
byvs f325dcc351 hell yeah
3 месяцев назад
byvs ae15c3cb3f Report & Task
3 месяцев назад
byvs a92dfa98f2 test is done
3 месяцев назад
byvs 8170a21083 task fixed
3 месяцев назад
byvs 026307929c task is done
3 месяцев назад
byvs a954c54cc2 report is done
3 месяцев назад
byvs 18d642892e add task.md
4 месяцев назад
byvs 0cb8960980 fix report.md
4 месяцев назад
byvs ac529b4a1a report is done
4 месяцев назад
byvs b354fe4888 add test.md
4 месяцев назад
byvs ab498611cf task topic3 is done
4 месяцев назад
byvs eb6783bfbc report in TOPIC3 is done
4 месяцев назад
byvs 77b1db5819 Merge branch 'main' of http://uit.mpei.ru/git/StepanishchevVR/python-labs
5 месяцев назад
byvs 0044ff1e80 topic 2 is done
5 месяцев назад
StepanishchevVR aba93a781b Загрузил файлы test.md
5 месяцев назад
byvs 13ba6d043f add test.md
5 месяцев назад
StepanishchevVR 5e4f8c6e82 Изменил(а) на 'TEMA1/report.md'
5 месяцев назад
byvs 2b2ffe1470 first commit
5 месяцев назад

@ -0,0 +1,5 @@
#Программа по Теме 1 Степанищев Виктор Романович
print('Hello')
h=input('Your name=')
import os
os.chdir(r"/home/byvs/MPEI/Programming Python/Stepanishchev/TEMA1/")

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

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

После

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

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

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

После

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

@ -0,0 +1,96 @@
# Отчёт по теме 1
Степанищев Виктор, А-03-23
## 1 Знакомство с интерпретатором
Введение инструкций в окно интерпретатора
```py
>>>print('Hello')
Hello
>>>h=input('Your name=')
Your name=Viktor
>>>exit()
```
## 2 Знакомство с интерактивной оболочкой IDLE
Настройка текущего каталога
```py
import os
os.chdir(r"/home/byvs/MPEI/Programming Python/python-labs/TEMA1/")
```
Создание Pr0.py в рабочем каталоге и его запуск тремя способами: import Pr0, F5, 'Запустить модуль'
```py
#Программа по Теме 1 Степанищев Виктор Романович
print('Hello')
h=input('Your name=')
import os
os.chdir(r"/home/byvs/MPEI/Programming Python/Stepanishchev/TEMA1/")
```
Запуск prb1.py
```py
>>> import prb1
Как Вас зовут? Viktor
Привет, Viktor
```
В папке _pycache_ хранится двоичный скомпилированный код, который нужен для оптимизации загрузки и запуска программы
Раздел помощи help в главном меню IDLE предлагает следующие виды помощи: документацию по IDLE, доку по Python
и наглядную демонстрацию работы модуля Turtle
```py
>>>help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
>>>help(print), help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
(None, None)
```
Результат работы программы tdemo_chaos.py :
<image src="figure0.png">
Демонстрация работы модуля Turtle на примере clock из Turtle Demo в выпадающем меню help:
<image src="figure1.png">

@ -0,0 +1,11 @@
# Общее контрольное задание по теме 1
Степанищев Виктор, А-03-23
## Вопрос
Что означает название интерактивной оболочки IDLE?
## Ответ
IDLE - Integrated Development and Learning Environment (интегрированная среда для разработки и обучения на ЯП python)

@ -0,0 +1,492 @@
# Отчёт по теме 2
Выполнил Степанищев Виктор, А-03-23
# 1. Начало работы
Запуск IDLE, установление рабочего каталога
# 2. Изучение простых объектов
```py
>>f1=16; f2=3
>>f1,f2
(16, 3)
>>f1;f2
16
3
>>dir()
['__annotations__', '__builtins__', '__doc__', '__file__', '__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_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>type(f2)
<class 'int'>
>>del f1,f2
>>dir(f1)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
dir(f1)
NameError: name 'f1' is not defined
#Объектов не осталось после del
```
# 3. Изучение правил именования объектов
```py
>>gg1=1.6
>>hh1='Строка'
>>73sr=3
SyntaxError: invalid decimal literal
>>and=7
SyntaxError: invalid syntax
```
# 4. Просмотр ключевых слов в Python
```py
>>import keyword
>>keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>list_keyword = keyword.kwlist
```
# 5. Просмотр встроенных идентификаторов
```py
>>import builtins
>>dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', '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', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
```
Изучение функций **abs**, **len**, **max**, **min**, **pow**, **round**, **sorted**, **sum**, **zip**
1) abs - возвращает абсолютное значение передаваемого числа
```py
>>help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
>>abs(-4.5)
4.5
```
2) len - возвращает длину (количество элементов) объекта
```py
>>help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
>>len([1, 2, 3])
3
```
3) max - возвращает наибольший элемент в итерируемом объекте или из нескольких аргументов
```py
>>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.
>>max([1, 2, 3])
3
```
4) min - возвращает наименьший элемент в итерируемом объекте или из нескольких аргументов
```py
>>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.
>>min([1, 2, 3])
1
```
5) pow - возвращает x в степени y, если указан z, возвращает результат по модулю z
```py
>>help(pow)
Help on built-in function pow in module builtins:
pow(base, exp, mod=None)
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Some types, such as ints, are able to use a more efficient algorithm when
invoked using the three argument form.
>>pow(2, 3)
8
>>pow(2, 3, 3)
2
```
6) round - округляет число до указанного количества знаков после запятой
```py
>>help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
>>round(14.0214, 2)
14.02
```
7) sorted - возвращает новый отсортированный список из элементов итерируемого объекта
```py
>>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.
>>sorted([3, 2, 1])
[1, 2, 3]
```
8) sum - возвращает сумму всех элементов итерируемого объекта
```py
>>help(sum)
Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
>>sum([1, 2, 3])
6
```
9) zip - объединяет элементы из нескольких итерируемых объектов в кортежи
```py
>>help(zip)
Help on class zip in module builtins:
class zip(object)
| zip(*iterables, strict=False) --> Yield 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.
|
| If strict is true and one of the arguments is exhausted before the others,
| raise a ValueError.
|
| 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.
|
| __setstate__(...)
| Set state information for unpickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
>>students = ['Viktor', 'Alexandr']
>>ages = [20, 20]
>>list(zip(students, ages))
[('Viktor', 20), ('Alexandr', 20)]
```
# 6. Малые и большие буквы различаются
```py
>>Gg1=45
>>gg1
1.6
>>Gg1
45
```
# 7. Изучение базовых типов объектов
## 7.1 Логический тип
```py
>>bb1=True; bb2=False
>>bb1;bb2
True
False
>>type(bb1)
<class 'bool'>
```
## 7.2 Другие простые типы
```py
ii1=-1234567890
ff1=-8.9876e-12
dv1=0b1101010
type(dv1)
<class 'int'>
vsm1=0o52765
shest1=0x7109af6
cc1=2-3j
a=3.67; b=-0.45
cc2=complex(a,b)
```
## 7.3 Строка символов
```py
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
```
```py
ss1b= 'Меня зовут: \n Степанищев В.Р.'
print(ss1b)
```
```py
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
```
```py
>>ss1[17:3:-2]
'омсаот '
>>ss1[-4:3:-2]
'омсаот '
```
```py
>>ss1[4]='='
Traceback (most recent call last):
File "<pyshell#95>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
>>ss1=ss1[:4]+'='+ss1[5:]
>>ss1
'Это = строка символов'
```
```py
>>ss1b
'Меня зовут:
Степанищев В.Р.'
>>ss1b[:3]
'Мен'
>>ss1b[::-1]
'.Р.В вещинапетС
:тувоз янеМ'
```
Самостоятельно придумал значения и создал объекты разных типов
```py
my_int = 42
my_float = 3.14159
my_complex = 2 + 3j
my_string = "Hello, Python!"
my_list = [1, 2, "три", 4.0]
my_tuple = (10, 20, "тридцать")
my_set = {1, 2, 3, 2, 1}
my_dict = {"имя": "Виктор", "возраст": 20, "город": "Москва"}
my_bool = True
my_bytes = b"hello"
my_range = range(5)
```
# 8. Типы объектов: списки, кортежи, словари, множества
```py
>>spis1=[111,'Spisok',5-9j]
>>stup=[0,0,1,1,1,1,1,1,1]
>>spis1[-1]
(5-9j)
```
```py
>>stup[-8::2]
[0, 1, 1, 1]
>>stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
```
*Сколько элементов вошло в этот новый список и какие индексы они имели в исходном списке?*
Ответ: количество эл-ов в новом списке 4, индексы в исходном списке 1, 3, 5, 7
```py
>>spis1[1]='Список'
>>spis1
[111, 'Список', (5-9j)]
len(spis1)
3
help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
>>spis1.append('New item')
>>spis1
[111, 'Список', (5-9j), 'New item']
>>spis1.append(ss1b)
>>spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.']
>>spis1.pop(1)
'Список'
>>spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.']
```
*Использование insert, remove, extend, clear, sort, reverse, copy, count, index*
```py
>>spis1.insert(1, 'string')
>>spis1
[111, 'string', (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.']
>>spis1.remove(111)
>>spis1
['string', (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.']
>>new_list = [1, 2, 3]
>>spis1.extend(new_list)
>>spis1
['string', (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.', 1, 2, 3]
>>new_list.clear()
>>new_list
[]
>>new_list = [3, 1, 2]
>>new_list.sort()
>>new_list
[1, 2, 3]
>>new_list.reverse()
>>new_list
[3, 2, 1]
>>new_list2 = new_list.copy()
>>new_list2
[1, 2, 3]
>>new_list = [1, 2, 2, 2, 3, 3]
>>new_list.count(2)
3
>>new_list = ['one', 'two', 'three']
>>new_list.index('three')
2
```
```py
>>spis1
['string', (5-9j), 'New item', 'Меня зовут: \n Степанищев В.Р.', 1, 2, 3]
>>spis2=[spis1,[4,5,6,7]]
>>spis2[0][1]
(5-9j)
>>spis2[0][1]=78
>>spis2
[['string', 78, 'New item', 'Меня зовут: \n Степанищев В.Р.', 1, 2, 3], [4, 5, 6, 7]]
>>spis1
['string', 78, 'New item', 'Меня зовут: \n Степанищев В.Р.', 1, 2, 3]
```
*Почему spis1 отличается от изначально заданного?*
Ответ: spis1 претерпел изменения потому что spis2[0] не является копией spis1, а представляет
собой ссылку на тот же самый объект в памяти
Придумал и создал свой объект-список, элементами которого объекты разных типов:
число, строка, логическое значение, список.
```py
my_list = [12, 'str', True, [1, 2, 3]]
my_list
[12, 'str', True, [1, 2, 3]]
```
## 8.2 Кортежи
```py
>>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
>>kort1[2]=90
Traceback (most recent call last):
File "<pyshell#264>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
>>my_kort = (12, 'str', [1, 2, 3], (222, 'str'))
>>my_kort
(12, 'str', [1, 2, 3], (222, 'str'))
```
## 8.3 Словари
```py
>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>dic1['Orel']
56
>>dic1['Pskov']=78
>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
>>sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>sorted(dic1.values())
[45, 56, 78, 145]
>>dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>dic3['statistics'][2]
'standart deviation'
>>dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Степанищев В.Р.'}
>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Степанищев В.Р.'}
```
*Создал объект-кортеж с 7 элементами и объект-список с 5 элементами, также из них словарь с помощью функций dict и zip*
```py
>>t = ("a", "b", "c", "d", "e", "f", "g")
>>l = [1, 2, 3, 4, 5]
>>d = dict(zip(t, l))
>>d
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
```
Элементов в получившимся словаре - 5, т.к. zip() работает до конца самого короткого объекта (в нашем случае этот объект l)
```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]
15
```
## 8.4 Множества
```py
>>mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>mnoz1
{'датчик', 'микропроцессор', 'двигатель', 'линия связи'}
>>len(mnoz1)
4
>>'датчик' in mnoz1
True
>>mnoz1.add('реле')
>>mnoz1.remove('линия связи')
```
```py
>>s = {1, "hello", True, 3.14, (2, 5)}
>>s.add("Python")
>>s
{1, 3.14, 'hello', (2, 5), 'Python'}
>>s.remove(3.14)
>>s
{1, 'hello', (2, 5), 'Python'}
```

@ -0,0 +1,24 @@
# Общее контрольное задание по теме 2
Степанищев Виктор, А-03-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкции
## Решение
```py
import keyword
familia = 'Stepanishchev'
first_word = familia[0]
sp_kw = keyword.kwlist
print('nonlocal' in sp_kw)
sp_kw.remove('nonlocal')
print('nonlocal' in sp_kw)
kort_nam = ('Viktor', 'Alexander', 'Ilya', 'Nikita')
print(type(kort_nam))
kort_nam += ('Emil', 'Zahar')
print(kort_nam)
print(kort_nam.count('Дима'))
dict_bas = {'Список':[1,2,4], 'Множество':{1,2,3,4},'Словарь':{'key':'value'}}
print(dict_bas)
```

@ -0,0 +1,716 @@
# Отчёт по теме 3
Выполнил Степанищев Виктор, А-03-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Преобразование простых базовых типов объектов
### 2.1 Преобразование в логический тип с помощью функции bool
```py
>>> logiz1=bool(56) # 56 не ноль, поэтому True (любое число не равное нулю - True)
>>> logiz2=bool(0) # 0 - ноль, поэтому False
>>> logiz3=bool("Beta") # строка не пустая (имеет длину не равную нулю) - True
>>> logiz4=bool("") # строка пустая, кол-во символов 0 - False
>>> logiz1
True
>>> logiz2
False
>>> logiz3
True
>>> logiz4
False
```
### 2.2 Преобразование в целое десятичное число / в вещественное число
```py
>>> tt1=int(198.6) # отбрасывается дробная часть (без округления)
>>> tt2=int("-76") # число в строке символов (-76), система счисления не указана как параметр - по дефолту десятичная
>>> tt3=int("B",16) # перевод в 16-ричную
>>> tt4=int("71",8) # перевод в 8-ричную
>>> tt1
198
>>> tt2
-76
>>> tt3
11
>>> tt4
57
```
Диагностическая ошибка
```py
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#19>", 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'
```
Обратное преобразование:
```py
>>> int(dv1, 2)
123
>>> int(vos1, 8)
123
>>> int(shs1, 16)
123
```
## 3. Преобразование более сложных базов типов объектов
### 3.1 Преобразование в строку
```py
>>> strk1=str(23.6)
>>> strk2=str(logiz3)
>>> strk3=str(["A","B","C"])
>>> strk4=str(("A","B","C"))
>>> strk5=str({"A":1,"B":2,"C":9})
```
Вывод
```py
>>> strk1
'23.6'
>>> strk2
'True'
>>> strk3
"['A', 'B', 'C']"
>>> strk4
"('A', 'B', 'C')"
>>> strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
### 3.2 Преобразование эл-ов объекта в список с помощью list()
```py
>>> spis1=list("Строка символов")
>>> spis2=list((124,236,-15,908))
>>> spis3=list({"A":1,"B":2,"C":9})
```
Вывод
```py
>>> spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2
[124, 236, -15, 908]
>>> spis3
['A', 'B', 'C']
```
Задание:
Придумайте инструкцию, обеспечивающую создание из того же словаря списка с другими его частями.
Решение:
```py
>>> spis3=list({"A":1,"B":2,"C":9}.values())
>>> spis3
[1, 2, 9]
```
### 3.3 Преобразование элементов объектов в кортеж
```py
>>> kort7=tuple('Строка символов')
>>> kort8=tuple(spis2)
>>> kort9=tuple({"A":1,"B":2,"C":9})
```
Вывод
```py
>>> kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>> kort8
(124, 236, -15, 908)
>>> kort9
('A', 'B', 'C')
```
```py
>>> kort9=tuple({"A":1,"B":2,"C":9}.values()) # уже по значениям
```
Вывод
```py
>>> kort9
(1, 2, 9)
```
### 3.4 Удаление объектов
```py
>>> del strk5, kort8
```
Проверка на наличие переменных после удаления
```py
>>> strk5
Traceback (most recent call last):
File "<pyshell#150>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>> kort8
Traceback (most recent call last):
File "<pyshell#151>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Задание:
Создайте строку со своей фамилией и инициалами, преобразуйте её в список, затем список – в кортеж и, наконец, кортеж – в строку
Ответ:
```py
>>> fio = 'Stepanishchev V.R.'
>>> list_fio = list(fio)
>>> cort_fio = tuple(list_fio)
>>> str_fio = str(cort_fio)
```
Вывод:
```py
>>> list_fio
['S', 't', 'e', 'p', 'a', 'n', 'i', 's', 'h', 'c', 'h', 'e', 'v', ' ', 'V', '.', 'R', '.']
>>> cort_fio
('S', 't', 'e', 'p', 'a', 'n', 'i', 's', 'h', 'c', 'h', 'e', 'v', ' ', 'V', '.', 'R', '.')
>>> str_fio
"('S', 't', 'e', 'p', 'a', 'n', 'i', 's', 'h', 'c', 'h', 'e', 'v', ' ', 'V', '.', 'R', '.')"
```
## 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
>>> c=-24.6//12.1
```
Вывод результата и типа каждого объекта
```py
>>> type(b)
<class 'int'>
>>> b
3
>>> type(c)
<class 'float'>
>>> c
-3.0
```
Если в целочисленном делении используется хотя бы один объект вещественного типа - результат будет вещественным,
если оба целых объекта - результат целый
Самостоятельно попробовал смешанные комбинации типов чисел в этой операции:
```py
>>> lol = 145.2 // 2
```
Вывод:
```py
>>> type(lol)
<class 'float'>
>>> lol
72.0
```
### 4.5 Получение остатка от деления
```py
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
```
Самостоятельно попробовал смешанные комбинации типов чисел в этой операции:
```py
>>> 158.6 % 6
2.5999999999999943
```
Если в остатке от деления используется хотя бы один объект вещественного типа - результат будет вещественным,
если оба целых объекта - результат целый
## 4.6 Возведение в степень
```py
>>> 14**3
2744
>>> e=2.7**3.6
>>> e
35.719843790663525
```
Самостоятельно попробовал смешанные комбинации типов чисел в этой операции:
```py
>>> 5**3.2
172.4662076826519
```
Вопрос:
Какие из приведенных выше операций можно применять к комплексным числам, а какие – нет?
Ответ:
К комплексным числам можно применять следующие операции:
1) сложение
2) вычитание
3) умножение
4) деление
5) возведение в степень
и нельзя следующие:
1) целочисленное деление
```py
>>> z1 = 3 + 4j
>>> z2 = 1 + 2j
>>> z1 // z2
Traceback (most recent call last):
File "<pyshell#255>", line 1, in <module>
z1 // z2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
```
(целочисленное деление требует целой части, не мнимой)
2) остаток от деления
```py
>>> z1 = 3 + 4j
>>> z2 = 1 + 2j
>>> z1 % z2
Traceback (most recent call last):
File "<pyshell#257>", line 1, in <module>
z1 % z2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
```
(остаток от деления по сути основан на целочисленном делении, также работа с мнимой частью не предусмотрена)
## 5. Операции с двоичными представлениями целых чисел
### 5.1 Двоичная инверсия ~
```py
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
Почему результат отрицательный - используется дополнительный код (two's complement) для представления отрицательных чисел. Формула результата:
**~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 #Двоичное представление = 1110
>>> g=h<<2 # Новое двоичное представление = 111000
>>> g1=h>>1 # Новое двоичное представление = 0111
>>> g2=h>>2 # Новое двоичное представление = 0011
```
Задание:
Придумайте два двоичных числа, не менее чем с 7 знаками, и попробуйте выполнить с ними разные операции.
Ответ:
```py
>>> a = 181
>>> b = 108
>>> a & b
36
>>> a | b
253
>>> a ^ b
217
```
По условию минимум 7 знаков:
```py
>>> bin(a)[2:]
'10110101'
>>> bin(b)[2:]
'1101100'
```
## 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=-12
>>> zz
-12
>>> zz+=5
>>> zz-=3
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> zz
-10
>>> stroka
'Система регулирования'
```
### 7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
>>> zz/=2
>>> zz*=5
```
Попробовал самостоятельно
```py
>>> aaa = 5
>>> aaa *= 3
>>> aaa
15
>>> aaa /= 5
>>> aaa
3.0
```
### 7.4 Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```py
>>> aaa = 5
>>> aaa //= 2
>>> aaa
2
>>> aaa = 5
>>> aaa %= 2
>>> aaa
1
>>> aaa=5
>>> aaa **= 3
>>> aaa
125
```
### 7.5. Множественное присваивание
```py
>>> w=v=10
>>> n1,n2,n3=(11,-3,'all')
>>> n1,n2,n3
(11, -3, 'all')
>>> w,v
(10, 10)
```
Задание:
Самостоятельно проверьте, можно ли вместо кортежа справа использовать строку, список, словарь, множество?
Ответ:
Со списком работает поэлементно, со строками посимвольно, с множествами работает, но не в той очередности присваивания, со словарем работает, но нужно знать что присваивать - ключи либо значения
## 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
```
Задание:
Придумайте самостоятельно еще 2-3 примера сложных логических выражений.
Ответ:
```py
>>> (a == b) and ('Vologda' in dic1) or ('Pskov' in dic1)
False
>>> (a > b) or 'book' in mnoz1
True
>>> 'cap' in mnoz1 or a >= b
True
```
### 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.find('пр')
5
>>> stroka
'Микропроцессорная система управления'
>>> stroka.count("с")
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ')
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22)
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
>>> dont_shout_please = stroka.lower()
```
```py
>>> strk1='Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
# порядки расставлены так, как указаны индексы в строке strk2 - на позицию 0 ставится самый первый эл-нт передаваемый в format() и т.д.
```
```py
>>> strk3='Момент времени {num}, значение = {znch}'
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2. Методы для работы со списками.
```py
>>> spsk = [1, 'A-03-23', 5.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)
5.0
>>> spsk
[1, 'A-03-23', (1, 2, 3), True]
>>> spsk.append('c')
>>> spsk
[1, 'A-03-23', (1, 2, 3), True, 'c']
>>> spsk.insert(2,'a')
>>> spsk
[1, 'A-03-23', 'a', (1, 2, 3), True, 'c']
>>> spsk.count('a')
1
>>> spsk
[1, 'A-03-23', 'a', (1, 2, 3), True, 'c']
```
Задание:
Проанализируйте смысл операций, выполненных с помощью этих методов
Ответ:
1) методом pop() удалили 2-ой эл-т списка (2-ой начиная с нуля)
2) добавили 'c' в конец списка (метод append() всегда добавляет элемент в конец списка)
3) методом insert() на позицию 2 (также начиная с нуля) вставили строку 'a'
4) методом count() посчитали количество вхождений элемента 'a' в список
### 9.3. Самостоятельно создайте кортеж и изучите применение его методов.
```py
>>> my_tuple = ('str', 20, (1, 2, 3), True)
>>> my_tuple.count(20)
1
>>> my_tuple.index(True) # позиция True в кортеже
3
```
### 9.4.Также самостоятельно изучите методы словарей и множеств.
**Словари**
```py
>>> student = {
"name": "Viktor",
"age": 20,
"city": "Moscow",
"courses": ["Math", "Physics"],
"gpa": 2.85
}
>>> student.get("name")
'Viktor'
>>> student.keys()
dict_keys(['name', 'age', 'city', 'courses', 'gpa'])
>>> student.values()
dict_values(['Viktor', 20, 'Moscow', ['Math', 'Physics'], 2.85])
>>> student.update({"gpa": 4.5, "lazy": True})
>>> student
{'name': 'Viktor', 'age': 20, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5, 'Lazy': True}
>>> student.pop("Lazy")
True
>>> student
{'name': 'Viktor', 'age': 20, '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(6)
>>> A
{1, 2, 3, 4, 5}
>>> A.pop()
1
>>> A
{2, 3, 4, 5}
>>> A.clear()
>>> A
set()
```

@ -0,0 +1,106 @@
# Общее контрольное задание по теме 3
Степанищев Виктор, А-03-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
• Преобразовать восьмеричное значение 45 в целое число.
• Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
• Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
• Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
• Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
• Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
• Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
**1.**
```py
task1 = int('45', 8)
print(task1)
```
Вывод
```py
37
```
**2.**
```py
D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
D_keys, D_values = list(D.keys()), list(D.values())
D_cort = tuple(D_keys + D_values)
print(D_cort)
```
Вывод
```py
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
*Вопрос:*
Чем отличается кортеж от списка?
*Ответ:*
Список изменяемый, кортеж неизменяемый
**3.**
```py
task3 = ((1768 // 24.8) % 3)**2.4
print(task3)
```
Вывод
```py
5.278031643091577
```
**4.**
```py
task4 = (~(13 & 27)^14) << 2
print(task4)
```
Вывод
```py
-32
```
**5.**
```py
task5 = ['колебат', 'колебат', 'колебат', 'колебат']
check = 'аткол' in (task5[2] + task5[3])
print(check)
```
Вывод
```py
True
```
**6.**
```py
task6 = dir(D)
D_values, D_keys = D.values(), D.keys()
print(D_values)
print(D_keys)
```
Вывод
```py
dict_values([23, 12, 78])
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
```
**7.**
```py
task7 = "Создать объект - символьную строку с текстом данного предложения"
only_words = task7.split(' ')
index_of_replace_symbol = only_words.index('-')
only_words[index_of_replace_symbol] = ','
only_words.remove('данного')
print(only_words)
```
Вывод
```py
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,84 @@
# Индивидуальное контрольное задание по ТЕМЕ №3
Степанищев Виктор, А-03-23
## Задание
```
M1_24
1) Какое назначение имеют демонстрационные примеры в системе помощи?
2) Создайте объект-кортеж с 5 элементами - произвольными восьмеричными числами. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Напишите инструкцию, позволяющую определить, сколько элементов в кортеже. Напишите инструкцию, позволяющую выделить из кортежа второе по порядку число и записать его в виде отдельной переменной. Отобразите на экране получившийся объект.
4) Преобразуйте кортеж в список. Вставьте в список на третью позицию число 888. Отобразите получившийся объект. Преобразуйте список в строку и уберите из неё разделители чисел. Отобразите строку.
5) Используя метод форматирования написать инструкцию вывода на экран заданного номером элемента кортежа по шаблону: "Элемент кортежа №4 = <значение элемента>".
```
## Решение
### 1.
Практическое понимание, т.к. примеры показывают как именно использовать функцию или класс в реальном коде
### 2.
```py
oct_tuple = (0o1, 0o2, 0o3, 0o4, 0o5)
print(type(oct_tuple))
print(dir(oct_tuple))
```
Вывод:
```py
<class 'tuple'>
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
```
### 3.
```py
cort = (1, 2, 3, 4, 5)
print(len(cort))
element = cort[1]
print(element)
```
Вывод:
```py
5
2
```
### 4.
```py
cort = (1, 2, 3, 4, 5)
list_cort = list(cort)
print(list_cort)
list_cort.insert(2, 888)
print(list_cort)
string_cort = str(list_cort)
string_cort = string_cort.replace(',', '')
print(string_cort)
```
Вывод:
```
[1, 2, 3, 4, 5]
[1, 2, 888, 3, 4, 5]
[1 2 888 3 4 5]
```
### 5.
```py
cort = (1, 2, 3, 4, 5)
num_of_element = int(input())
try:
print(f"Элемент кортежа №{num_of_element} = {cort[num_of_element-1]}")
except IndexError:
print("длина кортежа меньше введенного Вами индекса")
```
Вывод:
```py
5
Элемент кортежа №5 = 5
```
```py
6
длина кортежа меньше введенного Вами индекса
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,336 @@
# Отчёт по теме 4
Выполнил Степанищев Виктор, А-03-23
## 1. Начало работы
Создание текстового файла `report.md`
## 2. Стандартные функции
### 2.1. Функция round – округление числа с заданной точностью
```py
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
>>> round(123.456,1)
123.5
>>> (123.456, 0)
123.0
>>> type(round(123.456, 0))
<class 'float'>
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'>
```
### 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]
```
_Объект с какими значениями получится в этом случае? Каковы границы диапазона? Какой шаг?_
**Значения: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]**
**Границы: [0, 23)**
**Шаг: 1**
### 2.3. Функция zip
```py
>>> = ['Stepanishchev', 'Krishtul', 'Ogarkov', 'Markov']
>>> zip(gg, qq)
>>> ff = zip(gg, qq)
>>> tuple(ff)
((76, 'Stepanishchev'), (85, 'Krishtul'), (94, 'Ogarkov'), (103, 'Markov'))
>>> fff = tuple(ff)
>>> len(fff)
4
>>> len(gg), len(qq)
(6, 4)
>>> ff[0]
Traceback (most recent call last):
File "<input>", line 1, in <module>
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', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
```
### 3.1 sin
```py
>>> math.sin(90)
0.8939966636005579
```
### 3.2 acos
```py
>>> math.acos(0)
1.5707963267948966
```
### 3.3 degrees
```py
>>> math.degrees(math.pi)
180.0
```
### 3.4 radians
```py
>>> math.radians(180)
3.141592653589793
```
### 3.5 exp
```py
>>> math.exp(1)
2.718281828459045
```
### 3.6 log
```py
>>> math.log(10)
2.302585092994046
```
### 3.7 log10
```py
>>> math.log10(100)
2.0
```
### 3.8 sqrt
```py
>>> math.sqrt(16)
4.0
```
### 3.9 ceil
```py
>>> math.ceil(3.14) # округление вверх
4
```
### 3.10 floor
```py
>>> math.floor(3.14) # округление вниз
3
```
### 3.11 pi
```py
>>> math.pi
3.141592653589793
```
_Вычислите значение функции sin(2π/7+e0.23 )_
```py
>>> sin((2*pi/7) + 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', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'binomialvariate', '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.
>>> random.seed()
```
```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
1759765317.220153
>>> c2=time.time()-c1
>>> c2
12.758715867996216
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=6, tm_hour=15, tm_min=43, tm_sec=11, tm_wday=0, tm_yday=279, 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())
'Mon Oct 6 20:15:03 2025'
>>> time.mktime((2025, 12, 25, 15, 30, 0, 0, 0, 0))
1766665800.0
```
## 7. Графические функции
```py
>>> import pylab
>>> x=list(range(-3,55,4))
>>> t = list(range(15))
>>> pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x0000017CF2E761B0>]
>>> pylab.title('Первый график')
>>> Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
>>> Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
>>> Text(0, 0.5, 'сигнал')
>>> pylab.show() #
```
**Результат:**
<image src="Ris1.png">
```py
>>> X1=[12,6,8,10,7]; X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000017CF50861E0>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000017CF4FE7800>]
>>> pylab.show()
```
**Результат:**
<image src="Ris22.png">
```py
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x0000017CF4FF43B0>, <matplotlib.patches.Wedge object at 0x0000017CF4FF5730>, <matplotlib.patches.Wedge object at 0x0000017CF5579100>, <matplotlib.patches.Wedge object at 0x0000017CF5579580>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()
```
**Результат:**
<image src="Ris2.png">
```py
>>> pylab.bar(region, naselen)
>>> pylab.title('Население по регионам')
Text(0.5, 1.0, 'Население по регионам')
>>> pylab.ylabel('Население (млн)')
Text(0, 0.5, 'Население (млн)')
>>> pylab.show()
```
**Результат:**
<image src="bar.png">
```py
>>> pylab.hist(naselen)
>>> pylab.title('Гистограмма распределения населения')
>>> pylab.xlabel('Население (млн)')
>>> pylab.ylabel('Частота')
>>> pylab.show()
```
**Результат:**
<image src="hist.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.mod(numbers)
>>> statistics.mode(numbers)
1
```

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

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

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

После

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

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

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

После

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

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

@ -0,0 +1,111 @@
# Общее контрольное задание по Теме 5
Степанищев Виктор, А-03-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
-Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
-Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
-Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
alphabet="abcdefghijklmnopqrstuvwxyz"
stroka="My name is Viktor. 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
Порядковый номер буквы v - 22
Порядковый номер буквы i - 9
Порядковый номер буквы k - 11
Порядковый номер буквы t - 20
Порядковый номер буквы o - 15
Порядковый номер буквы r - 18
Порядковый номер буквы i - 9
Порядковый номер буквы a - 1
Порядковый номер буквы m - 13
Порядковый номер буквы a - 1
Порядковый номер буквы s - 19
Порядковый номер буквы t - 20
Порядковый номер буквы u - 21
Порядковый номер буквы d - 4
Порядковый номер буквы e - 5
Порядковый номер буквы n - 14
Порядковый номер буквы t - 20
Порядковый номер буквы o - 15
Порядковый номер буквы f - 6
Порядковый номер буквы m - 13
Порядковый номер буквы p - 16
Порядковый номер буквы e - 5
Порядковый номер буквы i - 9
```
```py
text="Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."
text=text.replace('.','')
text=text.replace(',','')
text=text.replace('(','')
text=text.replace(')','')
text=text.replace(':','')
text=text.replace('–','')
print(text)
'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
text=text.replace(' ',' ')
print(text)
>> 'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с имеющимся так и с отсутствующим словом'
spis=text.split()
print(spis)
>> ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
search_word1='проверить'
search_word2='промах'
if search_word1 in spis:
print("Слово '",search_word1,"' найдено в списке слов.")
else:
print("Слово '",search_word1,"' не найдено в списке слов.")
>> Слово ' проверить ' найдено в списке слов.
if search_word2 in spis:
print("Слово '",search_word2,"' найдено в списке слов.")
else:
print("Слово '",search_word2,"' не найдено в списке слов.")
>> Слово ' промах ' не найдено в списке слов.
```
```py
surname_summer=['Tabolin','Berezhkov','Krishtul','Stepanischev']
sr_ball_summer=[3.35,4,3.5,3.5]
surname_winter=['Stepanischev','Tabolin','Krishtul','Berezhkov']
sr_ball_winter=[4,4.25,4.5,3]
key=1
while k:
search_surname=input("Фамилия:")
Фамилия:Tabolin
if (search_surname in surname_summer) and (search_surname in surname_winter):
print("Средний балл студента с фамилией",search_surname,"по зимней сессии -", sr_ball_winter[surname_winter.index(search_surname)], ", а по летней -",sr_ball_summer[surname_summer.index(search_surname)])
key=0
else:
print("Студент с такой фамилией не найден")
>> Средний балл студента с фамилией Tabolin по зимней сессии - 4.25 , а по летней - 3.35
```

@ -0,0 +1,38 @@
# Индивидуальное контрольное задание по ТЕМЕ №5
Степанищев Виктор, А-03-23
## Задание
```
#24
Создайте словарь с 30 элементами, состоящими из ключей – целых чисел от 0 до 29, и значений – случайных,
равномерно распределенных чисел в интервале значений от -10 до +7.
Рассчитайте сумму неотрицательных значений из словаря и отобразите её в виде строки:
«Сумма неотрицательных значений словаря= XXX».
```
## Решение
```py
from random import uniform
def generation_slovar():
slovar = {}
for k in range(30):
slovar[k] = uniform(-10, +7)
return slovar
slovar = generation_slovar()
s = 0
for keys in slovar:
value = slovar[keys]
if value >= 0:
s += value
print(f"Сумма неотрицательных значений словаря = {s}")
```
Вывод:
```py
Сумма неотрицательных значений словаря = 51.80214076598058
```
```py
Сумма неотрицательных значений словаря = 22.200516011214674
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,369 @@
# Отчёт по ТЕМЕ №6
Степанищев В.Р., А-03-23
## 1. Начало работы
```py
>>> import os
>>> os.chdir(r"C:\Users\Byvs\Desktop\python-labs\TEMA6")
>>> os.getcwd()
```
## 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 = input('Введите пароль: ')
>>> Введите пароль: 145400147
>>> psw
'145400147'
>>> type(psw)
<class 'str'>
>>> while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 48.8
Ошибка!
Задайте коэф.усиления = 21.6
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4. Ввод-вывод при работе с файлами
### 4.1. Функции для работы с путем к файлу
```py
>>> import os
>>> os.chdir(r"C:\Users\Byvs\Desktop\python-labs\TEMA6")
>>> os.getcwd()
'C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6'
>>> Stepanishchev = os.getcwd()
>>> print(Stepanishchev)
C:\Users\Stepanishchev\Desktop\python-labs\TEMA6
```
Методы вложенного модуля path (mkdir, rmdir, listdir и isdir):
```py
>>> os.mkdir("new")
>>> os.listdir()
['.gitkeep', 'new', 'report.md', 'task.md', 'test.md']
>>> os.rmdir("new")
>>> os.listdir()
['.gitkeep', 'report.md', 'task.md', 'test.md']
>>> os.path.isdir('C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6')
True
>>> os.path.isdir('C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA78')
False
```
```py
>>> os.path.abspath("oplata.dbf")
'C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6\\oplata.dbf'
>>> fil=os.path.abspath("oplata.dbf")
>>> fil
'C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6\\oplata.dbf'
>>> drkt=os.path.dirname(fil)
>>> drkt
'C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6'
>>> os.path.basename(fil)
'oplata.dbf'
>>> os.path.split(fil)
('C:\\Users\\Byvs\\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\\Byvs\\Desktop\\python-labs\\TEMA6'
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
>>> fp=open(file=drkt+'\\zapis1.txt', mode='w')
>>> fp
<_io.TextIOWrapper name='C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6\\zapis1.txt' mode='w' encoding='cp1251'>
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> fp1
<_io.BufferedRandom name='C:\\Users\\Byvs\\Desktop\\python-labs\\TEMA6\\zapis2.bin'>
>>> drkt
'C:\\Users\\Byvs\\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.png">
```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.png">
### 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]
>>> stroka2
>>> '\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
>>> print(stroka2)
[5, 6, 7, 8]
[9, 10, 11, 12]
```
### 4.8. Чтение информации с помощью методов readline и readlines
```py
>>> fp=open('zapis3.txt')
>>> first_line = fp.readline()
>>> first_line
'[1, 2, 3, 4]\n'
>>> all_line = fp.readlines()
>>> all_line
['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
### 4.9. Ввод-вывод объектов с использованием функций из модуля pickle
```py
>>> import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>> pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
>>> fp.close()
```
<image src = "Screen3.png">
```py
>>> 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'}
```
Порядок зависит от внутренней реализации хэш-таблиц.
Хэш - это число фиксированной длины, которое вычисляется из произвольных данных (текста, файла, объекта).
```py
>>> 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()
>>> obj1
{'pen', 'table', 'iPhone', 'book'}
>>> obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
## 5. Перенаправление потоков ввода и вывода данных
```py
>>> import sys
>>> vr_out=sys.stdout #Запоминаем текущий поток вывода
>>> fc=open('Stroka.txt','w') #Откроем файл вывода
>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
```
<image src = "Screen4.png">
```py
>>> 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 #Не забыть вернуть стандартное назначение для потока ввода
```

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

@ -0,0 +1,49 @@
# Индивидуальное контрольное задание по ТЕМЕ №6
Степанищев Виктор, А-03-23
## Задание
```
#26
1) Создайте список с 50 числовыми элементами - равномерно распределенными случайными числами в интервале от 20 до 90. Элементы должны быть округлены до 3-х знаков после точки.
2) Запросите у пользователя выражение для расчета. В ответ на запрос введите выражение: логарифм натуральный(x)-синус(x/100).
3) Создайте новый список, элементы которого вычислите с использованием введенного выражения, в котором в качестве x будут браться соответствующие элементы из ранее созданного списка. Эти значения также надо округлить до 3-х знаков после точки.
4) Выведите элементы второго списка в текстовый файл по одному на строке.
5) Удалите из памяти созданные списки.
```
## Решение
### Пункт 1
```py
spis = [round(uniform(20, 90), 3) for i in range(50)]
```
### Пункт 2
```py
x = float(input("please enter your choice: "))
func = lambda x: round(log(x) - sin(x/100), 3)
print(func(x))
```
### Пункт 3
```py
new_spis = list(map(func, spis))
print(new_spis)
```
### Пункт 4
```py
with open("output.txt", "w") as f:
for s in new_spis:
f.write(str(s) + "\n")
```
### Пункт 5
```py
del spis
del new_spis
```

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

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

После

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

@ -0,0 +1,643 @@
# Отчёт по ТЕМЕ №7
Степанищев Виктор, А-03-23
## 1. Начало работы
```py
>>> import os
>>> os.chdir(r"C:\Users\alexv\Desktop\4\python-labs\TEMA7")
>>> os.getcwd()
'C:\\Users\\byvs\\Desktop\\4\\python-labs\\TEMA7'
```
## 2. Создание пользовательских функций.
### 2.1. Функция без аргументов.
```py
>>> def uspeh(): # Аргументы отсутствуют
... """Подтверждение успеха операции"""
... print("Выполнено успешно!")
...
>>> uspeh()
Выполнено успешно!
>>> type(uspeh) # Определение класса пользовательской функции
<class 'function'>
>>> dir() # Проверка появления имени функции в пространстве имен
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh']
>>> help(uspeh) # Получение справки о пользовательской функции
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
```
### 2.2. Функция с аргументами.
```py
>>> def sravnenie(a, b):
... """Сравнение a и b"""
... if a > b:
... print(a, "больше", b)
... elif a < b:
... print(a, "меньше", b)
... else:
... print(a, "равно", b)
...
>>> n, m = 16, 5
>>> sravnenie(n, m)
16 больше 5
```
```py
>>> sravnenie("Text", "Text but bigger")
Text меньше Text but bigger
>>> sravnenie("abc", "ABC")
abc больше ABC
```
### 2.3. Функция, возвращающая значение.
```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]
```
Данная функция может работать и с кортежами, но вот при работе со словарями и множествами уже получается ошибка:
```py
>>> slozh((1, 2), (3, 4), (5, 6), (7, 8)) # Сложение кортежей
(1, 2, 3, 4, 5, 6, 7, 8)
>>> slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8}) # Сложение словарей
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8})
File "<pyshell#37>", line 3, in slozh
return a1 + a2 + a3 + a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
>>> slozh({1, 2}, {3, 4}, {5, 6}, {7, 8}) # Сложение множеств
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
slozh({1, 2}, {3, 4}, {5, 6}, {7, 8})
File "<pyshell#37>", line 3, in slozh
return a1 + a2 + a3 + a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
```
### 2.5. Функция, реализующая некоторую модель.
```py
>>> def inerz(x, T, ypred):
... """Модель устройства с памятью:
... x - текущее значение вх. сигнала,
... T - постоянная времени,
... ypred - предыдущее значение выхода устройства"""
... y = (x + T * ypred) / (T + 1)
... return y
...
>>> sps = [0] + [1] * 100
>>> spsy = [] # Подготовлен список для значений выходного сигнала
>>> TT = 20 # Постоянная времени
>>> yy = 0 # Нулевое начальное условие
>>> for xx in sps:
... yy = inerz(xx, TT, yy)
... spsy.append(yy)
...
>>> import pylab
>>> pylab.plot(spsy)
[<matplotlib.lines.Line2D object at 0x00000215E7CF4950>]
>>> pylab.xlabel("Время, сек.")
Text(0.5, 0, 'Время, сек.')
>>> pylab.ylabel("Выходной сигнал")
... Text(0, 0.5, 'Выходной сигнал')
>>> pylab.grid(True)
>>> pylab.show()
```
Полученный график выходного сигнала:
<image src = "figure1.png">
## 3. Функции как объекты.
### 3.1. Атрибуты объекта-функции.
Так как функции являются объектами, то у них есть некоторые атрибуты. Получить их список можно с помощью инструкции dir().
```py
>>> dir(inerz) # Получение списка атрибутов объекта-функции
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> inerz.__doc__ # Использование атрибута объекта-функции
'Модель устройства с памятью:\n x - текущее значение вх. сигнала,\n T - постоянная времени,\n ypred - предыдущее значение выхода устройства'
>>> help(inerz) # Получение помощи по объекту-функции
Help on function inerz in module __main__:
inerz(x, T, ypred)
Модель устройства с памятью:
x - текущее значение вх. сигнала,
T - постоянная времени,
ypred - предыдущее значение выхода устройства
```
#### 3.2. Ссылка на объект-функцию.
Ссылку на объект-функцию можно присваивать переменным, а затем обращаться к ним как к самой функции:
```py
>>> fnkt = sravnenie
>>> v = 16
>>> fnkt(v, 23)
>>> 16 меньше 23
```
#### 3.3. Альтернативное определение функций.
Функции могут быть определены разным образом в зависимости от особенностей реализации кода:
```py
>>> typ_fun = 8
>>> if typ_fun == 1:
... def func():
... print("Функция 1")
... else:
... def func():
... print("Функция 2")
...
>>> func()
Функция 2
```
## 4. Аргументы функции.
### 4.1. Использование фунции в качестве аргумента.
В качестве аргумента функции может выступать и другая функция:
```py
>>> def fun_arg(fff, a, b, c):
... """fff - имя функции, используемой в качестве аргумента"""
... return(a + fff(c, b))
...
>>> zz = fun_arg(logistfun, -3, 1, 0.7)
>>> zz
-2.3318122278318336
```
### 4.2. Обязательные и необязательные аргументы.
Аргументы функции могут быть необязательными, т.е. иметь некоторое значение, заданное по умолчанию:
```py
>>> def logistfun(a, b = 1):
... """Вычисление логистической функции"""
... import math
... return b / (1 + math.exp(-a))
...
>>> logistfun(0.7)
0.6681877721681662
>>> logistfun(0.7, 2)
1.3363755443363323
```
### 4.3. Расположение аргументов функции.
К функции можно обращаться с произвольным (непозиционным) расположением аргументов, при этом необходимо указывать их имена:
```py
>>> logistfun(b = 0.5, a = 0.8)
0.34498724056380625
>>> logistfun(0.8, 0.5)
0.34498724056380625
```
### 4.4. Аргументы функции, содержащиеся в списке или кортеже.
Аргументы функции могут содержаться в списке или кортеже, в таком случае при их передаче в функцию необходима распаковка с помощью оператора " __*__ ".
```py
>>> b1234 = [b1, b2, b3, b4]
>>> slozh(*b1234)
[1, 2, -1, -2, 0, 2, -1, -1]
>>> slozh(b1, b2, b3, b4)
[1, 2, -1, -2, 0, 2, -1, -1]
```
### 4.5. Аргументы функции, содержащиеся в словаре.
Аналогичная ситуация происходит и с аргументами, представленными в виде словаря. Однако распаковка в таком случае проводится с помощью оператора " __**__ ". Важно также заметить, что имена ключей словаря с аргументами не должны совпадать с именами остальных переданных аргументов, иначе произойдет ошибка.
```py
>>> dic4 = {"a1" : 1, "a2" : 2, "a3" : 3, "a4" : 4}
>>> slozh(**dic4)
10
```
### 4.6. Смешанные ссылки.
Данные способы передачи аргументов в функцию можно комбинировать:
```py
>>> e1 = (-1, 6)
>>> dd2 = {"a3" : 3, "a4" : 4}
>>> slozh(*e1, **dd2)
12
```
### 4.7. Переменное число аргументов у функции.
Число аргументов у функции может быть произвольным, что осуществляется с помощью того же оператора " __*__ ".
```py
>>> def func4(*kort7):
... """Произвольное число элементов в составе кортежа"""
... smm = 0
... for el in kort7:
... smm += el
... return smm
...
>>> func4(-1, 2)
1
>>> func4(-1, 2, 0, 3, 6)
10
```
### 4.8. Комбинация аргументов.
Данные способы передачи аргументов также можно комбинировать:
```py
>>> def func4(a, b = 7, *kort7):
... """Кортеж - сборка аргументов - должен быть последним!"""
... smm = 0
... for el in kort7:
... smm += el
... return a * smm + b
...
>>> func4(-1, 2, 0, 3, 6)
-7
```
Пример реализации аналогичной функции для произвольного количества аргументов, переданного в виде словаря:
```py
>>> def func4(a, b = 7, **dict7):
... """Словарь - сборка аргументов - должен быть последним!"""
... smm = 0
... for el in dict7.values():
... smm += el
... return a * smm + b
...
>>> func4(-1, 2, **{"a1" : 0, "a2" : 3, "a3" : 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)
>>> sps1 # Список - изменяемый объект
[1, 99, 3, 4]
>>> kort = (1, 2, 3, 4)
>>> func2(kort) # Кортеж также является неизменяемым
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
func2(kort)
File "<pyshell#51>", line 2, in func2
sps[1] = 99
TypeError: 'tuple' object does not support item assignment
```
## 5. Специальные типы пользовательских функций.
### 5.1. Анонимные функции.
Анонимные функции - лямбда-функциями - это функции без имени , определяемые по следующей схеме:<br>
__lambda [[<Список аргументов >]]: <Возвращаемое значение или выражение>__<br>
__lambda [<Список аргументов >]: <Возвращаемое значение или выражение>__<br>
Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту.
```py
>>> anfun1 = lambda: 1.5 + math.log10(12.23)
>>> anfun1()
2.5874264570362855
>>> anfun2 = lambda a, b: a + math.log10(b)
>>> anfun2(17, 234)
19.369215857410143
>>> anfun3 = lambda a, b = 234: a + math.log10(b)
>>> anfun3(100)
102.36921585741014
```
### 5.2. Функции-генераторы.
Функции-генераторы - функции, использующиеся в итерационных процессах, позволяющие на каждой из итераций получать значение с помощью инструкции __yield__, приостанавливающей выполнение функции.
```py
>>> def func5(diap, shag):
... """Итератор, возвращающий значения из диапазона от 1 до diap с шагом shag"""
... for i in range(1, diap + 1, shag):
... yield i
...
>>> for mm in func5(7, 3):
... print(mm)
...
1
4
7
```
При работе с такими функциями часто используют метод __/_/_next/_/___, активирующий очередную итерацию выполнения функции:
```py
>>> alp = func5(7, 3)
>>> print(alp.__next__())
1
>>> print(alp.__next__())
4
>>> print(alp.__next__())
7
>>> print(alp.__next__()) # При отсутствии следующих итераций будет ошибка
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
print(alp.__next__())
StopIteration
```
## 6. Локализация объектов.
По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Они записываются в пространство имен, создаваемое в функции. Глобальные – это те объекты, значения которых заданы вне функции. Они определены в пространствах имен вне функции.
### 6.1. Примеры на локализацию объектов в функциях.
Локальный и глобальный объекты могут иметь одинаоковое имя:
```py
>>> glb = 10
>>> def func7(arg):
... loc1 = 15
... glb = 8
... return loc1 * arg
...
>>> func7(glb)
150
>>> glb # Значение не измени лось, т.к. операции проводились над локальной переменной
10
```
При использовании локального объекта до его определения будет ошибка:
```py
>>> def func8(arg):
... loc1 = 15
... print(glb)
... glb = 8
... return loc1 * arg
...
>>> func8(glb)
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
func8(glb)
File "<pyshell#96>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
```
Локализацию объекта можно переопределить с помощью дескриптора __global__:
```py
>>> glb = 11
>>> def func7(arg):
... loc1 = 15
... global glb
... print(glb)
... glb = 8
... return loc1 * arg
...
>>> func7(glb)
11
165
>>> glb # Значение изменилось, т.к. была переопределена локализация объекта
8
```
### 6.2. Функции для выявления локализации объектов.
Чтобы узнать текущую локализацию объекта можно использовать функции __globals()__ и __locals()__, которые возвращают словари с ключами - именами объектов, являющихся, соответственно, глобальными или локальными на уровне вызова этих функций.
```py
>>> globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8'])
>>> locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8'])
```
Пример просмотра локальных и глобальных объектов изнутри функциии:
```py
>>> def func8(arg):
... loc1 = 15
... glb = 8
... print(globals().keys())
... print(locals().keys())
... return loc1 * arg
...
>>> func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
150
>>> "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("glob_func9:", globals().keys())
... print("locl_func9:", locals().keys())
... return arg2 + arg3 * glb
...
>>> func9(10, 1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8', 'func9'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8', 'func9'])
locl_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
85
```
### 6.4. Моделирование некоторой системы с помощью нескольких функций.
Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа "зона нечувствительности", при подаче на нее синусоидального входного сигнала.
Этап 1 - запрос и обработка введенных параметров системы:
```py
>>> znach = input("k1, T, k2, Xm, A, F, N = ").split(",")
>>> k1, T, k2, Xm, A, F, N = 7, 4, 2, 5, 2, 0.01, 100
>>> k1 = float(znach[0])
>>> T = float(znach[1])
>>> k2 = float(znach[2])
>>> Xm = float(znach[3])
>>> A = float(znach[4])
>>> F = float(znach[5])
>>> N = int(znach[6])
```
Этап 2 - реализация входного сигнала:
```py
>>> import math
>>> vhod = []
>>> for i in range(N):
... vhod.append(A * math.sin((2 * i * math.pi) / F))
...
>>> vhod
[0.0, 7.857546894913888e-15, 1.5715093789827776e-14, -2.038010347584904e-13, 3.143018757965555e-14, -6.428332918551267e-13, -4.076020695169808e-13, -1.081865548951763e-12, ..., -7.666359036382766e-12, -6.521633112271693e-12, -5.376907188160619e-12, -1.8784096492416397e-11, -3.0874553399384703e-12]
```
Этап 3 - создание функций, реализующих компоненты системы:
```py
>>> def realdvig(xtt, kk1, TT, yti1, ytin1):
... # Модель реального двигателя
... yp = kk1 * xtt # Усилитель
... yti1 = yp + yti1 # Интегратор
... ytin1 = (yti1 + TT * ytin1) / (TT + 1)
... return [yti1, ytin1]
...
>>> def tahogen(xtt, kk2, yti2):
... # Модель тахогенератора
... yp = kk2 * xtt
... yti2 = yp + yti2
... return yti2
...
>>> def nechus(xtt, gran):
... # Зона нечувствительности
... if xtt < gran and xtt > (-gran):
... return 0
... elif xtt >= gran:
... return xtt - gran
... elif xtt <= (-gran):
... return xtt + gran
```
Этап 4 - соединение компонент в соответствии с заданием и получение выходного сигнала:
```py
>>> yi1 = 0; yin1 = 0; yi2 = 0
>>> vyhod = []
>>> for xt in vhod:
... xt1 = xt - yi2
... [yi1, yin1] = realdvig(xt1, k1, T, yi1, yin1)
... yi2 = tahogen(yin1, k2, yi2)
... yt = nechus(yin1, Xm)
... vyhod.append(yt)
...
>>> print("y =", vyhod)
y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.0750309723388316, 0, -12.800524758874488, 11.328734010636943, 37.9986846091337, -51.695128234754044, -93.73359277523646, 176.80628109766909, 206.3512386278131, -546.6832050741272, -399.06819555417735, 1598.4573240949626, 604.2307443815814, -4487.243599090263, -296.234076116122, 12162.217953139934, -2805.586281370296, -31870.75393905672, 17036.29869407474, 80623.4912164512, -69802.97975583967, -195996.03820751337, 245998.54033834403, 453751.31553486304, -796405.0354457049, -982958.5881199688, 2433666.144586724, 1918572.300755354, -7113910.846421458, -3041359.0662945407, 20031038.041300073, 2216408.8952286365, -54513798.16041583, 10262153.3054456, 143509014.33326405]
```
## 7. Завершение работы со средой.
Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.

@ -0,0 +1,101 @@
# Общее контрольное задание по теме 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
```

@ -0,0 +1,28 @@
# Индивидуальное контрольное задание по ТЕМЕ №7
Степанищев Виктор, А-03-23
## Задание
```
#2
Разработайте функцию с 4 аргументами, создающую последовательность отсчетов случайного, нормально распределенного сигнала типа белого шума с заданными параметрами: математическое ожидание и дисперсия, число отсчетов (аргументы функции). Сигнал должен быть записан построчно, по 3 элемента в строке с разделителем - пробел в текстовый файл с заданным именем (4-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
```
## Решение
```py
from random import gauss
import math
def func(mean, dispersia, count, filename):
otklonenye = math.sqrt(dispersia)
samples = [gauss(mean, otklonenye) for i in range(count)]
with open(filename, 'w') as f:
for i in range(0, count, 3):
f.write(''.join(f"{' '.join(map(lambda x: str(x), samples[i:i+3]))}\n"))
return samples
func(0, 1, 10, "filename.txt")
```

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

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

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

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

@ -0,0 +1,124 @@
# Индивидуальное контрольное задание по ТЕМЕ №8
Степанищев Виктор, А-03-23
## Задание
```
#7
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;
- функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j].
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1<T2 и, если это не выполняется - запрос повторяется;
- запрашивается у пользователя целое число М - число значений в списке СС; если М>(T2-T1), то принимается М=Т2-Т1;
- с помощью функции 1 создается и отображается список СС;
- создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2;
- с помощью функции 2 рассчитывается список НН; результат отображается на экране.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin.
4) Проверьте программу при двух наборах исходных данных:
- Т1=34, Т2=78, М= 10
- Т1=25, Т2=30, М=8.
```
## Решение
### Файл M2.py
```py
from typing import Tuple
import random
from M1 import func1, func2
def _input_int(prompt: str) -> int:
s = input(prompt)
return int(s)
def _input_range_t1_t2() -> Tuple[int, int]:
while True:
t1 = _input_int("T1: ")
t2 = _input_int("T2: ")
if t1 < t2:
return t1, t2
def main():
t1, t2 = _input_range_t1_t2()
m = _input_int("m: ")
max_m = t2 - t1
if m > max_m:
m = max_m
CC = func1(t1, t2, m)
KK = [random.randint(t1, t2) for i in range(500)]
HH = func2(CC, KK)
print("HH:", HH)
return CC, KK, HH
```
### Файл M1.py
```py
from typing import List, Union, Tuple
from random import sample
def func1(T1: int, T2: int, M: int) -> List[int]:
CC = sample(range(T1, T2+1), M)
return CC
from typing import List, Tuple, Union
def func2(CC: List[int], KK: Union[Tuple[int, ...], List[int]]) -> List[int]:
HH = []
KK = list(KK)
for c in CC:
nearest = min(KK, key=lambda x: abs(x - c))
HH.append(nearest)
return HH
```
### Файл M0.py
```py
import pickle
import M2
def main():
CC, KK, HH = M2.main()
data = {
"CC": CC,
"KK": KK,
"HH": HH,
}
with open("Res1212.bin", "wb") as f:
pickle.dump(data, f)
if __name__ == "__main__":
main()
```
### Вывод
```py
>>> T1: 34
>>> T2: 78
>>> m: 10
HH: [48, 75, 60, 69, 70, 45, 63, 59, 66, 38]
```

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

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

После

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

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

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

@ -0,0 +1,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\\Viktor\\Desktop\\python-labs\\TEMA9\\')
os.getcwd()
'C:\\Users\\Viktor\\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\Viktor\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">

@ -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\\Viktor\\Desktop\\python-labs\\TEMA9\\')
os.getcwd()
'C:\\Users\\Viktor\\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
['За победу в конкурсе "лучшая кафедра"']
```

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

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

@ -0,0 +1,11 @@
# Общее контрольное задание по теме 1
Степанищев Виктор, А-03-23
## Вопрос
Что означает название интерактивной оболочки IDLE?
## Ответ
IDLE - Integrated Development and Learning Environment (интегрированная среда для разработки и обучения на ЯП python)
Загрузка…
Отмена
Сохранить