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

...

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

Автор SHA1 Сообщение Дата
no name 09e65158e8 Merge branch 'main' of http://uit.mpei.ru/git/ZhalninVY/python-labs
5 дней назад
no name a1e89bc5e0 выполнение ИКЗ
5 дней назад
ZhalninVY 98a6412095 правка ошибок и опечаток
5 дней назад
ZhalninVY e127606f2a Изменил(а) на 'TEMA3/test.md'
1 неделю назад
no name 9a86ed855c Merge branch 'main' of http://uit.mpei.ru/git/ZhalninVY/python-labs
1 неделю назад
no name d4956c685a выполненный тест по модулю 3
1 неделю назад
ZhalninVY f81568cdea Изменил(а) на 'TEMA3/task.md'
1 неделю назад
ZhalninVY dbe80d5783 правка ошибки в команде
1 неделю назад
name surname 2d77df9dee выполненное ОКЗ
1 неделю назад
name surname 5445580ca2 отчёт+скриншоты
1 неделю назад
name surname b47b244dc2 выполненное ОКЗ
1 неделю назад
name surname c398df77b9 файл отчёта
1 неделю назад
ZhalninVY 8fc75fc606 фикс
1 месяц назад
Пользователь № 9 аудитории Ж-115 6b2b85197e икз
1 месяц назад
Пользователь № 9 аудитории Ж-115 2c2237dc41 исправление ошибок
1 месяц назад
Пользователь № 9 аудитории Ж-115 9ee1b8ede4 контрольный вопрос
1 месяц назад
Пользователь № 9 аудитории Ж-115 0c9d275742 готовый отчёт
1 месяц назад
Пользователь № 9 аудитории Ж-115 7eca68205f исправление ошибки
1 месяц назад
ZhalninVY 29afcc1b0e общее контрольное задание
1 месяц назад
ZhalninVY 341d5428ee отчёт по работе
1 месяц назад
ZhalninVY a465a3ab9d удаление лишнего тестового файла
1 месяц назад
ZhalninVY 3bd2cb026b предварительный отчёт и изображения
1 месяц назад
ZhalninVY 0457007994 тест
1 месяц назад

@ -0,0 +1 @@
print('The code from txt has been successfully launched!')

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

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

После

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

@ -0,0 +1,191 @@
Жалнин Вадим А-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
os.chdir('C:\\Users\\twoth\\OneDrive\\Desktop\\python-labs\\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/twoth/OneDrive/Desktop/python-labs/TEMA1/Pr0.py ======================
Hello
Your name=
```
Закроем окно редактора.
Рассмотрим другой способ запуска программы на выполнение. Для этого в командном окне запустим программу на выполнение инструкцией
```
import Pr0
Hello
Your name=
```
Третий способ: при активном окне редактора с программой – нажмем функциональную клавишу F5.
```
======================= RESTART: C:/Users/twoth/OneDrive/Desktop/python-labs/TEMA1/Pr0.py ======================
Hello
Your name=
```
### 1.11. Запуск программы из рабочего каталога
Теперь запустим на выполнение программу, которая находится в рабочем каталоге в файле prb1.py. Для этого поставим в командном окне IDLE курсор на предыдущую инструкцию и нажмем клавишу Enter. Обычным редактированием заменим имя Pr0 на prb1 и затем нажмем Enter для запуска программы.
```
import prb1
Как Вас зовут? ZhalninVY
Привет, ZhalninVY
```
### 1.12. Изучение рабочего каталога
Используя в меню текстового редактора предложение «Открыть (Open)», изучим состав рабочего каталога. Обратим внимание на каталог __pycache__. Откроем этот каталог и попытаемся открыть в текстовом редакторе файл Pr0.cpython-34.pyc – результат работы компилятора среды. Объясним полученный результат.
![Нечитаемый текст](images/unreadable.png)
Мы получили нечитабельный текст программы. Т.к. .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\twoth\OneDrive\Desktop\python-labs\TEMA1\prb1.py ======================
Как Вас зовут? ZhalninVY
Привет, ZhalninVY
```
```
>>>import tdemo_chaos
```
Help - Turtle Demo - clock - Start выводит на экран графическое представление
программы - циферблат с часами. Данная программа рисует графики по заданным функциям, проходя через точки, которым задан определенный шаг в программе. Есть и другие примеры программ модуля turtle,которые можно брать за основу собственных программ, изменять или реализовывать свои идеи.
Оценка возможностей использования этих примеров при написании собственных программ:
Можно заимствовать фрагменты кода, изучать структуры программы, модифицировать код.
### 1.16. Завершение работы со средой. Для этого выберем предложения «Файл (File)» и «Выход (Exit)».

@ -0,0 +1,23 @@
Жалнин Вадим А-01-23
## ИКЗ по теме 1
### Вопрос 8
Как можно запустить на выполнение программу, исходный код которой находится в текстовом файле ABC.txt?
### Ответ
При помощи функции exec()
Способ запуска:
```python
with open ('C:\\Users\\u115-09\\Desktop\\python-labs\\TEMA1\\ABC.txt', 'r') as program:
exec(program.read())
```
Вывод:
```
=================== RESTART: C:/Users/u115-09/Desktop/test.py ==================
The code from txt has been successfully launched!
```

@ -0,0 +1,718 @@
# Отчет по теме 2
Жалнин Вадим А-01-23
## 1. Запуск оболочки IDLE и установка рабочего каталога
```
import os
os.chdir('C:\\Users\\twoth\\OneDrive\\Desktop\\python-labs\\TEMA1')
```
## 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 ZhalninVY'
>>>print(ss1b)
Меня зовут:
ZhalninVY
```
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например,
```
>>>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 = 30
>>>type(obj1)
<class 'int'>
>>>obj2 = hex(obj1)
>>>obj2
'0x1e'
>>>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.
Избежать изменения spis1 можно только создав копию copy (Создание копии списка)
Создание своего списка - объекта:
```
>>>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 ZhalninVY')
```
Теперь переопределим кортеж с удалением комплексного элемента:
```
>>>kort2 = kort1[:2] + kort1[3:]
>>>kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n ZhalninVY')
```
Два важных метода кортежа (они есть также и у списков):
• Определение индекса заданного элемента:
```
>>>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}
```
В более новых версиях Python словарь выводится непосредственно в той последовательности, в которой был задан.
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы 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 ZhalninVY'}
>>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>>dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n ZhalninVY'}
```
Создание объекта-кортежа с 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,41 @@
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
* Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
* Создать переменную со значением, совпадающим с первой буквой из familia.
* Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
* Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
* Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
* Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
* Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
* Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## Решение
```
>>>familia = 'Zhalnin'
>>>familia
'Zhalnin'
>>>f1 = familia[0]
>>>f1
'Z'
>>>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 = ("Vadim", "Fedor", "Nikita", "Artem")
>>>kort_nam
('Vadim', 'Fedor', 'Nikita', 'Artem')
>>>type(kort_nam)
<class 'tuple'>
>>>kort_nam += ("Dima", "Ilya")
>>>kort_nam
('Vadim', 'Fedor', 'Nikita', 'Artem', 'Dima', 'Ilya')
>>>kort_nam.count("Dima")
1
>>>dict_bas = {"строка" : familia, "символ" : f1, "список" : sp_kw, "кортеж" : kort_nam}
>>>dict_bas
{'строка': 'Zhalnin', 'символ': 'Z', 'список': ['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'], 'кортеж': ('Vadim', 'Fedor', 'Nikita', 'Artem', 'Dima', 'Ilya')}```

@ -0,0 +1,24 @@
Жалнин Вадим А-01-23
## ИКЗ по теме 2
### Задание 2
Пусть определен объект с помощью инструкции
b={}
Какого типа (класса) будет объект b? Подтвердите ответ в среде Python и определите список атрибутов этого объекта.
### Решение
Пустые фигурные скобки {} использовались для инициализации словаря, и лишь позже для инициализации структуры "множество", поэтому во избежание путаницы b={} является словарём. для инициализации списка необходимо использовать b=set()
Программное оформление:
```python
>>> b={}
>>> type(b)
>>> <class 'dict'>
>>> dir(b)
>>> ['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> b=set()
>>> type(b)
>>> <class 'set'>
```

@ -0,0 +1,875 @@
Жалнин Вадим А-01-23
## 1. Запуск IDLE
## 2. Преобразование простых базовых типов объектов.
### 2.1. Преобразование в логический тип с помощью функции bool(<Объект>).
Примеры использования:
```python
>>>logiz1 = bool(56)
>>>logiz1
True
>>>logiz2 = bool(0)
>>>logiz2
False
>>>logiz3 = bool("Beta")
>>>logiz3
True
>>>logiz4 = bool(" ")
>>>logiz4
True
```
### 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления. осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.
Примеры использования:
``` python
>>>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'
```
Как видно, выводится диагностическое сообщение. Строка "98.76" содержит десятичную точку, то есть это вещественное число в строковом формате.
int() не выполняет автоматическое отбрасывание дробной части для строк — это делается только если на вход подано вещественное число типа float, а не строка с точкой.
Исправить можно, преобразовав сначала строку в float, а затем в int:
```python
tt5 = int(float("98.76"))
```
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
Примеры преобразований:
```python
>>>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. Преобразование десятичных чисел в другие системы счисления:
```python
>>>hh=123
>>>hh
123
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
>>>dv1
'0b1111011'
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
>>>vos1
'0o173'
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
>>>shs1
'0x7b'
```
Выполним обратные преобразования объектов dv1, vos1, shs1:
```python
>>>int(dv1,2)
123
>>>int(vos1, 8)
123
>>>int(shs1, 16)
123
```
## 3. Преобразования более сложных базовых типов объектов.
### 3.1. Преобразование в строку символов с помощью функции str(<Объект>).
Примеры использования:
```python
>>>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(<Объект>).
Примеры преобразований:
```python
>>>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']
```
Инструкция, обеспечивающую создание из того же словаря списка с другими его частями:
```python
>>>spis4 = list({"A":1,"B":2,"C":9}.values())
>>>spis4
[1, 2, 9]
```
### 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
Примеры преобразований
```python
>>>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.
Пример:
```python
>>>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'?
```
Создание строки со своей фамилией и инициалами, преобразование её в список, затем список – в кортеж и, наконец, кортеж – в строку. .
```python
>>>fio = "Zhalnin VY"
>>>fio
"Zhalnin VY"
>>>fio_list = list(fio)
>>>fio_list
['Z', 'h', 'a', 'l', 'n', 'i', 'n', ' ', 'V', 'Y']
>>>fio_tuple = tuple(fio_list)
>>>fio_tuple
('Z', 'h', 'a', 'l', 'n', 'i', 'n', ' ', 'V', 'Y')
>>>fio_string = str(fio_tuple)
>>>fio_string
"('Z', 'h', 'a', 'l', 'n', 'i', 'n', ' ', 'V', 'Y')"
```
## 4. Арифметические операции.
### 4.1. Сложение и вычитание (+ и -)
```python
>>>12+7+90 # Сложение целых чисел
109
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>>23.6+54 #Сложение вещественного и целого чисел
77.6
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
```
### 4.2. Умножение (*)
```python
>>>-6.7*12 #Умножение вещественного числа на целое число
-80.4
```
### 4.3. Деление (/). (Результатом деления всегда будет вещественное число!)
```python
>>>-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
a
3.9555555555555557
type(a)
<class 'float'>
```
### 4.4. Деление с округлением вниз (//).
Здесь результат может быть целым или вещественным. В нижеследующих операциях определите тип результата.
```python
>>>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. Получение остатка от деления (%).
```python
>>>148 % 33 #Остаток от деления двух целых чисел
16
>>>12.6 % 3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
1.2000000000000002
>>>36 % 12
0
>>>36.98 % 23.56
>>>13.419999999999998
```
### 4.6. Возведение в степень (* *).
```python
>>>14**3
2744
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>>e
35.719843790663525
```
Попробуем проделать арифметические операции над комплексными числами. Создадим два
комплексных числа.
```python
>>>comp1 = (5 + 3j)
>>>comp1
(5+3j)
>>>type(comp1)
<class 'complex'>
>>>comp2 = (10 - 5j)
>>>comp2
(10-5j)
>>>type(comp2)
<class 'complex'>
```
Сложение:
```python
>>>comp1 + comp2
(15-2j)
```
Вычитание:
```python
>>>comp1 - comp2
(-5+8j)
```
Умножение:
```python
>>>comp1 * comp2
(65+5j)
```
Деление:
```python
>>>comp1 / comp2
(0.28+0.44j)
```
Целочисленное деление:
```python
>>>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'
```
Как видим, целочисленное деление нельзя применять к комплексным числам.
Взятие остатка от деления:
```python
>>>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'
```
Как видим, взятие остатка от деления нельзя применять к комплексным числам.
Возведение в степень:
```python
>>>comp1 ** comp2
(-652921189.7700557+180781145.7454619j)
>>>comp1**5
(-6100+2868j)
```
## 5. Операции с двоичными представлениями целых чисел.
### 5.1. Двоичная инверсия (~).
Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0).
```python
>>>dv1 = 9
>>>dv2 = ~dv1
>>>dv2
-10
>>>bin(dv1)
'0b1001'
>>>bin(dv2)
'-0b1010'
```
### 5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```python
>>>bin(7&9)
'0b1'
```
Совпадение единиц только в первом разряде, поэтому итог - 0001 или просто 1
```python
>>>bin(7&8)
'0b0'
```
Совпадений единиц нет, итог - 0000 или просто 0
### 5.3. Двоичное «ИЛИ» (|)
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```python
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.
```python
>>>bin(14^5) # 1110 исключающее или 0101 = 1011
'0b1011'
```
Значение в десятичном представление:
```python
>>>14^5
11
```
### 5.5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```python
>>>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. Двоичная инверсия
```python
>>>~89
-90
>>>bin(~89)
'-0b1011010'
```
2. Двоичное "И"
```python
>>>bin(89 & 137)
'0b1001'
```
3. Двоичное "ИЛИ"
```python
>>>bin(89 | 137)
'0b11011001'
```
4. Двоичное "исключающее ИЛИ"
```python
>>>bin(89^137)
'0b11010000'
```
5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```python
>>>89 >> 2
22
>>>bin(89 >> 2)
'0b10110'
>>>137 << 3
1096
>>>bin(137 << 3)
'0b10001001000'
```
## 6. Операции при работе с последовательностями (строками, списками, кортежами).
### 6.1. Объединение последовательностей (конкатенация)(+)
```python
>>>'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2. Повторение (*)
```python
>>>'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>>['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>>('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
```
Создание списка со 100 отсчетами сигнала-ступеньки:
```python
>>>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]
```
Создание кортежа с отсчетами сигнала – импульса:
```python
>>>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)
```python
>>>stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
True
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
### 6.4. Подстановка значений в строку с помощью оператора «%»
```python
>>>stroka='Температура = %g %s %g'
'Температура = %g %s %g'
>>>stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
Вставка с использованием данных из словаря.
```python
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
### 7.1. Обычное присваивание значения переменной (=)
```python
>>>zz=-12
>>>zz
-12
```
### 7.2. Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```python
>>>zz+=5 # Значение zz увеличивается на 5
>>>zz
-7
>>>zz-=3 # Значение уменьшается на 3
>>>zz
-10
```
Для последовательностей операция (+=) означает конкатенацию текущего значения объекта с заданным дополнением.
```python
>>>stroka = 'Система'
>>>stroka
'Система'
>>>stroka += ' регулирования'
>>>stroka
'Система регулирования'
```
### 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```python
>>>zz /= 2
>>>zz
-5.0
>>>zz*= 5
>>>zz
-25.0
>>>per = 2
>>>per*=10
>>>per
20
```
### 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=).
```python
>>>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) Присваивание одного значения двум переменным
```python
>>>w = v =10
>>>w, v
(10, 10)
```
2) Присваивание кортежем
```python
n1, n2, n3 = (11, -3, 'all')
n1, n2, n3
(11, -3, 'all')
```
3) Присваивание строкой
```python
>>>a1, a2, a3 = 'red', 'black' , 'blue'
>>>a1, a2, a3
('red', 'black', 'blue')
```
4) Присваивание списком
```python
>>>b1, b2, b3 = ["s", 67, None]
>>>b1, b2, b3
('s', 67, None)
>>>b3
>>>type(b3)
<class 'NoneType'>
```
5) Присваивание словарем
```python
>>>c1, c2, c3 = {"one": 1, "two": 2, "three": 3}
>>>c1, c2, c3
('one', 'two', 'three')
```
По умолчанию в словарях итерируются именно ключи. Если нужно задать значения, надо
указать дополнительно ".value":
```python
>>>c1, c2, c3 = {"one": 1, "two": 2, "three": 3}.values()
>>>c1, c2, c3
(1, 2, 3)
```
Если в каждую переменную надо положить именно и ключ, и значение одновременно, можно
использовать метод .items(), который каждую пару(ключ-значение) распределяет в отдельный
кортеж
```python
>>>d1, d2, d3 = {"one": 1, "two": 2, "three": 3}.items()
>>>d1
('one', 1)
>>>d2
('two', 2)
>>>d3
('three', 3)
```
6) Присваивание множеством
```python
>>>m1, m2, m3 = {100, 23, 59}
>>>m1, m2, m3
(59, 100, 23)
```
## 8. Логические операции
### 8.1. Операции сравнение: равенство (= =), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=)
```python
>>>w == v
True
>>>w != v
False
>>>w < v
False
>>>w > v
False
>>>w >= v
True
```
Другие примеры:
```python
>>>0 == False
True
>>>0 == True
False
>>>100 != 1000
True
>>>1200 > 100
True
>>>1200 < 1000
False
>>>1200 >= 1000
True
```
### 8.2. Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
Операции с множеством
```python
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
>>>'book' in mnoz1
True
>>>'cap' in mnoz1
False
```
Операции со словарем
```python
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>>'Vologda' in dic1
True
>>>'Pskov' in dic1
False
>>>56 in dic1.values()
True
```
Ещё пример работы со словарем:
```python
>>>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).
```python
>>>a=17
>>>b=-6
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
```
Собственные примеры:
```python
>>>((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 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
```python
>>>w is v
True
>>>w1 = ['A', 'B']
>>>v1 = ['A', 'B']
>>>w1 is v1
```
Но при этом:
``` python
False
>>>w1 == v1
True
```
Основная разница "= =" и "is":
- is проверяет, являются ли две переменные ссылками на один и тот же объект в памяти
- == проверяет, равны ли значения объектов (содержимое одинаковое)
Переменные целочисленного типа были созданы в одну строку и имеют один и тот же адрес в памяти. `Словари были созданы в разных строках, и адреса разные, т.е. они ссылаются на разные участки в памяти, поэтому is возвращает False.
## 9. Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например,
```python
>>>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. Методы для работы со строками.
``` python
>>>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.
```python
>>>strk1 = 'Момент времени {}, значение = {}'
>>>strk1
'Момент времени {}, значение = {}'
>>>strk1.format(1, 89.7)
'Момент времени 1, значение = 89.7'
```
Можно указать порядок:
```python
>>>strk2='Момент времени {1}, значение = {0}:{2}'
>>>strk2
'Момент времени {1}, значение = {0}:{2}'
>>>strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
```
Порядок подстановки: сначала подставляется второй аргумент, потом первый и затем третий
Теперь зададим следующую строку:
```python
>>>strk3='Момент времени {num}, значение = {znch}'
>>>strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
В этом варианте порядок аргументов не обязательно соответствует порядку вставок в строке.
### 9.2. Методы для работы со списками.
Создайте произвольный список spsk, не менее чем с 5 элементами. Отобразите его атрибуты.
Последовательно обратитесь к методам этого списка с отображением каждый раз полученного списка:
```python
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. Создание кортежа и изучение создания его методов.
```python
>>>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
```python
>>>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
```
- Методы множеств
```python
>>>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 @@
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
- Преобразовать восьмеричное значение 45 в целое число.
- Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
- Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
- Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
- Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
- Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
- Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
```python
>>>vosm = "45"
>>>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,80 @@
## Задание
1) Как установить рабочий (текущий) каталог в среде? Какую пользу можно получить от такой установки?
2) Напишите инструкции, обеспечивающие подсчет числа букв (без запятой, скобок и пробелов) в данном предложении. Отобразите результат с использованием формата по шаблону: " в предложении ХХ букв".
3) Создайте числовой объект со значением 2345. Поочередно представьте и отобразите на экране это число в двоичном, восьмеричном и шестнадцатеричном виде. Определите класс созданного объекта и отобразите список его атрибутов. Напишите инструкцию определения числа разрядов в двоичном представлении числа.
4) Создайте объект со значением {-45,78,90,-3,56}. Определите класс этого объекта. Атрибуты объекта запишите в объект-кортеж. Напишите инструкцию, позволяющую проверить наличие метода clear у этого кортежа.
5) Подсчитайте сумму элементов в объекте, созданном в п.4. Отобразите результат по шаблону: "Сумма элементов=ХХХ".
## Решение
1
В командном окне после символов приглашения к диалогу ввести инструкции настройки рабочего каталога
среды по следующему образцу:
import os
os.chdir('<путь доступа к папке>')
Установка рабочего каталога позволяет упростить загрузку и сохранение файлов, так как все относительные пути будут отсчитываться от этого каталога.
Если имеет место скрипт, который должен считывать файлы из определенного каталога или записывать результаты в эту же директорию - необходимо установить этот каталог как текущий рабочий.
2
```python
>>>sentence = "Напишите инструкции, обеспечивающие подсчет числа букв (без запятой, скобок и пробелов) в данном предложении."
>>>count = 0
>>>for bukva in sentence:
if bukva not in ' ,()':
count += 1
>>>print("в предложении", count, "букв")
в предложении 92 букв
```
3
```python
>>>num = 2345
>>>binary = bin(num)
>>>binary
'0b100100101001'
>>>octal = oct(num)
>>>octal
'0o4451'
>>>hexadecimal = hex(num)
>>>hexadecimal
'0x929'
>>>type(num)
<class 'int'>
>>>dir(num)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
>>>length = list(bin(num))
>>>result = len(length) - 2 #убираем 0b
>>>result
12
```
4
```python
>>>something = {-45,78,90,-3,56}
>>>type(something)
<class 'set'>
>>>atributes = dir(something)
>>>'clear' in atributes
True
```
5
```python
>>>total = sum(something)
>>>print("Сумма элементов=", total, sep='')
Сумма элементов=176
```

Двоичные данные
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,777 @@
Жалнин Вадим А-01-23
## 1. Запуск интерактивной оболочки IDLE
## 2. Стандартные функции
### 2.1. Функция round – округление числа с заданной точностью
```python
>>>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.
```python
>>>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 - создание итерируемого объекта из кортежей
```python
>>>qq = ["Zhalnin", "Baranov", "Podolskiy", "Bushmanov"]
>>>ff = zip(gg, qq)
>>>ff
<zip object at 0x0000021278293500>
>>>tuple(ff)
((76, 'Zhalnin'), (85, 'Baranov'), (94, 'Podolskiy'), (103, 'Bushmanov'))
```
Длина получившегося объекта соответствует длине меньшего объекта-параметров(длина 4 значения).
```python
>>>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 и представленного в виде символьной строки.
```python
>>>fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=73
>>>fff
73.0
>>>dan
209.0
```
### 2.5. Функция exec – чтение и выполнение объекта-аргумента функции.
```python
>>>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(возвращение модуля):
```python
>>>x = abs(-10)
>>>x
10
```
- Функция pow(возведение в степень)
```python
>>>pow(2, 10)
1024
>>>pow(4,5,10) # 4**5 = 1024, затем 1024 % 10 = 4
4
```
- Функции max и min(выбор максимального и минимального значения соответственно)
```python
>>>max(40, 50, 6)
50
>>>min(-3, 57, 30)
-3
```
- Функция sum(суммирование элементов)
```python
>>>sum([1,2,3,4,5])
15
>>>sum([1,2,3,4,5], -5)
10
```
- Функция divmod(возвращение кортежа из целой части и остатка от деления)
```python
>>>divmod(36, 5)
(7, 1)
```
- Функция len(длина списка)
```python
>>>len([1,2,3,4,5,6])
6
```
- Функция map ( это встроенная функция Python, которая применяет заданную функцию к каждому элементу итерируемого объекта (списка, кортежа и т.д.) и возвращает итератор с результатами.)
```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 – совокупность разнообразных математических функций.
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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
```python
>>>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(округление в большую сторону)
```python
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(округление в меньшую сторону)
```python
>>>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
```python
>>>math.pi
3.141592653589793
```
## 4. Функции из модуля cmath – совокупность функций для работы с комплексными числами.
```python
>>>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 – совокупность функций для выполнения операций с псевдослучайными числами и выборками.
```python
>>>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)
```python
>>>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 (равномерно распределенное случайное число)
```python
>>>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(нормально распределенное случайное число)
```python
>>>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(случайные целые числа)
```python
>>>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 (случайный выбор из совокупности)
```python
>>>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 (случайная перестановка элементов списка)
```python
>>>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 (случайный выбор подмножества элементов)
```python
>>>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(случайное число с бета-распределением)
```python
>>>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(случайное число с гамма-распределением)
```python
>>>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 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
```python
>>>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 время и текущее время
```python
>>>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
1761163719.8144076
>>>c2=time.time()-c1 # временной интервал в секундах, со времени ввода предыдущей инструкции
>>>c2
19.909332275390625
>>>dat = time.gmtime() # Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC)
>>>dat.tm_mon # получение номера месяца
10
>>>dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=22, tm_hour=20, tm_min=9, tm_sec=11, tm_wday=2, tm_yday=295, tm_isdst=0)
```
- Текущее время с учетом часового пояса
```python
>>>mestn = time.localtime()
>>>list(mestn)
[2025, 10, 22, 23, 9, 40, 2, 295, 0]
```
- Функция asctime (преобразование представления времени из кортежа в строку)
```python
>>>time.asctime(mestn)
'Wed Oct 22 23:09:40 2025'
```
- Функция ctime (преобразование времени в секундах, прошедшего с начала эпохи, в строку)
```python
>>>time.ctime()
'Wed Oct 22 23:10:15 2025'
```
- Функция sleep (прерывание работы программы на заданное время)
```python
>>>time.sleep(5)
```
- Функция mktime (преобразование времени из типа кортежа или struct_time в число секунд с начала эпохи)
```python
>>>time.mktime(mestn)
1761163780.0
```
- Обратное преобразование из секунд в местное время
```python
>>>time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=22, tm_hour=23, tm_min=8, tm_sec=39, tm_wday=2, tm_yday=295, tm_isdst=0)
```
## 7. Графические функции
Импортируем модули mathplotlib и pylab для построения графика.
-Создание и отображение графика x(t):
```python
>>>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)
- Рассмотрим способ построения нескольких графиков на одном рисунке.
```python
>>>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)
- Теперь изучим возможность построения круговой диаграммы.
```python
>>>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)
- Построение гистограммы
```python
>>>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)
- Построение столбиковой диаграммы
```python
>>>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
```python
>>>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,41 @@
## Задание:
- Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
- Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
- Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
- Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
- Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
- Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение:
```python
>>>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=22, tm_hour=23, tm_min=16, tm_sec=26, tm_wday=2, tm_yday=295, tm_isdst=0)
>>>nows = str(msc_t.tm_hour) + " " + str(msc_t.tm_min)
>>>nows
'23 16'
>>>import random
>>>lst = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
>>>random.sample(lst, 3)
['воскресенье', 'четверг', 'среда']
>>>random.choice(range(14, 33, 3))
32
>>>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
3.55
```

@ -0,0 +1,53 @@
## Жалнин В.Ю. А-01-23, вариант 19
# Задание:
Напишите инструкцию запоминания в переменной текущего регионального времени. Напишите инструкцию превращения этого времени в символьную строку. Отобразите результат на экране. Создайте множество с 5 элементами – случайными целыми числами из диапазона значений от -23 до 57. Подсчитайте корень квадратный из суммы элементов этого множества и отобразите на экране в виде: «результат = ХХХ» с округлением числа до одного знака после точки.
Выполнение:
```python
#Напишите инструкцию запоминания в переменной текущего регионального времени.
import time
regional = time.localtime()  
#Напишите инструкцию превращения этого времени в символьную строку.
symbol = time.asctime(regional)
#Отобразите результат на экране.
print(symbol)
#Создайте множество с 5 элементами – случайными целыми числами из диапазона зна-чений от -23 до 57.
import random
mnozhestv0 = set(random.sample(range(-23,58),5)) # Множество - набор уникальных(!) элементов
#Подсчитайте корень квадратный из суммы элементов этого множества
import math
if sum(mnozhestv0) < 0:
    print("К сожалению, получившаяся сумма элементов меньше нуля, извлечение корня невозможно. Перезапустите программу.")
else:
    koren = math.sqrt(sum(mnozhestv0))
#отобразите на экране в виде: «результат = ХХХ» с округлением числа до одного знака после точки
    print("результат =", round(koren,1))
```
Вывод в терминал (первый вариант)
```
Mon Oct 27 12:22:36 2025
К сожалению, получившаяся сумма элементов меньше нуля, извлечение корня невозможно. Перезапустите программу.
```
Вывод в терминал (второй вариант)
```
Mon Oct 27 12:23:32 2025
результат = 10.1
```
Загрузка…
Отмена
Сохранить