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

...

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

Автор SHA1 Сообщение Дата
MelnikovDM 0de7511a7f Changes in file
13 часов назад
MelnikovDM 17d14c85e1 Add new files
13 часов назад
MelnikovDM 2fbb82f6f3 Add new file
2 недель назад
MelnikovDM 32fd17297f Changes in files
2 недель назад
MelnikovDM 0d09f4da88 Changes in report
2 недель назад
MelnikovDM ce9b3c8b70 Changes in file
2 недель назад
MelnikovDM 6321b93ea0 Add new file
2 недель назад
MelnikovDM 728de489fb Changes in report
3 недель назад
MelnikovDM d2ec5c8b7a Add new files
3 недель назад
MelnikovDM 4fcc536ea5 Changes in file
4 недель назад
MelnikovDM 50e2745504 Changes in file
4 недель назад
MelnikovDM 29f04e05a7 Add new file
4 недель назад
MelnikovDM 03d20736e1 Changes in file
4 недель назад
MelnikovDM 27face9006 Changes in file
4 недель назад
MelnikovDM 10baed70cb Changes in file
4 недель назад
MelnikovDM 4b9bed0aaa Changes in file
4 недель назад
MelnikovDM 46cbefc54d Add new file
4 недель назад
MelnikovDM d13c448309 Add new file
1 месяц назад
MelnikovDM 3a5e1d552e Changes in files
1 месяц назад
MelnikovDM 7c4fa50619 Changes in files
1 месяц назад
MelnikovDM 12a33cb6a1 Changes in files
1 месяц назад
MelnikovDM 6fe3733f85 Changes in file
1 месяц назад
MelnikovDM c0596cf160 Add new file
1 месяц назад
MelnikovDM fa8f8c487e Changes on code
2 месяцев назад
MelnikovDM 6d7d7012be Add new file
2 месяцев назад
MelnikovDM be68988e71 Delete file tema1
2 месяцев назад
MelnikovDM df3932c0d8 Add new files
2 месяцев назад
MelnikovDM c5afb1c091 Add new files
2 месяцев назад
MelnikovDM 02067e6377 Add new files
2 месяцев назад
MelnikovDM 7e1212d364 Add new files
2 месяцев назад
MelnikovDM 9cb5eb3283 Add new files
2 месяцев назад
MelnikovDM ee880e698e Add new files
2 месяцев назад
MelnikovDM 7d58c3d001 Add new files
2 месяцев назад

@ -0,0 +1,195 @@
# Отчет по теме 1
Мельников Дмитрий, А-01-23
## 1 Изучение среды IDLE
### 1.1 Создаем на рабочем диске папку и подкаталоги.
### 1.2 Запускаем на выполнение программу-интерпретатор, выбрав ее ярлык «Python 3.10 (command line)».
### 1.3. Изучаем содержание открывающегося диалогового окна интерпретатора
После символов приглашения к диалогу : «>>> » вводим инструкцию
```
>>>print('Hello')
```
и нажимаем клавишу Enter. Убеждаемся, что интерпретатор выполнил введенную инструкцию и на следующей строке появилось слово «Hello».
### 1.4. Вводим еще одну инструкцию:
```
>>>h=input('Your name=')
```
и вводим после появляющегося в следующей строке запроса своё имя в латинской транскрипции.
### 1.5. Завершаем работу интерпретатора вводом инструкции exit()
### 1.6. Запускаем оболочку интерактивную графическую оболочку IDLE среды Python .
### 1.7. Изучаем устройство главного командного окна среды.
### 1.8. Настройки рабочего каталога среды
В командном окне после символов приглашения к диалогу вводим инструкции настройки рабочего каталога среды по следующему образцу:
```
>>>import os
<built-in function chdir>
>>>os.chdir ('C:\\Users\\dimoo\\OneDrive\\Рабочий стол\\Melnikov\\Tema1\\')
```
Обратим внимание на то, что в строке, задающей путь к рабочему каталогу, имена папок разделены двойными слешами.
### 1.9. Изучение главного меню
Изучим предложения главного меню, а также предложения выпадающих меню.В главном меню выберем предложение «Настройки (Options)». Для примера установим в среде: шрифт типа Arial CYR, размер 11, размер начального окна - высота 50 символов, ширина 100 символов, подкраска комментариев - коричневая. Заметим, что размеры окон могут задаваться также простым раздвижением их с помощью захвата курсором компьютерной мыши.
### 1.10. Создание текстового файла IDLE
Используя предложения «Файл (File)» и «Новый файл (New File)» откроем окно текстового редактора оболочки IDLE. В первой строке окна редактора введем комментарий, начиная его со знака #
#Программа по Теме 1 <Мельников Дмитрий Максимович>
Во второй - пятой строках вставим инструкции, использованные при выполнении п.п. 1.3, 1.4 и
1.8. Сохраните введенный текст в программном файле Pr0.py в рабочем каталоге. Запустите инструкции на выполнение, используя предложение в меню редактора: «Запустить модуль (Run module)».
```
========== RESTART: C:/Users/dimoo/OneDrive/Рабочий стол/Melnikov/Tema1/Pr0.py =========
Hello
Your name=Dmitry
```
Закроем окно редактора.
Рассмотрим другой способ запуска программы на выполнение. Для этого в командном окне запустим программу на выполнение инструкцией
```
import Pr0
Hello
Your name=Dmitry
```
Третий способ: при активном окне редактора с программой – нажмем функциональную клавишу F5.
```
========== RESTART: C:/Users/dimoo/OneDrive/Рабочий стол/Melnikov/Tema1/Pr0.py =========
Hello
Your name=
```
### 1.11. Запуск программы из рабочего каталога
Теперь запустим на выполнение программу, которая находится в рабочем каталоге в файле prb1.py. Для этого поставим в командном окне IDLE курсор на предыдущую инструкцию и нажмем клавишу Enter. Обычным редактированием заменим имя Pr0 на prb1 и затем нажмем Enter для запуска программы.
```
>>>import prb1
Как Вас зовут? Dmitry
Привет, Dmitry
```
### 1.12. Изучение рабочего каталога
Используя в меню текстового редактора предложение «Открыть (Open)», изучим состав рабочего каталога. Обратим внимание на каталог __pycache__. Откроем этот каталог и попытаемся открыть в текстовом редакторе файл Pr0.cpython-34.pyc – результат работы компилятора среды. Объясним полученный результат.
-o
ЧPµhе г  @ s& e d ѓ edѓZddlZe dЎ dS )ZHelloz
Your name=й Nu? C:\Users\dimoo\OneDrive\Рабочий стол\Melnikov\Tema1\)ЪprintЪinputЪosЪchdir© r r хE C:\Users/dimoo/OneDrive/Рабочий стол/Melnikov/Tema1\Pr0.pyЪ<module> s 
Мы получили не читаемый текст программы. Т.к. .pyc - это файл бинарный, содержащий байт код и служебную информацию, значит текстовый редактор не может полностью правильно отобразить данный файл.
Зачем производится компиляция программ?
- Компиляция программ производится для увеличения производительности, оптимизации и удобства. Производительность увеличивается за счет отсутствия накладных расходов, оптимизации циклов, встроенных функций, удаления мертвого кода (Файл .pyc — это уже готовый результат. При запуске программы Python может сразу начать выполнять байт-код из ".pyc" файла, полностью пропуская стадию чтения, разбора и компиляции исходного текста.). Если файлов становится больше, то появляются такие удобства: разные файлы служат разным целям, экономия времени при каждом последующем запуске (Время, затраченное на чтение одного дополнительного файла ".pyc", несоизмеримо меньше, чем время, которое процессор тратит на компиляцию исходного кода с нуля. Таким образом, наличие лишнего файла приводит к чистой экономии общего времени.).
### 1.13. Создание отдельного файла для последующего копирования корректно выполненных инструкций из командного окна и результатов их выполнения
### 1.14. Изучение раздела помощи (Help) главного меню. Какие виды помощи здесь предлагаются?
About IDLE - описание характеристик текущей среды (версия, путь и пр.)
IDLE Help - помощь по работе со средой
Python Docs - документация по языку
Turtle Demo - окно работы и помощь модуля для работы с графикой turtle
В командном окне после знака приглашения к диалогу : «>>> » введите инструкцию обращения к оперативной помощи по функции print() – вывод значений указываемого объекта на заданное устройство.(Вывело пустую строку)
```
>>>print()
>>>help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
```
Ввод нескольких инструкций:
```
>>>help(print), help(input)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt=None, /)
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)
```
Попробуем ранее рассмотренный способ: поставим в командном окне IDLE курсор на строку с ранее введенной инструкцией помощи по функции print и нажмем клавишу Enter. Копия инструкции появится в новой строке и ее можно дополнить до нужной инструкции.
```
>>>print(10)
10
```
Отметим, что можно использовать другой вариант обращения к оперативной помощи – при нажатии на функциональную клавишу F1 появляется окно справочной подсистемы, в левой части на закладке «Указатель (Index)» находится упорядоченный по алфавиту список терминов языка Python. Найдем в этом списке строку print() (built-in function)
щелкним по ней мышью и в правой части окна появится справка по этой функции.
Теперь выберем в главном меню предложение «Помощь (Help)», в выпадающем меню – «Python Docs» и убедимся, что появляется то же диалоговое окно, что и при нажатии клавиши F1.
### 1.15.
Изучение перехода между окнами с помощью «Окна (Window)»,
File - Open - prb1.py
prb1.py - Run
```
========= RESTART: C:\Users\dimoo\OneDrive\Рабочий стол\Melnikov\Tema1\prb1.py =========
Как Вас зовут? Dmitry
Привет, Dmitry
```
```
>>>import tdemo_chaos
```
Help - Turtle Demo - clock - Start выводит на экран графическое представление
программы - циферблат с часами. Данная программа рисует графики по заданным функциям, проходя через точки, которым задан определенный шаг в программе. Есть и другие примеры программ модуля turtle,которые можно брать за основу собственных программ, изменять или реализовывать свои идеи.
Оценка возможностей использования этих примеров при написании собственных программ:
Можно заимствовать фрагменты кода, изучать структуры программы, модифицировать код.
### 1.16. Завершение работы со средой. Для этого выберем предложения «Файл (File)» и «Выход (Exit)».

@ -0,0 +1,16 @@
# Ответ на контрольный вопрос №4
Мельников Дмитрий, А-01-23
## Вопрос
Можно ли писать несколько инструкций в одной строке командного окна?
## Ответ
Несколько инструкций в одной строке командного окна можно писать, разделяя их запятыми или точками с запятой.
Пример из методического указания к лабораторной работе:
```
<<< help(print), help(input)
```

@ -0,0 +1,714 @@
# Отчет по теме 2
Мельников Дмитрий, А-01-23
## 1. Запуск оболочки IDLE и установка рабочего каталога
## 2. Изучение простых объектов
Рассмотрим операции присваивания значения объектам-переменным
```
>>>f1=16; f2=3
```
Для того, чтобы узнать, какое значение имеет переменная, достаточно перечислить их имена в строке, разделяя их знаком «,» (запятая) или «;» (точка с запятой) :
```
>>>f1,f2
(16, 3)
>>>f1;f2
16
3
```
Для того, чтобы узнать, какие объекты уже существуют в данный момент в среде Python (в пространстве имен), используем функцию dir без аргументов:
```
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
```
Для получения списка атрибутов любого объекта используем ту же функцию dir(), с аргументами – именами интересующих объектов, например:
```
>>>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():
```
>>>type(f2)
<class 'int'>
```
Для удаления объекта или его части из оперативной памяти используем инструкцию del, например:
```
>>>del f1,f2
```
Проверим, остались ли эти объекты в памяти.
```
>>>dir(f1)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
dir(f1)
NameError: name 'f1' is not defined
dir(f2)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
dir(f2)
NameError: name 'f2' is not defined
```
Видим, что объекты удалились.
## 3. Изучение правила именования объектов в Python.
```
>>>gg1=1.6 #значение в виде вещественного числа
>>>gg1
1.6
>>>hh1='Строка' #значение в виде символьной строки
>>>hh1
'Строка'
>>>73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
SyntaxError: invalid decimal literal
>>>and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика!
SyntaxError: invalid syntax
```
## 4. Вывод списка ключевых слов с помощью инструкции
```
>>>import keyword
>>>keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
Просмотрим список, сохраним его в переменной с некоторым именем.
```
>>>kwd = keyword.kwlist
>>>kwd
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## 5. Ввод списка встроенных идентификаторов с помощью инструкций
```
>>>import builtins
>>>dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', '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:
Взятие модуля:
```
>>>abs(-10)
10
```
Длина списка:
```
>>>len([1, 2, 3])
3
```
Выбор максимального значения:
```
>>>max(10, 5)
10
```
Выбор минимального значения:
```
>>>min(10, 5)
5
```
Возведение в степень:
```
>>>pow(5, 2)
25
```
Возведение в степень по модулю:
```
>>>pow(5, 2, 2)
1
```
Округление до целого:
```
>>>round(5,298)
5
```
Сортировка по возрастанию(можно применить reverse = True для сортировки по убыванию):
```
>>>sorted([3, 10, 4, 15, 7])
[3, 4, 7, 10, 15]
```
Суммирование:
```
>>>sum([10, 5 ,7])
22
```
Объединение объектов в кортеж (Возвращает итерируемый объект "iterable")
```
>>> list1 = [1, 2, 2]
>>> list2 = [3, 4, 5]
>>> zip (list1, list2)
<zip object at 0x000002039D4C0C80>
```
(Итератор - это объект, который позволяет последовательно получать доступ к элементам коллекции без необходимости знать её внутреннее устройство.)
## 6. Пример того, что Python - регистрочувствительный язык.
```
>>>Gg1 = 45
>>>gg1, Gg1
(1.6, 45)
```
## 7. Изучение простых базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
### 7.1. Логический тип.
```
>>>bb1=True; bb2=False
>>>bb1;bb2
True
False
>>>type(bb1) #функция, показывающая тип (класс) объекта
<class 'bool'>
```
### 7.2. Другие простые типы
Целое число (десятичное)
```
>>> ii1 = 1234567890
>>> type(ii1)
<class 'int'>
```
Экспоненциальная форма записи числа
```
>>> ff1 = 8.987e-12
>>> type(ff1)
<class 'float'>
```
Двоичное число (префикс 0b - binary)
```
>>> dv1 = 0b1100101
>>> type(dv1)
<class 'int'>
```
Восьмеричное число (0о - octal)
```
>>> vsm1 = 0o52765
>>> type(vsm1)
<class 'int'>
```
Шестнадцатеричное число (0х - hexadecimal)
```
>>> shest1 = 0x7109af6
>>> type(shest1)
<class 'int'>
```
Комплексное число
```
>>> cc1 = 2 - 3j
>>> type(cc1)
<class 'complex'>
```
Создание комплексного числа
```
>>> a = 3.67
>>> b = 0.45
>>> cc2 = complex (a, b)
>>> cc2
(3.67+0.45j)
>>> type (cc2)
<class 'complex'>
```
### 7.3. Строка символов
```
>>>ss1='Это - строка символов'
>>>ss1
'Это - строка символов'
```
Строки можно заключать в апострофы или в двойные кавычки:
```
>>>ss1="Это - строка символов"
>>>ss1
'Это - строка символов'
```
Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \\, \', \", \t, \n и другие. Пример:
```
>>>ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>>print(ss1a)
Это - " строка символов ",
выводимая на двух строках
```
Создадим строку по шаблону:
```
>>>ss1b= 'Меня зовут: \n <Мельников Д. М.>'
>>>print(ss1b)
Меня зовут:
<Мельников Д. М.>
```
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например,
```
>>>mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
>>>print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
```
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки.
Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например,
```
>>>ss1[0] #Это – символ «Э»
'Э'
>>>ss1[8] #А это – символ «р»
'р'
>>>ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки)
'о'
```
Операция «разрезания» или «создания среза», создающая новый объект:
```
>>>ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!)
'стр'
>>>ss1[13:] #Это часть строки – с 13-го индекса и до конца
'символов'
>>>ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно
'Это - строка '
>>>ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца
' строка '
>>>ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2
' тоасм'
```
Обратим внимание на то, что в срезе указываются не позиции элементов, а их индексы и что указываемая правая граница в срез не включается.
Значение при отрицательном значении шага:
```
>>>ss1[17:3:-2]
'омсаот '
```
При замене 17 на -4 получается такой же результат:
```
ss1[-4:3:-2]
'омсаот '
```
Строка является неизменяемым объектом. Попробуем, например, инструкцию
```
>>>ss1[4]='=' # Будет диагностика!
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
ss1[4] = '='
TypeError: 'str' object does not support item assignment
```
Однако, можно это сделать по-другому, переопределив строку:
```
>>>ss1 = ss1[:4] + '=' + ss1[5:]
>>>ss1
'Это = строка символов'
```
С использованием ранее созданной строки ss1b попробуем создать объекты с разными срезами исходной строки.
```
>>>ss1b[0:5]
'Меня '
>>>ss1b[:10:2]
'Мн оу'
```
Самостоятельное создание объектов разных типов. Отображение типов и значений созданных объектов.
```
>>>obj1 = 25
>>>type(obj1)
<class 'int'>
>>>obj2 = hex(obj1)
>>>obj2
'0x19'
>>>type(obj2)
<class 'str'>
```
## 8. Списки (list), кортежи (tuple), словари (dict), множества (set).
### 8.1. Список
```
>>>spis1=[111,'Spisok',5-9j]
>>>spis1
[111, 'Spisok', (5-9j)]
```
Еще пример: список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»:
```
>>>stup=[0,0,1,1,1,1,1,1,1]
>>>stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
```
Список можно вводить на нескольких строках. При этом список будет считаться незавершенным, пока не будет введена закрывающая квадратная скобка, например,
```
>>>spis=[1,2,3,4,5,6,7,8,9,10]
>>>spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```
При работе с элементами списка можно использовать индексы точно так же, как это делали с элементами символьной строки, например, ссылка на последний элемент списка:
```
>>>spis1[-1]
(5-9j)
```
или
```
>>>stup[-8::2]
[0, 1, 1, 1]
```
Проверим возможность изменения списка, например,
```
>>>spis1[1] = 'Список'
>>>spis1
[111, 'Список', (5-9j)]
```
Текущее число элементов в списке можно узнать с помощью функции len():
```
>>>len(spis1)
3
```
Методы объекта находятся в списке его атрибутов, который выводится с помощью уже известной функции dir(). Описание метода можно вывести с помощью функции help() по образцу
```
>>>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'] # В конец списка добавлен элемент «New item»
>>>spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
```
Обратим внимание на то, что в этой инструкции новый список только отображается, но не сохраняется!
Добавим в конец списка spis1 строку ss1b и отобразите список.
Удаление элемента:
```
>>>spis1.pop(1) #Из списка удален элемент с индексом 1
'Список'
>>>spis1
[111, (5-9j), 'New item']
```
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
1. Для insert (Вставка элемента в определенное место по индексу)
```
>>>help(spis1.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
>>>spis1.insert(3, "hello")
>>>spis1
[111, (5-9j), 'New item', 'hello']
```
2. Для remove (Удаление элемента по значению)
```
>>>help(spis1.remove)
Help on built-in function remove:
remove(value, /) method of builtins.list instance
Remove first occurrence of value.
Raises ValueError if the value is not present.
>>>spis1.remove(111)
>>>spis1
[(5-9j), 'New item', 'hello']
```
3. Для extend (Добавление элементов объекта в конец другого объекта)
```
>>>help(spis1.extend)
Help on built-in function extend:
extend(iterable, /) method of builtins.list instance
Extend list by appending elements from the iterable.
>>>per1 = [123, "new", (7, 5)]
>>>spis1.extend(per1)
>>>spis1
[(5-9j), 'New item', 'hello', 123, 'new', (7, 5)]
```
4. Для clear (Полное очищение списка)
```
>>>help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
>>>per1.clear()
>>>per1
[]
```
5. Для sort ( Сортировка списка без создания нового объекта)
```
>>>help(spis1.sort)
Help on built-in function sort:
sort(*, key=None, reverse=False) method of builtins.list instance
Sort the list in ascending order and return None.
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
order of two equal elements is maintained).
If a key function is given, apply it once to each list item and sort them,
ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
>>>per1 = [1, 2, 3.77777, 8, 9, -3, 0]
>>>per1.sort(key = abs, reverse = False)
>>>per1
[0, 1, 2, -3, 3.77777, 8, 9]
```
6. Для copy (Создание копии списка)
```
>>>help(spis1.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
>>>copyper = per1.copy()
>>>copyper
[0, 1, 2, -3, 3.77777, 8, 9]
```
7. Для count (Подсчет количества элементов по значению)
```
>>>help(spis1.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
>>>per1.count(5)
0
>>>per1.count(8)
1
```
8. Для index (Поиск индекса по значению)
```
>>>help(spis1.index)
Help on built-in function index:
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
Return first index of value.
Raises ValueError if the value is not present.
>>>per1.index(2)
2
```
Списки могут быть вложенными:
```
>>>spis2=[spis1,[4,5,6,7]] #здесь элементами являются два списка
>>>spis2
[[(5-9j), 'New item', 'hello', 123, 'new', (7, 5)], [4, 5, 6, 7]]
```
Обращение к элементам вложенного списка
```
>>>spis2[0][1] #обращение к элементу списка spis1
'New item'
```
Изменение элемента вложенного списка:
```
>>>spis2[0][1] = 78
>>>spis2
[[(5-9j), 78, 'hello', 123, 'new', (7, 5)], [4, 5, 6, 7]]
>>>spis1
[(5-9j), 78, 'hello', 123, 'new', (7, 5)]
```
Видим, что spis1 тоже изменился. Это происходит потому, что python работает не просто с
объектами, а с ссылками на участки памяти. То есть, в Python списки передаются по ссылке,
а не по значению.Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, а сообщаем именно тот список, поэтому его изменения в составе spis2 отображаются на исходном spis1.
Создание своего списка - объекта:
```
>>>spis3 = [99, 'Test', True, spis1]
>>>spis3
[99, 'Test', True, [(5-9j), 78, 'hello', 123, 'new', (7, 5)]]
```
### 8.2. Кортеж
Примеры операций с кортежами: создание кортежа
```
>>>kort1 = (222, 'Kortezh', 77 + 8j)
>>>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
```
Методов append и pop у кортежей нет, т.к. они являются неизменяемыми.
Попробуем операцию замены элемента кортежа:
```
>>>kort1[2] = 90
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
kort1[2] = 90
TypeError: 'tuple' object does not support item assignment
```
Создание объекта-кортежа с элементами разных типов: число, строка, список, кортеж.
```
>>>kortezh = (333, 'Dmitry', [10, 11, 12], (6, 7, 8))
>>>kortezh
(333, 'Dmitry', [10, 11, 12], (6, 7, 8))
```
### 8.3. Словарь
Пример создания словаря:
```
>>>dic1 = {'Saratov' : 145, 'Orel' : 56, 'Vologda' : 45}
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
```
Обращение к элементам словаря не по индексам, а по ключам:
```
>>>dic1['Orel']
56
```
Пополнение словаря (добавление элемента, изменение словаря):
```
>>>dic1['Pskov']=78
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
```
Обратим внимание на то, что в силу неупорядоченности словаря при его выводе элементы могут располагаться не в том порядке, в каком они задавались при его формировании.
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря.
Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям:
```
>>>sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>>sorted(dic1.values())
[45, 56, 78, 145]
```
Элементы словаря могут быть любого типа, в том числе и словарями. Например, создадим словарь:
```>>>
>>>dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>>dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>>dic3['statistics'][2]
'standart deviation'
```
Создадим более сложный словарь из списка с элементами-кортежами с использованием функции dict:
```
>>>dic4= dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>>dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n <Мельников Д. М.>'}
>>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>>dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n <Мельников Д. М.>'}
```
Создание объекта-кортежа с 7 элементами и объекта-списка с 5 элементами и создание из них словаря с помощью функций dict и zip.
```
>>>obj_cort = ("plus", "minus", "del", 4, 5, "med", "mod")
>>>obj_cort
('plus', 'minus', 'del', 4, 5, 'med', 'mod')
>>>obj_list = ["one", "two", "three", "four", "five"]
>>>obj_list
['one', 'two', 'three', 'four', 'five']
>>>obj_dict = dict(zip(obj_list, obj_cort))
>>>obj_dict
{'one': 'plus', 'two': 'minus', 'three': 'del', 'four': 4, 'five': 5}
```
Как мы видим длина словаря составляет 5 объектов. Это связано с функцией zip, которая делает так, что длина итогового объекта будет соответствовать минимальной длине составляющего.
### 8.4. Множество
Пример создания множества:
```
>>>mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>>mnoz1
{'датчик', 'двигатель', 'линия связи', 'микропроцессор'}
```
В созданном множестве дубликаты элементов были автоматически удалены.
Некоторые операции с множеством:
- определение числа элементов
```
>>>len(mnoz1)
4
```
- проверка наличия элемента во множестве
```
>>>'датчик' in mnoz1
True
```
- добавление элемента
```
>>>mnoz1.add('реле')
>>>mnoz1
{'двигатель', 'датчик', 'реле', 'линия связи', 'микропроцессор'}
```
- удаление элемента
```
mnoz1.remove('линия связи')
mnoz1
{'двигатель', 'датчик', 'реле', 'микропроцессор'}
```
Объект-множество с элементами разных типов.
```
mnoz2 = {'коробка', 10, True, 'gear'}
mnoz2
{True, 10, 'gear', 'коробка'}
len(mnoz2)
4
mnoz2.remove(True)
mnoz2
{10, 'gear', 'коробка'}
```
## 9. Завершение сеанса работы

@ -0,0 +1,43 @@
# Общее контрольное задание по теме 2
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
* Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
* Создать переменную со значением, совпадающим с первой буквой из familia.
* Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
* Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
* Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
* Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
* Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
* Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## Решение
```
>>>familia = 'Melnikov'
>>>familia
'Melnikov'
>>>f1 = familia[0]
>>>f1
'M'
>>>import keyword
>>>sp_kw = keyword.kwlist
>>>sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>>sp_kw.remove('nonlocal')
>>>sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>>kort_nam = ("Dima", "Nikita", "Vadim", "Artem")
>>>kort_nam
('Dima', 'Nikita', 'Vadim', 'Artem')
>>>type(kort_nam)
<class 'tuple'>
>>>kort_nam += ("Ivan", "Liza")
>>>kort_nam
('Dima', 'Nikita', 'Vadim', 'Artem', 'Ivan', 'Liza')
>>>kort_nam.count("Dima")
1
>>>dict_bas = {"строка" : familia, "символ" : f1, "список" : sp_kw, "кортеж" : kort_nam}
>>>dict_bas
{'строка': 'Melnikov', 'символ': 'M', 'список': ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'], 'кортеж': ('Dima', 'Nikita', 'Vadim', 'Artem', 'Ivan', 'Liza')}
```

@ -0,0 +1,22 @@
# Индивидуальное контрольное задание по теме 2
Мельников Дмитрий, А-01-23
## Задание
Создайте объект-строку с текстом данного задания. Определите класс объекта, его атрибуты. Напишите инструкцию, обеспечивающую расчет числа символов в объекте и вывод этого числа в виде: «Число символов = ХХХ». Создайте новый объект-строку, в который включите только четные элементы из первой строки.
## Решение
```
>>>task_text = "Создайте объект-строку с текстом данного задания. Определите класс объекта, его атрибуты. Напишите инструкцию, обеспечивающую расчет числа символов в объекте и вывод этого числа в виде: «Число символов = ХХХ». Создайте новый объект-строку, в который включите только четные элементы из первой строки."
>>>type(task_text)
<class 'str'>
>>>dir(task_text)
['__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']
>>>count_symbols = len(task_text)
>>>count_symbols
299
>>>str_chet = task_text[: : 2]
>>>str_chet
'Сзат бетсрк есо анг ааи.Ордлт лс бет,еоарбт.Нпшт нтуцю бсеиащюрсе ил ивлввоъкеиввдэоочсаввд:«ил ивлв=ХХ.Сзат оы бетсрк,вктрйвлчт оьочты лмныи евйсрк.'
```

@ -0,0 +1,867 @@
# Отчет по теме 3
Мельников Дмитрий, А-01-23
## 1. Запуск IDLE
## 2. Преобразование простых базовых типов объектов.
### 2.1. Преобразование в логический тип с помощью функции bool(<Объект>).
Примеры использования:
```
>>>logiz1 = bool(56)
>>>logiz1
True
>>>logiz2 = bool(0)
>>>logiz2
False
>>>logiz3 = bool("Beta")
>>>logiz3
True
>>>logiz4 = bool(" ")
>>>logiz4
True
```
### 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления. осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.
Примеры использования:
```
>>>tt1 = int(198.6) #Отбрасывается дробная часть
>>>tt1
198
>>>tt2 = int("-76")#Число – в строке символов, система по умолчанию - десятичная
>>>tt2
-76
>>>tt3 = int("B", 16)
>>>tt3
11
>>>tt4 = int("71", 8)
>>>tt4
57
>>>tt5 = int("98,76")
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
tt5 = int("98,76")
ValueError: invalid literal for int() with base 10: '98,76'
```
Как видно, выводится диагностическое сообщение. Выводится оно по причине того, что заданное число вещественное(float), а ожидается значение типа "int".
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
Примеры преобразований:
```
>>>flt1 = float(789)
>>>flt1
789.0
>>>flt2 = float(-6.78e2)
>>>flt2
-678.0
>>>flt3 = float("Infinity")
>>>flt3
inf
>>>flt4 = float("-inf")
>>>flt4
-inf
```
### 2.3. Преобразование десятичных чисел в другие системы счисления:
```
>>>hh=123
>>>hh
123
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
>>>dv1
'0b1111011'
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
>>>vos1
'0o173'
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
>>>shs1
'0x7b'
```
Выполним обратные преобразования объектов dv1, vos1, shs1:
```
>>>int(dv1,2)
123
>>>int(vos1, 8)
123
>>>int(shs1, 16)
123
```
## 3. Преобразования более сложных базовых типов объектов.
### 3.1. Преобразование в строку символов с помощью функции str(<Объект>).
Примеры использования:
```
>>>strk1 = str(23.6)
>>>strk1
'23.6'
>>>strk2 = str(logiz3)
>>>strk2
'True'
>>>strk3 = str(["A", "B", "C"]) # Преобразуем список
>>>strk3
"['A', 'B', 'C']"
>>>strk4 = str(("A", "B", "C")) # Преобразуем кортеж
>>>strk4
"('A', 'B', 'C')"
>>>strk5=str({"A":1,"B":2,"C":9}) # Преобразуем словарь
>>>strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
### 3.2. Преобразование элементов объекта в список с помощью функции list(<Объект>).
Примеры преобразований:
```
>>>spis1=list("Строка символов") #Заданная строка разделяется на символы
>>>spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>>spis2=list((124,236,-15,908)) #Кортеж превращается в список
>>>spis2
[124, 236, -15, 908]
>>>spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
>>>spis3
['A', 'B', 'C']
```
Инструкция, обеспечивающую создание из того же словаря списка с другими его частями:
```
>>>spis4 = list({"A":1,"B":2,"C":9}.values())
>>>spis4
[1, 2, 9]
```
### 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
Примеры преобразований
```
>>>kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
>>>kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>>kort8=tuple(spis2) #Преобразование списка в кортеж
>>>kort8
(124, 236, -15, 908)
>>>kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
>>>kort9
('A', 'B', 'C')
```
### 3.4. Удаление объектов.
Очистить оперативную память от ранее созданных объектов можно с помощью инструкции del.
Пример:
```
>>>del strk5, kort8
>>>strk5
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>>kort8
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Создание строки со своей фамилией и инициалами, преобразование её в список, затем список – в кортеж и, наконец, кортеж – в строку. .
```
>>>fam = list('Melnikov DM')
>>>fam
['M', 'e', 'l', 'n', 'i', 'k', 'o', 'v', ' ', 'D', 'M']
>>>kort = tuple(fam)
>>>kort
('M', 'e', 'l', 'n', 'i', 'k', 'o', 'v', ' ', 'D', 'M')
>>>strk = str(kort)
>>>strk
"('M', 'e', 'l', 'n', 'i', 'k', 'o', 'v', ' ', 'D', 'M')"
```
## 4. Арифметические операции.
### 4.1. Сложение и вычитание (+ и -)
```
>>>12+7+90 # Сложение целых чисел
109
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>>23.6+54 #Сложение вещественного и целого чисел
77.6
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
```
### 4.2. Умножение (*)
```
>>>-6.7*12 #Умножение вещественного числа на целое число
-80.4
```
### 4.3. Деление (/). (Результатом деления всегда будет вещественное число!)
```
>>>-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
a
3.9555555555555557
type(a)
<class 'float'>
```
### 4.4. Деление с округлением вниз (//).
Здесь результат может быть целым или вещественным. В нижеследующих операциях определите тип результата.
```
>>>b=178//45 #Деление двух целых чисел
>>>b
3
>>>type(b)
<class 'int'>
>>>c=-24.6//12.1 #Деление двух вещественных чисел
>>>c
-3.0
>>>type(c)
<class 'float'>
>>>zz1 = 78.4 / 16
>>>zz1
4.9
>>>type(zz1)
<class 'float'>
>>>zz2 = 78.4 // 16
>>>zz2
4.0
>>>type(zz2)
<class 'float'>
>>>zz3 = 78 // 16
>>>zz3
4
>>>type(zz3)
<class 'int'>
```
### 4.5. Получение остатка от деления (%).
```
>>>148 % 33 #Остаток от деления двух целых чисел
16
>>>12.6 % 3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
1.2000000000000002
>>>36 % 12
0
>>>36.98 % 23.56
>>>13.419999999999998
```
### 4.6. Возведение в степень (**).
```
>>>14**3
2744
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>>e
35.719843790663525
```
Попробуем проделать арифметические операции над комплексными числами. Создадим два
комплексных числа.
```
>>>comp1 = (5 + 3j)
>>>comp1
(5+3j)
>>>type(comp1)
<class 'complex'>
>>>comp2 = (10 - 5j)
>>>comp2
(10-5j)
>>>type(comp2)
<class 'complex'>
```
Сложение:
```
>>>comp1 + comp2
(15-2j)
```
Вычитание:
```
>>>comp1 - comp2
(-5+8j)
```
Умножение:
```
>>>comp1 * comp2
(65+5j)
```
Деление:
```
>>>comp1 / comp2
(0.28+0.44j)
```
Целочисленное деление:
```
>>>comp1 // comp2
Traceback (most recent call last):
File "<pyshell#129>", line 1, in <module>
comp1 // comp2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
>>>comp1 // 2
Traceback (most recent call last):
File "<pyshell#130>", line 1, in <module>
comp1 // 2
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
```
Как видим, целочисленное деление нельзя применять к комплексным числам.
Взятие остатка от деления:
```
>>>comp1 % comp2
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
comp1 % comp2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
>>>comp1 % 2
Traceback (most recent call last):
File "<pyshell#132>", line 1, in <module>
comp1 % 2
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
```
Как видим, взятие остатка от деления нельзя применять к комплексным числам.
Возведение в степень:
```
>>>comp1 ** comp2
(-652921189.7700557+180781145.7454619j)
>>>comp1**5
(-6100+2868j)
```
## 5. Операции с двоичными представлениями целых чисел.
### 5.1. Двоичная инверсия (~).
Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0).
```
>>>dv1 = 9
>>>dv2 = ~dv1
>>>dv2
-10
>>>bin(dv1)
'0b1001'
>>>bin(dv2)
'-0b1010'
```
### 5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```
>>>bin(7&9)
'0b1'
```
Совпадение единиц только в первом разряде, поэтому итог - 0001 или просто 1
```
>>>bin(7&8)
'0b0'
```
Совпадений единиц нет, итог - 0000 или просто 0
### 5.3. Двоичное «ИЛИ» (|)
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```
bin(7|9) # 111 или 1001 = 1111
'0b1111'
bin(7|8) # 111 или 1000 = 1111
'0b1111'
bin(14|5) # 1110 или 0101 = 1111
'0b1111'
```
### 5.4. Двоичное «исключающее ИЛИ»(^)
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
```
>>>bin(14^5) # 1110 исключающее или 0101 = 1011
'0b1011'
```
Значение в десятичном представление:
```
>>>14^5
11
```
### 5.5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```
>>>h=14 #Двоичное представление = 1110
>>>bin(h)
'0b1110'
>>>g=h<<2 # Новое двоичное представление = 111000
>>>g
56
bin(g)
'0b111000'
>>>g1=h>>1 # Новое двоичное представление = 0111
>>>g1
7
bin(g1)
'0b111'
>>>g2=h>>2 # Новое двоичное представление = 0011
>>>g2
3
bin(g2)
'0b11'
```
Придумайте два двоичных числа, не менее чем с 7 знаками, и попробуйте выполнить с ними разные операции.
Возьмем два двоичных числа:
1011001 (в десятичной системе это 89)
10001001 (в десятичной системе это 137)
1. Двоичная инверсия
```
>>>~89
-90
>>>bin(~89)
'-0b1011010'
```
2. Двоичное "И"
```
>>>bin(89 & 137)
'0b1001'
```
3. Двоичное "ИЛИ"
```
>>>bin(89 | 137)
'0b11011001'
```
4. Двоичное "исключающее ИЛИ"
```
>>>bin(89^137)
'0b11010000'
```
5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```
>>>89 >> 2
22
>>>bin(89 >> 2)
'0b10110'
>>>137 << 3
1096
>>>bin(137 << 3)
'0b10001001000'
```
## 6. Операции при работе с последовательностями (строками, списками, кортежами).
### 6.1. Объединение последовательностей (конкатенация)(+)
```
>>>'Система '+'регулирования' #Соединение двух строк символов
'Система+ регулирования'
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2. Повторение (*)
```
>>>'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>>['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>>('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
```
Создание списка со 100 отсчетами сигнала-ступеньки:
```
>>>signal1=[0]*3+[1]*99
>>>signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
```
Создание кортежа с отсчетами сигнала – импульса:
```
>>>signal2=(0,)*3+(1,)*5+(0,)*7
>>>signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
### 6.3. Проверка наличия заданного элемента в последовательности (in)
```
>>>stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
True
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
### 6.4. Подстановка значений в строку с помощью оператора «%»
```
>>>stroka='Температура = %g %s %g'
'Температура = %g %s %g'
>>>stroka % (16,' меньше ',25)
'Температура = %g %s %g'
```
Вставка с использованием данных из словаря.
```
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
### 7.1. Обычное присваивание значения переменной (=)
```
>>>zz=-12
>>>zz
-12
```
### 7.2. Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```
>>>zz+=5 # Значение zz увеличивается на 5
>>>zz
-7
>>>zz-=3 # Значение уменьшается на 3
>>>zz
-10
```
Для последовательностей операция (+=) означает конкатенацию текущего значения объекта с заданным дополнением.
```
>>>stroka = 'Система'
>>>stroka
'Система'
>>>stroka += ' регулирования'
>>>stroka
'Система регулирования'
```
### 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```
>>>zz /= 2
>>>zz
-5.0
>>>zz*= 5
>>>zz
-25.0
>>>per = 2
>>>per*=10
>>>per
20
```
### 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=).
```
>>>zz //= 2
>>>zz
-13.0
>>>zz %= -2
>>>zz
-1.0
>>>per **= 4
>>>per
160000
```
### 7.5. Множественное присваивание
w=v=10 # Переменным присваивается одно и то же значение
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
Самостоятельно проверьте, можно ли вместо кортежа справа использовать строку, список, словарь, множество?
1) Присваивание одного значения двум переменным
```
>>>w = v =10
>>>w, v
(10, 10)
```
2) Присваивание кортежем
```
n1, n2, n3 = (11, -3, 'all')
n1, n2, n3
(11, -3, 'all')
```
3) Присваивание строкой
```
>>>a1, a2, a3 = 'red', 'black' , 'blue'
>>>a1, a2, a3
('red', 'black', 'blue')
```
4) Присваивание списком
```
>>>b1, b2, b3 = ["s", 67, None]
>>>b1, b2, b3
('s', 67, None)
>>>b3
>>>type(b3)
<class 'NoneType'>
```
5) Присваивание словарем
```
>>>c1, c2, c3 = {"one": 1, "two": 2, "three": 3}
>>>c1, c2, c3
('one', 'two', 'three')
```
По умолчанию в словарях итерируются именно ключи. Если нужно задать значения, надо
указать дополнительно ".value":
```
>>>c1, c2, c3 = {"one": 1, "two": 2, "three": 3}.values()
>>>c1, c2, c3
(1, 2, 3)
```
Если в каждую переменную надо положить именно и ключ, и значение одновременно, можно
использовать метод .items(), который каждую пару(ключ-значение) распределяет в отдельный
кортеж
```
>>>d1, d2, d3 = {"one": 1, "two": 2, "three": 3}.items()
>>>d1
('one', 1)
>>>d2
('two', 2)
>>>d3
('three', 3)
```
6) Присваивание множеством
```
>>>m1, m2, m3 = {100, 23, 59}
>>>m1, m2, m3
(59, 100, 23)
```
## 8. Логические операции
### 8.1. Операции сравнение: равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=)
```
>>>w == v
True
>>>w != v
False
>>>w < v
False
>>>w > v
False
>>>w >= v
True
```
Другие примеры:
```
>>>0 == False
True
>>>0 == True
False
>>>100 != 1000
True
>>>1200 > 100
True
>>>1200 < 1000
False
>>>1200 >= 1000
True
```
### 8.2. Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
Операции с множеством
```
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
>>>'book' in mnoz1
True
>>>'cap' in mnoz1
False
```
Операции со словарем
```
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>>'Vologda' in dic1
True
>>>'Pskov' in dic1
False
>>>56 in dic1.values()
True
```
Ещё пример работы со словарем:
```
>>>dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>>dct1
{'Institut': ['AVTI', 'IEE', 'IBB'], 'Depart': ['UII', 'PM', 'VMSS', 'MM'], 'gruppa': ['A-01-15', 'A-02-15']}
>>>'UII' in dct1['Depart']
True
>>>dct1['Depart'][1] == 'MM'
False
```
### 8.3. Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
```
>>>a=17
>>>b=-6
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
```
Собственные примеры:
```
>>>((145) in dic1.values()) and not ('Rostov' in dic1)
True
>>>not(len(dic1) == 3) or (sum(dic1.values()) > 300) or ('ITAE' in dct1['Depart'])
False
```
### 8.4. Проверка ссылок переменных на один и тот же объект (is).
w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
```
>>>w is v
True
>>>w1 = ['A', 'B']
>>>v1 = ['A', 'B']
>>>w1 is v1
```
Но при этом:
```
False
>>>w1 == v1
True
```
Основная разница "==" и "is":
- is проверяет, являются ли две переменные ссылками на один и тот же объект в памяти
- == проверяет, равны ли значения объектов (содержимое одинаковое)
Переменные целочисленного типа были созданы в одну строку и имеют один и тот же адрес в памяти. `Словари были созданы в разных строках, и адреса разные, т.е. они ссылаются на разные участки в памяти, поэтому is возвращает False.
## 9. Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например,
```
>>>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. Методы для работы со строками.
```
>>>stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
>>>stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
>>>stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>>spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
>>>spis22
['Микропроцессорная', 'система', 'управления']
>>>stroka.upper() #Возвращает строку со всеми заглавными буквами
>>>stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>>stroka3
'Микропроцессорная система управления'
>>>stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>>stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
```
Изучим метод format.
```
>>>strk1 = 'Момент времени {}, значение = {}'
>>>strk1
'Момент времени {}, значение = {}'
>>>strk1.format(1, 89.7)
'Момент времени 1, значение = 89.7'
```
Можно указать порядок:
```
>>>strk2='Момент времени {1}, значение = {0}:{2}'
>>>strk2
'Момент времени {1}, значение = {0}:{2}'
>>>strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
```
Порядок подстановки: сначала подставляется второй аргумент, потом первый и затем третий
Теперь зададим следующую строку:
```
>>>strk3='Момент времени {num}, значение = {znch}'
>>>strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
В этом варианте порядок аргументов не обязательно соответствует порядку вставок в строке.
### 9.2. Методы для работы со списками.
Создайте произвольный список spsk, не менее чем с 5 элементами. Отобразите его атрибуты.
Последовательно обратитесь к методам этого списка с отображением каждый раз полученного списка:
```
spsk = ["blue", 163, (1, 2), "green", 78.69] #Создаем список
spsk.pop(2) #Удаляем второй элемент из списка
(1, 2) #Удаленный элемент
spsk
['blue', 163, 'green', 78.69]
spsk.append('c') #Добавляем элемент в список, по умолчанию добавляется в конец
spsk
['blue', 163, 'green', 78.69, 'c']
spsk.insert(2, 'a') #Добавление элемента в список с индексом два
spsk
['blue', 163, 'a', 'green', 78.69, 'c']
spsk.count('a') #Подсчет элементов 'a' в списке
1
```
### 9.3. Создание кортежа и изучение создания его методов.
```
>>>cort = ('abc', 52.3, 'a', 167, 3 + 2j)
>>>dir(cort)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>>cort.count('a')
1
>>>cort.index(3+2j)
4
```
Благодаря функции dir видим, что кортеж имеет меньше атрибутов чем список.
### 9.4. Методы словарей и множеств.
- Методы словарей
Возьмем уже ранее использованный словарь dic1
```
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
>>>dic1.keys() # Возвращение объектов, состоящих только из ключей.
>>>dict_keys(['Saratov', 'Orel', 'Vologda'])
>>dir(dic1)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>>dic1.items() #Возвращение кортежей из пар ключ-значение
>>>dict_items([('Saratov', 145), ('Orel', 56), ('Vologda', 45)])
>>>dic1.get("Saratov") #Возвращение значения по ключу
145
>>>dic1.values() #Возвращение объекта только из значений
>>>dict_values([145, 56, 45])
>>>dic1["key4"] = 49 #Вызов значения по ключу
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'key4': 49}
>>>dic1_k = dic1.keys() #Создание отдельного объекта, чтобы положить в него dict_keys
>>>dic1_k
>>>dict_keys(['Saratov', 'Orel', 'Vologda', 'key4'])
>>>dic1.popitem() #Удаление последнего добавленного элемента
('key4', 49)
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
>>>dic1_k
>>>dict_keys(['Saratov', 'Orel', 'Vologda'])
>>>dic1.pop("Orel") #Удаление ключа и возвращение значения
56
```
- Методы множеств
```
>>>mn = {1, "per", 35.8, "red", True, 153} #Создаем множество
>>>mn
{1, 35.8, 'per', 153, 'red'}
>>>dir(mn)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>>mn.add(6+3j) #Добавление элемента в конец множества
>>>mn
{1, 35.8, 'per', 153, 'red', (6+3j)}
>>>mn.remove(1) #Удаление элемента по значению
>>>mn
{35.8, 'per', 153, 'red', (6+3j)}
>>>mn.discard("red") #Удаление элемента по значению с возвратом None при отсутствии
>>>mn
{35.8, 'per', 153, (6+3j)}
{35.8, 'per', 153, (6+3j)}
>>>print(mn.discard(1000))
None
>>>mn.pop() #Удаление и возвращение случайного элемента из множества
35.8
>>>mn
{'per', 153, (6+3j)}
>>>mn.update({63, "klumba"}) #Добавление элементов
>>>mn
{'klumba', 'per', 153, 63, (6+3j)}
```
## 10. Сохранение созданного текстового файла протокола в своем рабочем каталоге. Завершение сеанса работы с IDLE.

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

@ -0,0 +1,47 @@
# Индивидуальное контрольное задание
## Задание
1) Для чего предназначено предложение "Окно (Window)" главного меню?
2) Создайте объект-кортеж с 5 произвольными двоичными элементами. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Напишите инструкцию создания нового кортежа, в который включите два последних элемента ранее созданного кортежа, и два элемента - символы "a" и "b". Отобразите созданный объект на экране.
4) Преобразуйте кортеж в список. Вставьте в качестве второго элемента списка значение "Автоматизированная система". Отобразите полученный объект. Напишите инструкцию, создающую символьную строку со значением, равным символам из вставленного элемента, начиная с 19-го.
5) Напишите инструкции, обеспечивающие подсчет суммы числовых элементов кортежа. С использованием формата отобразите результат по шаблону: "Сумма элементов=:".
## Решение
1) "Окно (Window)" предназначено для переключений между файлами(окнами)
2)-5)
```
>>>bin_tup = (0b1010, 0b1100, 0b1111, 0b1001, 0b1011)
>>>bin_tup
(10, 12, 15, 9, 11)
>>>type(bin_tup)
<class 'tuple'>
>>>dir(bin_tup)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>>new_tup = bin_tup[-2:] + ('a', 'b')
>>>new_tup
(9, 11, 'a', 'b')
>>>new_tup_l = list(new_tup)
>>>new_tup_l
[9, 11, 'a', 'b']
>>>dir(new_tup_l)
['__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']
>>>new_tup_l.insert(1, "Автоматизированная система")
>>>new_tup_l
[9, 'Автоматизированная система', 11, 'a', 'b']
>>>ins_el = new_tup_l[1]
>>>ins_el
'Автоматизированная система'
>>>substr = ins_el[18:]
>>>substr
' система'
>>>sum_el = sum(bin_tup)
>>>print("Сумма элементов=:", sum_el)
Сумма элементов=: 57
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,779 @@
# Отчет по теме 4
## 1. Запуск интерактивной оболочки IDLE
## 2. Стандартные функции
### 2.1. Функция round – округление числа с заданной точностью
```
>>>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
>>>type(round(123.456,1))
<class 'float'>
>>>round(123.456,0)
123.0
>>>type(round(123.456,0))
<class 'float'>
>>>round(123.456)
123
>>>type(round(123.456))
<class 'int'>
```
Таким образом, если ndigits не указан, функция возвращает округленное целое число.
Если указан, пускай даже ноль, то число будет с плавающей точкой.
- round использует банковское округление. Это значит, что eсли округляемое число
равноудалено от соседних чисел, то оно округляется до ближайшей чётной цифры
заданного десятичного разряда.
### 2.2. Функция range – создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1.
```
>>>help(range)
Help on class range in module builtins:
class range(object)
| range(stop) -> range object
| range(start, stop[, step]) -> range object
|
| Return an object that produces a sequence of integers from start (inclusive)
| to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.
| start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.
| These are exactly the valid indices for a list of 4 elements.
| When step is given, it specifies the increment (or decrement).
|
| Methods defined here:
|
| __bool__(self, /)
| True if self else False
|
| __contains__(self, key, /)
| Return key in self.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __getitem__(self, key, /)
| Return self[key].
|
| __gt__(self, value, /)
| Return self>value.
|
| __hash__(self, /)
| Return hash(self).
|
| __iter__(self, /)
| Implement iter(self).
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __reduce__(...)
| Helper for pickle.
|
| __repr__(self, /)
| Return repr(self).
|
| __reversed__(...)
| Return a reverse iterator.
|
| count(...)
| rangeobject.count(value) -> integer -- return number of occurrences of value
|
| index(...)
| rangeobject.index(value) -> integer -- return index of value.
| Raise ValueError if the value is not present.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| start
|
| step
|
| stop
>>>gg = range(76, 123, 9)
>>>list(gg)
[76, 85, 94, 103, 112, 121]
>>>range(23)
range(0, 23)
>>>type(range(23))
<class 'range'>
>>>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]
```
Объект range(23) будет содержать последовательность целых чисел, начиная с 0 и до 22 (так как 23 не включается). Чтобы это увидить, необходимо применить list(). range — это легковесный объект, который генерирует числа на лету, а не хранит их все в памяти, поэтому преобразование в list нужно только для просмотра. Границы диапазона: от 0 и до 23, проход с шагом 1 по умолчанию(Если вызываем просто range(23), выводится только начальное и конечное значение).
### 2.3. Функция zip - создание итерируемого объекта из кортежей
```
>>>qq = ["Melnikov", "Baranov", "Podolskiy", "Bushmanov"]
>>>ff = zip(gg, qq)
>>>ff
<zip object at 0x0000021278293500>
>>>tuple(ff)
((76, 'Melnikov'), (85, 'Baranov'), (94, 'Podolskiy'), (103, 'Bushmanov'))
```
Длина получившегося объекта соответствует длине меньшего объекта-параметров(длина 4 значения).
```
>>>ff[1]
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
К объекту ff нельзя обратиться по индексу из-за того что он не итерируемый, так же он является не изменяемым.
### 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.
```
>>>fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=73
>>>fff
73.0
>>>dan
209.0
```
### 2.5. Функция exec – чтение и выполнение объекта-аргумента функции.
```
>>>exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>>gg
221.456
```
- Примечание. Функции eval() и exec() нужно использовать с осторожностью, так как они затрудняют чтение и понимание программОтличие eval() от exec() в том, что eval() вычисляет выражение (expression), а exec() выполняет инструкции (statements). Выражения — подмножество инструкций, отличающееся наличием результата. Например, 1, 1+2, a+3 — выражения, а присваивание или условный оператор — инструкции.
### 2.6. Функции abs, pow, max, min, sum, divmod, len, map.
- Функция abs(возвращение модуля):
```
>>>x = abs(-10)
>>>x
10
```
- Функция pow(возведение в степень)
```
>>>pow(2, 10)
1024
>>>pow(4,5,10) # 4**5 = 1024, затем 1024 % 10 = 4
4
```
- Функции max и min(выбор максимального и минимального значения соответственно)
```
>>>max(40, 50, 6)
50
>>>min(-3, 57, 30)
-3
```
- Функция sum(суммирование элементов)
```
>>>sum([1,2,3,4,5])
15
>>>sum([1,2,3,4,5], -5)
10
```
- Функция divmod(возвращение кортежа из целой части и остатка от деления)
```
>>>divmod(36, 5)
(7, 1)
```
- Функция len(длина списка)
```
>>>len([1,2,3,4,5,6])
6
```
- Функция map ( это встроенная функция Python, которая применяет заданную функцию к каждому элементу итерируемого объекта (списка, кортежа и т.д.) и возвращает итератор с результатами.)
```
>>>a = [10, 20, 30]
>>>a
[10, 20, 30]
>>>b = [30, 20, 10]
>>>b
[30, 20, 10]
>>>result = list(map(lambda x, y: x + y, a, b))
>>>result
[40, 40, 40]
```
## 3. Функции из стандартного модуля math – совокупность разнообразных математических функций.
```
>>>import math
>>>dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
help(math.factorial)
Help on built-in function factorial in module math:
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
>>>math.factorial(5)
120
```
Аналогичным образом изучим и попробуем применить некоторые другие функции из этого модуля: sin, acos, degrees, radians, exp, log, log10, sqrt, ceil, floor, pi.
- Функция sin
```
>>>help(math.sin)
Help on built-in function sin in module math:
sin(x, /)
Return the sine of x (measured in radians).
>>>math.sin(math.pi / 3)
0.8660254037844386
```
- Функция acos
```
>>>help(math.acos)
Help on built-in function acos in module math:
acos(x, /)
Return the arc cosine (measured in radians) of x.
The result is between 0 and pi.
>>>math.acos(1)
0.0
```
- Функция degrees
```
>>>help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
>>>math.degrees(math.pi / 2)
90.0
```
- Функция radians
```
>>>help(math.radians)
Help on built-in function radians in module math:
radians(x, /)
Convert angle x from degrees to radians.
>>>math.radians(360)
6.283185307179586
>>>math.radians(157)
2.7401669256310974
```
- Функция exp
```
>>>help(math.exp)
Help on built-in function exp in module math:
exp(x, /)
Return e raised to the power of x.
>>>math.exp(3)
20.085536923187668
>>>math.exp(5)
148.4131591025766
```
- Функция log
```
>>>help(math.log)
Help on built-in function log in module math:
log(...)
log(x, [base=math.e])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
>>>math.log(10)
2.302585092994046
>>>math.log(math.e)
1.0
```
- Функция log10
```
>>>help(math.log10)
Help on built-in function log10 in module math:
log10(x, /)
Return the base 10 logarithm of x.
>>>math.log10(10)
1.0
>>>math.log10(100)
2.0
>>>math.log10(105)
>>>2.0211892990699383
```
- Функция sqrt
```
>>>help(math.sqrt)
Help on built-in function sqrt in module math:
sqrt(x, /)
Return the square root of x.
>>>math.sqrt(16)
4.0
>>>math.sqrt(25)
5.0
```
- Функция ceil(округление в большую сторону)
```
help(math.ceil)
Help on built-in function ceil in module math:
ceil(x, /)
Return the ceiling of x as an Integral.
This is the smallest integer >= x.
>>>math.ceil(4.56)
5
>>>math.ceil(130.1)
131
```
- Функция floor(округление в меньшую сторону)
```
>>>help(math.floor)
Help on built-in function floor in module math:
floor(x, /)
Return the floor of x as an Integral.
This is the largest integer <= x.
>>>math.floor(99.999)
99
```
- Функция pi
```
>>>math.pi
3.141592653589793
```
## 4. Функции из модуля cmath – совокупность функций для работы с комплексными числами.
```
>>>import cmath
>>>dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>>cmath.sqrt(1.2-0.5j) # извлечения квадратного корня из комплексного числа
(1.118033988749895-0.22360679774997896j)
>>>cmath.phase(1-0.5j) # функция расчета фазы
-0.4636476090008061
```
## 5. Стандартный модуль random – совокупность функций для выполнения операций с псевдослучайными числами и выборками.
```
>>>import random
>>>dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_index', '_inst', '_isfinite', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>>help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>>random.seed()
```
Функция random.seed() инициализирует начальное состояние генератора псевдослучайных чисел.
- Функци random(равномерно распределенное случайное число от 0 до 1)
```
>>>help(random.random)
Help on built-in function random:
random() method of random.Random instance
random() -> x in the interval [0, 1).
>>>random.random()
0.15224090837130377
>>>random.random()
0.8451183120672832
>>>random.random()
0.8392090272295469
```
- Функция uniform (равномерно распределенное случайное число)
```
>>>help(random.uniform)
Help on method uniform in module random:
uniform(a, b) method of random.Random instance
Get a random number in the range [a, b) or [a, b] depending on rounding.
>>>random.uniform(1, 5)
1.4822447721210175
>>>random.uniform(1, 500)
11.101749613668387
```
- Функция gauss(нормально распределенное случайное число)
```
>>>help(random.gauss)
Help on method gauss in module random:
gauss(mu, sigma) method of random.Random instance
Gaussian distribution.
mu is the mean, and sigma is the standard deviation. This is
slightly faster than the normalvariate() function.
Not thread-safe without a lock around calls.
>>>random.gauss(1, 5)
5.705708773458442
>>>random.gauss(12, 57)
-14.33510203993609
```
- Функция randint(случайные целые числа)
```
>>>help(random.randint)
Help on method randint in module random:
randint(a, b) method of random.Random instance
Return random integer in range [a, b], including both end points.
>>>random.randint(3, 19)
4
>>>random.randint(3, 19)
5
```
- Функция choice (случайный выбор из совокупности)
```
>>>help(random.choice)
Help on method choice in module random:
choice(seq) method of random.Random instance
Choose a random element from a non-empty sequence.
>>>random.choice([True, "ababba", 35, 90.3, 3+5j])
90.3
>>>random.choice([True, "ababba", 35, 90.3, 3+5j])
(3+5j)
```
- Функця shuffle (случайная перестановка элементов списка)
```
>>>help(random.shuffle)
Help on method shuffle in module random:
shuffle(x, random=None) method of random.Random instance
Shuffle list x in place, and return None.
Optional argument random is a 0-argument function returning a
random float in [0.0, 1.0); if it is the default None, the
standard random.random will be used.
>>>lst = [True, "ababba", 35, 90.3, 3+5j]
>>>random.shuffle(lst)
>>>lst
[35, 'ababba', 90.3, (3+5j), True]
```
- Функция sample (случайный выбор подмножества элементов)
```
>>>help(random.sample)
Help on method sample in module random:
sample(population, k, *, counts=None) method of random.Random instance
Chooses k unique random elements from a population sequence or set.
Returns a new list containing elements from the population while
leaving the original population unchanged. The resulting list is
in selection order so that all sub-slices will also be valid random
samples. This allows raffle winners (the sample) to be partitioned
into grand prize and second place winners (the subslices).
Members of the population need not be hashable or unique. If the
population contains repeats, then each occurrence is a possible
selection in the sample.
Repeated elements can be specified one at a time or with the optional
counts parameter. For example:
sample(['red', 'blue'], counts=[4, 2], k=5)
is equivalent to:
sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
To choose a sample from a range of integers, use range() for the
population argument. This is especially fast and space efficient
for sampling from a large population:
sample(range(10000000), 60)
>>>random.sample(lst, 5)
['ababba', 90.3, True, (3+5j), 35]
>>>random.sample(lst, 1)
['ababba']
```
- Функция betavariate(случайное число с бета-распределением)
```
>>>help(random.betavariate)
Help on method betavariate in module random:
betavariate(alpha, beta) method of random.Random instance
Beta distribution.
Conditions on the parameters are alpha > 0 and beta > 0.
Returned values range between 0 and 1.
>>>random.betavariate(1, 2)
0.3174347054415454
>>>random.betavariate(1, 2)
0.17833765040946833
```
- Функция gammavariate(случайное число с гамма-распределением)
```
>>>help(random.gammavariate)
Help on method gammavariate in module random:
gammavariate(alpha, beta) method of random.Random instance
Gamma distribution. Not the gamma function!
Conditions on the parameters are alpha > 0 and beta > 0.
The probability distribution function is:
x ** (alpha - 1) * math.exp(-x / beta)
pdf(x) = --------------------------------------
math.gamma(alpha) * beta ** alpha
>>>random.gammavariate(2, 5)
18.174658510394487
>>>random.gammavariate(2, 5)
29.01757536081825
```
- Создание списка с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
```
>>>ls_r = [0] * 4
>>>ls_r[0] = random.uniform(0, 5)
>>>ls_r[1] = random.gauss(0, 2)
>>>ls_r[2] = random.betavariate(1, 3)
>>>ls_r[3] = random.gammavariate(3, 2)
>>>ls_r
[3.940448252721481, -0.9946853417283795, 0.04299068887668711, 8.97265061419367]
```
## 6. Функции из модуля time – работа с календарем и со временем.
- UNIX время и текущее время
```
>>>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
1759739386.6377628
>>>c2=time.time()-c1 # временной интервал в секундах, со времени ввода предыдущей инструкции
>>>c2
26.08662247657776
>>>dat = time.gmtime() # Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC)
>>>dat.tm_mon # получение номера месяца
10
>>>dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=6, tm_hour=8, tm_min=57, tm_sec=30, tm_wday=0, tm_yday=279, tm_isdst=0)
```
- Текущее время с учетом часового пояса
```
>>>mestn = time.localtime()
>>>list(mestn)
[2025, 10, 6, 12, 18, 35, 0, 279, 0]
```
- Функция asctime (преобразование представления времени из кортежа в строку)
```
>>>time.asctime(mestn)
'Mon Oct 6 12:18:35 2025'
```
- Функция ctime (преобразование времени в секундах, прошедшего с начала эпохи, в строку)
```
>>>time.ctime()
'Mon Oct 6 12:22:01 2025'
```
- Функция sleep (прерывание работы программы на заданное время)
```
>>>time.sleep(5)
```
- Функция mktime (преобразование времени из типа кортежа или struct_time в число секунд с начала эпохи)
```
>>>time.mktime(mestn)
1759742315.0
```
- Обратное преобразование из секунд в местное время
```
>>>time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=6, tm_hour=11, tm_min=29, tm_sec=46, tm_wday=0, tm_yday=279, tm_isdst=0)
```
## 7. Графические функции
Импортируем модули mathplotlib и pylab для построения графика.
-Создание и отображение графика x(t):
```
>>>import matplotlib
>>>import pylab
>>>x=list(range(-3,55,4))
>>>t=list(range(15))
>>>pylab.plot(t,x) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x0000021222D40400>]
>>>pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>>pylab.xlabel('время')
Text(0.5, 0, 'время')
>>>pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>>pylab.show() #Отображение графика на экране
```
![График](figure0.png)
- Рассмотрим способ построения нескольких графиков на одном рисунке.
```
>>>X1 = [12, 6, 8, 10, 7]
>>>X2 = [5, 7, 9, 11, 13]
>>>pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000021222DF35B0>]
>>>pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000021222DF38B0>]
>>>pylab.show()
```
![График](figure1.png)
- Теперь изучим возможность построения круговой диаграммы.
```
>>>region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>>naselen=[65,12,23,17] # Значения для диаграммы
>>>pylab.pie(naselen, labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x0000021225094EB0>, <matplotlib.patches.Wedge object at 0x0000021225094DF0>, <matplotlib.patches.Wedge object at 0x0000021225095900>, <matplotlib.patches.Wedge object at 0x0000021225095E70>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>>pylab.show() #Отображение диаграммы
```
![График](figure2.png)
- Построение гистограммы
```
>>>pylab.show()
>>>data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
>>>pylab.hist(data)
(array([1., 0., 2., 0., 0., 3., 0., 2., 0., 1.]), array([1. , 1.4, 1.8, 2.2, 2.6, 3. , 3.4, 3.8, 4.2, 4.6, 5. ]), <BarContainer object of 10 artists>)
>>>pylab.title('Простая гистограмма')
Text(0.5, 1.0, 'Простая гистограмма')
>>>pylab.xlabel('Значения')
Text(0.5, 0, 'Значения')
>>>pylab.ylabel('Частота')
Text(0, 0.5, 'Частота')
>>>pylab.show()
```
![График](figure3.png)
- Построение столбиковой диаграммы
```
>>>fruits = ["apple", "date", "apricot", "raspberry", "watermelon"]
>>>values = [13, 16, 8, 25, 6]
>>>pylab.bar(fruits, values, color='green')
<BarContainer object of 5 artists>
>>>pylab.show()
```
![График](figure4.png)
Все графики, диаграммы и гистограммы сохранены в папку в формате "jpg".
## 8. Статистический модуль statistics
```
>>>data = [10, 20, 30, 40, 50]
>>>statistics.mean(data) # Нахождение математического ожидания
30
>>>statistics.median(data) # Нахождение медианы
30
>>>statistics.stdev(data) # Нахождение среднеквадратичного отклонения
15.811388300841896
>>>statistics.variance(data) # Нахождение дисперсии
250
>>>statistics.mode(data) # Нахождение моды
10
```
## 9. Завершение работы

@ -0,0 +1,42 @@
# Общее контрольное задание по теме 4
## Задание:
- Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
- Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
- Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
- Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
- Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
- Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение:
```
>>>import cmath
>>>divmod((round(cmath.phase(0.2 + 0.8j), 2) * 20), 3)
(8.0, 2.6000000000000014)
>>>import time
>>>msc_t = time.localtime()
>>>msc_t
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=9, tm_hour=21, tm_min=30, tm_sec=24, tm_wday=3, tm_yday=282, tm_isdst=0)
>>>nows = str(msc_t.tm_hour) + " " + str(msc_t.tm_min)
>>>nows
'21 30'
>>>import random
>>>lst = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
>>>random.sample(lst, 3)
['четверг', 'вторник', 'понедельник']
>>>random.choice(range(14, 33, 3))
14
>>>random.choice(range(14, 33, 3))
26
N = round(random.gauss(15,4))
N
18
>>>spis = list("agfhyjtioenvbxmflk")
>>>spis
['a', 'g', 'f', 'h', 'y', 'j', 't', 'i', 'o', 'e', 'n', 'v', 'b', 'x', 'm', 'f', 'l', 'k']
>>>random.sample(spis, N)
['o', 'a', 'x', 'f', 'e', 'l', 'b', 'n', 'm', 'v', 'h', 't', 'g', 'k', 'i', 'j', 'y', 'f']
>>>(time.mktime(time.localtime()) - time.mktime(msc_t)) / 60
6.383333333333334
```

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

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

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

После

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

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

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

После

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

@ -0,0 +1,377 @@
# Отчет по теме 5
## 1. Запуск интерактивной оболочки IDLE.
## 2. Ветвление по условию – управляющая инструкция if.
- Операции определения значения dohod:
```
>>>porog = 5
>>>rashod1 = 8
>>>rashod2 = 6
>>>if rashod1 >= porog:
dohod = 12
if rashod1 >= porog:
dohod = 12
elif rashod2 == porog:
dohod = 0
else:
dohod = 8
>>>print(dohod)
# Выполним операцию для двух случаев
>>>rashod2 = 4
>>>if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
>>>print(dohod)
8 # Выполнилось одно условие
>>>porog = 4
>>>if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
>>>print(dohod)
4 # Выполнились оба условия
```
- Операция с множественным ветвлением линий потока:
```
>>>if porog == 3: # Не подходит
dohod = 1
elif porog == 4: # Подходит
dohod = 2
elif porog == 5: # Игнорируется
dohod = 3
else: # Игнорируется
dohod = 0
>>>print(dohod)
2
```
- Инструкции, записывающиеся в одну строку в операторе присваивания.
<Объект>=<значение 1> if <условие> else <значение 2>
```
>>>dohod = 2 if porog >- 4 else 0
>>>print(dohod)
2
>>>if porog >= 5: rashod1 = 6; rashod2 = 0 # porog = 4
>>>print(rashod1)
8
>>>print(rashod2)
4
>>>porog = 6
>>>if porog >= 5: rashod1 = 6; rashod2 = 0
>>>print(rashod1)
6
>>>print(rashod2)
0
```
## 3. Цикл по перечислению – управляющая инструкция for.
Общее правило написания:
for <Объект-переменная цикла> in <объект>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
< отступы ><Блок инструкций 2 – если в цикле не сработал break>]
### 3.1. Простой цикл.
Выполняем цикл, который проходится по значениям от 3 до 18(не включительно) с шагом 3 и суммирует их в переменную temperatura.
```
>>>temperatura = 5
>>>for i in range(3, 18, 3):
temperatura += i
>>>temperatura
50
```
### 3.2. Более сложный цикл.
```
>>>sps = [2, 15, 14, 18]
>>>for k in sps:
if len(sps) <= 10: sps.append(sps[0])
else: break
>>>sps
[2, 15, 14, 18, 2, 2, 2, 2, 2, 2, 2]
```
Как видно, в конец цикла добавляется двойка до тех пор, пока длина не превысит 10. Важно
понимать, что sps - это и объект, по которому проходит k, и объект, изменяющийся
внутри цикла. То есть k будет двигаться по циклу бесконечно, и выполнение останавливается
именно из-за условия if - else.
(При этом else в данном случае относится к if, а не к for (это можно понять не только по
смыслу, но и по табуляции)
```
>>>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. : Cоздание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.
```
>>>import random as rn
>>>sps5 = []
>>>for i in range(10):
sps5.append(rn.randint(1, 100))
ss = sum(sps5)
if ss > 500: break
else:
print(ss)
# Программа ничего не вывела
>>>ss
512
>>>sps5
[47, 92, 92, 54, 52, 78, 67, 30]
```
После того, как прошло девять итераций, сумма элементов списка уже была больше 500, поэтому
цикл закончился из-за if, а не из-за окончания диапазона range(10).
Попробуем обнулить список и выполнить ту же программу еще раз:
```
>>>sps5 = []
>>>for i in range(10):
sps5.append(rn.randint(1, 100))
ss = sum(sps5)
if ss > 500: break
else:
print(ss)
419
```
В этот раз программа вывела ответ, следовательно сработал else и break не сработал.
### 3.4. Пример с символьной строкой
```
>>>stroka='Это – автоматизированная система'
>>>stroka1 = " "
>>>for ss in stroka:
stroka1 += " " + ss
>>>print(stroka1)
Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а
```
Переменная stroka содержит исходную строку: "Это – автоматизированная система".
Переменная stroka1 инициализируется как пустая строка.
В цикле for происходит перебор каждого символа ss из строки stroka.
На каждой итерации к stroka1 добавляется пробел и текущий символ ss.
После обработки всех символов в stroka1 формируется новая строка, где каждый символ исходной строки разделён пробелом.
### 3.5. Конструкция list comprehension.
Пример: создание списка с синусоидальным сигналом.(Внутри квадратных скобок записано выражение-генератор)
```
>>>import math
>>>sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)]
>>>sps2
[0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965]
>>>import pylab
>>>pylab.plot(sps2, label = 'Синусоидальный сигнал', color = 'red')
[<matplotlib.lines.Line2D object at 0x000001A6371A2CE0>]
>>>pylab.show()
```
![График](figure0.png)
## 4. Цикл «пока истинно условие» – управляющая инструкция while.
Общее правило написания:
while <Условие>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
<отступы><Блок инструкций 2 – если в цикле не сработал break>]
### 4.1. Цикл со счетчиком.
```
>>>rashod = 300
>>>while rashod:
print("Расход=", rashod)
rashod -= 50
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```
Цикл завершился из-за того, что расход стал равен 0, а 0 в свою очередь воспринимается как False.
### 4.2. Пример с символьной строкой.
```
>>>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
>>>pylab.plot(sps2, label = 'Сигнал на выходе инерционного звена', color = 'red')
[<matplotlib.lines.Line2D object at 0x000001A6372762F0>]
>>>pylab.show()
```
![График](figure1.png)
### 4.3. Определение, является ли число простым (делится только на самого себя или 1).
```
>>>chislo=267 #Проверяемое число
>>>kandidat =chislo // 2 # Для значений chislo > 1
>>>while kandidat > 1:
if chislo%kandidat == 0: # Остаток от деления
print(chislo, ' имеет множитель ', kandidat)
break # else выполняться не будет
kandidat -= 1
>>>else: # При завершении цикла без break
print(chislo, ' является простым!')
267 имеет множитель 89
```
Программа работает так: переменная kandidat отвечает за потенциальный делитель заданного
числа. Изначально мы задаем половину от заданного числа, потому что у числа не может быть
делителя большего, чем половина от него. Далее мы последовательно уменьшаем потенциальный
множитель, каждый раз проверяя, получилось ли поделить без остатка. Если получилось, то
число непростое, и цикл можно прекращать досрочно. Если цикл отработал до конца, не
прервавшись, то число простое.
Дополним программу так, чтобы выявить все простые числа в диапазоне от 250 до 300.
```
>>>for i in range(250, 301):
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
```
Здесь просто добавляется for для перебора значений.
### 4.4. Инструкция continue
Инструкция continue, которая не вызывает завершения цикла, но завершает его текущий виток и обеспечивает переход к следующему витку.
```
>>>x = [rn.randint(-25, 40) for i in range (20)]
>>>x
[35, 21, -14, 21, -15, 1, -9, -7, -15, 2, 32, 11, 38, 32, -13, -21, 31, -10, -20, 15]
>>>for y in x:
if y < 0: continue
print(y, ">0")
else: print("stop")
35 >0
21 >0
21 >0
1 >0
2 >0
32 >0
11 >0
38 >0
32 >0
31 >0
15 >0
stop
```
## 5. Завершение сеанса в среде IDLE
Загрузка…
Отмена
Сохранить