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

...

20 Коммитов

Автор SHA1 Сообщение Дата
KireevYP
e3f73caaf5 тема4 2025-10-19 20:30:36 +03:00
8c95227c49 doc: уточнено оформление тестов по модулям 2025-10-19 20:30:36 +03:00
Пользователь № 13 аудитории К-522
573a86dc11 часть общего задания 2025-10-06 12:01:48 +03:00
Пользователь № 13 аудитории К-522
42c87ab613 исправлено окз 2025-10-06 11:40:32 +03:00
Пользователь № 13 аудитории К-522
79fb8e87fa общее выполнение работы 2025-10-06 09:47:05 +03:00
KireevYP
6718be84b4 индивидуальное контрольное задание 2025-10-05 23:22:33 +03:00
KireevYP
c1deeb53c7 Merge branch 'main' of http://uit.mpei.ru/git/KireevYP/python-labs 2025-10-05 22:42:09 +03:00
KireevYP
9a5fedbef0 общее выполнение работы 2025-10-05 22:40:54 +03:00
KireevYP
16ec079186 тестовый коммит перед работой 2025-10-05 17:20:56 +03:00
Пользователь № 13 аудитории К-522
022393f181 индивидульное контрольное задание 2025-09-22 10:52:22 +03:00
Пользователь № 13 аудитории К-522
7f6939b603 индивидуальное контрольное задание 2025-09-22 09:55:51 +03:00
KireevYP
77c775431a oкз 2025-09-21 19:48:54 +03:00
KireevYP
41ea8dae95 правки по отчёту: окончательная версия 2025-09-21 19:23:28 +03:00
KireevYP
d1654019dd отчёт об основном задании 2025-09-21 19:19:27 +03:00
KireevYP
57c22fb96b самый финальный коммит 2025-09-21 10:55:28 +03:00
KireevYP
74abb83fd8 Финальный коммит 2025-09-21 10:32:55 +03:00
KireevYP
049dceab22 Предфинальная версия отчёта 2025-09-21 10:10:56 +03:00
KireevYP
c0125cb05f тестовый коммит 2025-09-21 09:53:03 +03:00
Пользователь № 13 аудитории К-522
f794e188d1 punkt 15 2025-09-08 12:40:35 +03:00
Пользователь № 13 аудитории К-522
19d56d4f31 first commit 2025-09-08 10:12:10 +03:00
39 изменённых файлов: 2448 добавлений и 1 удалений

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

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

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

@@ -0,0 +1,5 @@
#Программа по Теме1 Киреев Юрий Павлович
print('Hello')
h=input('Your name =')
import os
os.chdir("c:\\Users\\u522-13\\Desktop\\KireevYP\\python-labs\\TEMA1\\")

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

@@ -0,0 +1,13 @@
# Протокол по Теме 1 Киреев Юрий Павлович
import os
os.chdir("c:\\Users\\u522-13\\Desktop\\KireevYP\\python-labs\\TEMA1\\")
import Pr0
Hello
Your name =
import prb1
Как Вас зовут? Юра
Привет, Юра
print('Hello')
Hello
h=input('Your name=')
Your name=

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

@@ -0,0 +1,231 @@
# Отчёт по теме 1
Киреев Юрий Павлович, А-02-23
# 1 Изучение среды IDLE (п.2 - п.5)
## 1.1 Знакомство с интерпретатором
Запустил на выполнение команду-интерпретатор
Ввёл следующие инструкции:
```py
>>> print('Hello')
```
Результат: Hello
```py
>>> h=input('Your name=')
```
Результат:
```py
Your name=
```
Далее после выведенного результата ввёл своё имя в латинской транскрипции:
```py
Your name=Yura
```
Завершил работу с интерпретатором:
```py
>>> exit()
```
## 1.2 Знакомство с интерактивной оболочкой IDLE (п.6 - п.9)
![Запустил интерактивную графическую оболочку](figure0.PNG)
Ввёл инструкции настройки рабочего каталога среды:
```py
>>> import os
>>> os.chdir("c:\\Users\\u522-13\\Desktop\\KireevYP\\python-labs\\TEMA1\\")
```
Далее изучил предложения выпадающих окон. Выбрал предложение "Options".
В среде установил настройки: шрифт Arial Cyr, размер 11, размер начального окна - высота 50, ширина 100.
Подкраска комментариев - коричневым цветом.
Всё это отражено на скриншоте ниже.
![Изменённое оформление](figure1.PNG)
## 1.3 Текстовый редактор оболочки IDLE (п.10 - п.11)
Открыл новый файл текстового редактора оболочки IDLE. Ввёл:
```py
>>> #Программа по Теме1 Киреев Юрий Павлович
>>> print('Hello')
>>> h=input('Your name =')
>>> import os
>>> os.chdir("c:\\Users\\u522-13\\Desktop\\KireevYP\\python-labs\\TEMA1\\")
```
Сохранил введённый текст под именем Pr0.py и запустил инструкции на выполнение
Результат:
```py
====== RESTART: C:/Users/u522-13/Desktop/KireevYP/python-labs/TEMA1/Pr0.py =====
Hello
Your name =
```
С помощью запуска клавишей F5 и командой:
```py
>>> import Pr0
```
Получил тот же результат
Запустил на выполнение программу, находящуюся в рабочем каталоге в файле prb1
```py
>>> import prb1
```
Результат:
```py
Как Вас зовут? Юра
Привет, Юра
```
## 1.4 Состав рабочего каталога. Зачем производится компиляция файлов? (п.12)
Изучил состав рабочего каталога и открыл каталог _pycache_. Результат отражён на скриншоте ниже.
![Двоичный код в txt](figure2.PNG)
Такое происходит, если попытаться просмотреть двоичный код текстовом редакторе.
Компиляция программ производится для преобразования исходного кода программы в машинный код, понятный компьютеру.
В нашем случае - в двоичный код.
## 1.5 Файл протокола (п.13)
Создал файл протокола для данной лабораторной работы. Сохранил под именем protokol.py
```py
>>> # Протокол по Теме 1 Киреев Юрий Павлович
>>> import os
>>> os.chdir("c:\\Users\\u522-13\\Desktop\\KireevYP\\python-labs\\TEMA1\\")
>>> import Pr0
>>> Hello
>>> Your name =
>>> import prb1
>>> Как Вас зовут? Юра
>>> Привет, Юра
>>> print('Hello')
>>> Hello
>>> h=input('Your name=')
>>> Your name=
```
## 1.6 Раздел Help и оперативная помощь (п. 14)
В данном разделе представлена документация Python (Python Docs), помощь по интерфейсу IDLE, по лицензии IDLE.
А также раздел Turtle Demo для демонстрации примеров рисования в Python.
Ввёл инструкцию для обращения к оперативной помощи:
```py
>>> help(print)
```
Результат:
```py
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
```
В одной строке ввёл несколько функций:
```py
>>> help(print); help(input)
```
Результат:
```py
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
```
При этом работает приём для быстрого ввода ранее использованных функций.
Для обращения к оперативной помощи нажал на клавишу F1. В выпавшей мне документации нашел строку
print() (built-in function)
![Получил справку по этой функции](figure3.png)
При нажатии в меню Help на строку Python Docs появляется та же документация.
## 1.7 Работа с окнами и Turtle (п.15)
Открыл файл prb1.py
С помощью предложения "Окно (Window)" поочередно активировал окна Python Shell и 2 окна текстового редактора
Запустил программу из файла prb1.py:
```py
>>> name = input("Как Вас зовут? ")
>>> print("Привет,", name)
```
Результат:
```py
Как Вас зовут? Юра
Привет, Юра
```
Открыл файл Pr0.py Поочередно активизировал 4 окна.
Закрыл два окна текстового редактора.
Выбрал предложения "Help" и "Turtle Demo"
Попробовал несколько примеров программ "черепахи"
![Часы](figure4.PNG)
![Лес](figure5.PNG)
![Мир](figure6.PNG)
Если рассматривать возможность использования этих примеров при написании собственной программы, то можно сказать, что они могут быть полезны при разборе.
Например, если нужно использовать графический инструмент, с помощью этих примеров можно понять, какие команды стоит использовать для достижения той или иной картинки.
Закрыл окно текстового редактора с протоколом.
### Завершил работу со средой

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

@@ -0,0 +1,24 @@
# Индивидуальное контрольное задание по теме 1
Киреев Юрий, А-02-23
## Задание
Продемонстрируйте последовательность действий при создании файла с программой с помощью текстового редактора IDLE.
## Решение
1. Заходим в тектовый редактор IDLE. Это можно сделать, создав новый файл, выбрав соответствующее предложение.
![Новый файл](figure7.PNG)
2. Далее нам нужно написать свою программу. Можно написать комментарий, для чего нужен конкретный файл.
![Своя программа](figure8.PNG)
3. Сохраняем наш файл и именуем его, чтобы его можно было использовать в дальнейшем.
![Сохранение](figure9.PNG)
![Именование](figure10.PNG)
Теперь у нас есть файл с программой, и мы можем его запускать и использовать.

Двоичные данные
TEMA1/Методические указания по ПОАС (4).docx Обычный файл

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

@@ -0,0 +1,502 @@
# Отчёт по теме 2 (Базовые типы объектов)
Киреев Юрий, А-02-23
## 1. Подготовка к работе
Запустил оболочку IDLE. Установил рабочий каталог.
```py
>>> import os
>>> os.chdir ("c:\\Users\\user\\Desktop\\ПОАС\\python-labs\\TEMA2\\")
```
Вместо создания файла отчёта через текстовый редактор IDLE, использую этот файл формата .md
## 2. Изучение простых объектов
Рассмотрим операции присваивания переменным:
```py
>>> f1=16;f2=3
>>> f1,f2
(16, 3)
>>> f1;f2
16
3
```
Для того, чтобы узнать, какие объекты уже существуют в данный момент в среде Python (в пространстве имен), использовал функцию dir без аргументов:
```py
>>> dir()
```
Результат:
```py
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
```
Можно получить список атрибутов любого объекта, на примере f1:
![Использование функции dir](figure0.png)
Для определения классовой принадлежности любого объекта использовал функцию type():
```py
>>> type(f2)
```
Результат:
```py
<class 'int'>
```
Удалим объекты f1, f2 из оперативной памяти:
```py
>>> del f1,f2
```
Проверим:
```py
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
```
## 3. Правила именования объектов в Python
Правила именования:
```py
- имена должны состоять из латинских букв, цифр и символов подчеркивания;
- имена должны начинаться с латинской буквы (иногда могут начинаться с символа подчеркивания, но это особый вид переменных);
- имена не должны совпадать с ключевыми словами и встроенными идентификаторами языка Python;
- большие и малые буквы в именах различаются (имена чувствительные к регистру)!
```
Попробовал несколько примеров именования объектов:
![Примеры именования объектов](figure1.png)
Переменные ggl и hhl названы по правилам именования, остальные же получили диагностическое сообщение.
73sr - недопустимо, т.к. начинается с цифры.
and - недопустимо, т.к. совпадает с ключевым словом 'and'
## 4. Список ключевых слов
Вывел список ключевых слов:
```py
>>> import keyword
>>> keyword.kwlist
```
Результат:
```py
['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']
```
Сохранил этот список в переменной spisok
```py
>>> spisok=keyword.kwlist
>>> spisok
['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. Встроенные идентификаторы
Вывел список встроенных идентификаторов:
![Список встроенных идентификаторов](figure2.png)
Изучил назначение некоторых функций из списка и попробовал их применить:
![Часть 1](figure31.png)
![Часть 2](figure32.png)
![Часть 3](figure33.png)
## 6. Регистр
Малые и большие буквы в именах объектов различаются. Это видно на проделанном примере:
```py
>>> Ggl=45
>>> ggl, Ggl
(1.6, 45)
```
## 7. Базовые типы объектов
### 7.1. Логический
Зададим логические переменные:
```py
>>> bb1=True; bb2=False
>>> bb1;bb2
True
False
```
Проверим тип объекта:
```py
>>> type(bb1)
```
Результат:
```py
<class 'bool'>
```
### 7.2. Другие простые типы
Аналогичным способом изучил другие типы:
![Другие типы](figure4.png)
Как мы видим, двоичное число имеет тип integer.
### 7.3. Строка символов
Строки можно заключать в апострофы или в двойные кавычки:
```py
>>> ss1= 'Это - строка символов'
>>> ss1
'Это - строка символов'
>>> ss1= "Это - строка символов"
>>> ss1
'Это - строка символов'
```
Используем внутри строки экранированные последовательности:
```py
>>> ss1a= "Это -\" строка символов\", \n \t выводимая на двух строках"
>>> print(ss1a)
```
Результат:
```py
Это -" строка символов",
выводимая на двух строках
```
Создадим строку по шаблону:
```py
>>> ss1b = 'Меня зовут: \n Киреев Ю.П.'
>>> ss1b
'Меня зовут: \n Киреев Ю.П.'
>>> print(ss1b)
Меня зовут:
Киреев Ю.П.
```
Зададим многострочную строку с использованием тройных кавычек:
```py
>>> mnogo = """Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
>>> print(mnogo)
```
Результат:
```py
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
```
Обратимся к частям строки символов с использованием индексов по их порядку в строке:
```py
>>> ss1[0]
'Э'
>>> ss1[8]
'р'
>>> ss1[-2]
'о'
```
Применим разрез:
```py
>>> ss1[6:9]
'стр'
>>> ss1[13:]
'символов'
>>> ss1[:13]
'Это - строка '
>>> ss1[5:-8]
' строка '
>>> ss1[3:17:2]
' тоасм'
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[-4:3:-2]
'омсаот '
```
Попробуем поменять символ в строке:
```py
>>> ss1[4]='='
Traceback (most recent call last):
File "<pyshell#124>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
```
Попробуем по-другому:
```py
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> ss1
'Это = строка символов'
```
Тирэ сменилось на знак равенства.
Самостоятельно совершил некоторые действия со строкой ss1b и создал несколько новых объектов:
![Самостоятельные действия](figure5.png)
## 8. Сложные типы объектов
### 8.1. Список
Список – это последовательность: упорядоченная по местоположению коллекция объектов произвольных типов, размер которых практически не ограничен. В отличие от символьных строк, списки являются изменяемыми последовательностями, т.е. их элементы могут изменяться с помощью операций присваивания.
Приведу пример списка с 3 элементами разных типов:
```py
>>> spis1=[111, 'Spisok',5-9j]
>>> spis1
[111, 'Spisok', (5-9j)]
```
Cоздадим список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»:
```py
>>> stup=[0,0,1,1,1,1,1,1,1]
>>> stup
[0, 0, 1, 1, 1, 1, 1, 1, 1]
```
Введём список на нескольких строках:
```py
>>> spis=[1,2,3,4,
5,6,7,
8,9,10]
>>> spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```
Индексы в списках можно использовать также, как и в строках. Покажем на примерах:
```py
>>> spis1[-1]
(5-9j)
>>> stup[-8::2]
[0, 1, 1, 1]
```
Проверим возможность изменения списка:
```py
>>> spis1[1]='Список'
```
Результат:
```py
>>> spis1
[111, 'Список', (5-9j)]
```
Список изменился.
Длина списка:
```py
>>> len(spis1)
3
```
Найдём описание метода объекта с помощью функции help()
```py
>>> help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
```
Добавим в конец списка элемент "New item"
```py
>>> spis1.append('New item')
>>> spis1
[111, 'Список', (5-9j), 'New item']
```
Попробуем использовать конкатенацию:
```py
>>> spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
>>> spis1
[111, 'Список', (5-9j), 'New item']
```
Видим, что в этой инструкции новый список только отображается, но не сохраняется.
Добавим в конец списка spis1 строку ss1b и отобразим список.
```py
>>> spis1.append(ss1b)
>>> spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Киреев Ю.П.']
```
Удалим элемент из списка:
```py
>>> spis1.pop(1)
'Список'
>>> spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Киреев Ю.П.']
```
Воспользуемся иными различными методами:
![Методы со списками](figure6.png)
Попробуем создать вложенный список:
```py
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2
[[(5-9j), 52, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]]
```
Обратимся к элементу списка spis1
```py
>>> spis2[0][1]
52
```
Изменим элемент вложенного списка:
```py
>>> spis2[0][1]=78
>>> spis2
[[(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]]
```
Объект spis1 также изменился. Элементы вложенного списка меняются сами по себе, если изменять их во вложенном списке.
Придумал собственный объект-список:
```py
>>> spisxxx = [boolobj, spis2, ggl, ss1]
>>> spisxxx
[True, [[(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]], 1.6, 'Это = строка символов']
```
### 8.2. Кортеж
Объект-кортеж похож на список, но его нельзя изменить – кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. В отличие от списка литерал кортежа заключается в круглые, а не в квадратные скобки. Кортежи также поддерживают включение в них объектов различных типов и операции, типичные для последовательностей.
Создадим кортеж:
```py
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1
(222, 'Kortezh', (77+8j))
```
Проведём несколько операций с кортежем и попробуем 2 важных метода:
![Операции с кортежами](figure7.png)
Попробуем операцию замены элемента кортежа:
```py
>>> kort1[2]=90
Traceback (most recent call last):
File "<pyshell#197>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
```
Создадим собственный кортеж:
```py
>>> kortxxx=(kort1, ggl, ss1, spis1)
>>> kortxxx
((222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Киреев Ю.П.'), 1.6, 'Это = строка символов', [(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'])
```
### 8.3. Объект-словарь
Объект-словарь похож на ассоциативные массивы в других языках программирования. Его содержанием является совокупность пар: «ключ (key)»:«значение (value)». В качестве ключей могут использоваться неизменяемые типы объектов. Значениями могут быть объекты любого типа. Ссылка на ключ обеспечивает быстрый доступ к связанному с ним значению. В отличие от списков и кортежей совокупность элементов словаря не является упорядоченной (последовательностью). Его элементы могут изменяться с помощью операции присваивания значений.
Создадим словарь:
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
```
Пример обращения по ключам:
```py
>>> dic1['Orel']
56
```
Пополним словарь:
```py
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
```
Отсортируем словарь по ключам и по значениям и выведем их:
```py
>>> sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>> sorted(dic1.values())
[45, 56, 78, 145]
```
Покажем что элементы словаря могут сами быть словарями и к ним можно обращаться:
```py
>>> dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>> dic3['statistics'][2]
'standart deviation'
```
Создадим более сложные словари:
```py
>>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
```
Придумываем объект-кортеж по заданию:
```py
>>> keys_tuple = ('name', 'age', 'city', 'country', 'language', 'hobby', 'skill')
>>> values_list = ['Anna', 25, 'Moscow', 'Python', 'reading']
>>> result_dict = dict(zip(keys_tuple, values_list))
>>> result_dict
{'name': 'Anna', 'age': 25, 'city': 'Moscow', 'country': 'Python', 'language': 'reading'}
```
Мы видим в получившемся словаре 5 элементов, а не 7. Это случилось потому, что число элементов у кортежа и списка не совпадает, соответственно у получившегося кортежа будет число элементов, равное минимальному числу элементов его составляющих.
Пример словаря с описанием состава студентов:
```py
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>> AVTI['Курс III'][5]
15
```
### 8.4. Объект-множество
Объект-множество – это неупорядоченная совокупность неповторяющихся элементов. Эти эле-менты могут быть разных, но только неизменяемых типов (числа, строки, кортежи).
Создадим множество:
```py
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'микропроцессор', 'линия связи', 'датчик', 'двигатель'}
```
Лишние дубликаты были автоматически удалены.
Проведем некоторые операции с множеством:
```py
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'микропроцессор', 'датчик', 'двигатель', 'реле'}
```
Придумал объект-множество:
```py
>>> mnozhestvo = {42, "hello", 3.14, True, (1, 2, 3)}
>>> mnozhestvo.add("new 52")
>>> mnozhestvo.remove(3.14)
>>> mnozhestvo
{True, 'new 52', 42, (1, 2, 3), 'hello'}
>>> True in mnozhestvo
True
```
## 9. Сохранил файл отчёта и закончил сеанс работы с IDLE.

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

@@ -0,0 +1,80 @@
# Общее контрольное задание по теме 2
Киреев Юрий, А-02-23
## 1. Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
1. Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
2. Создать переменную со значением, совпадающим с первой буквой из familia.
3. Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
4. Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
5. Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
6. Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
7. Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
8. Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## 2. Решение
### 2.1.
```py
>>> familia = 'Kireev'
>>> familia
'Kireev'
```
### 2.2.
```py
>>> per = familia[0]
>>> per
'K'
```
### 2.3.
```py
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']
```
Команда import keyword была введена ранее во время выполнения основной части задания
### 2.4.
```py
>>> 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']
```
### 2.5.
```py
>>> kort_nam = ('Yura','Alena','Denis','Nastya')
>>> type(kort_nam)
<class 'tuple'>
```
### 2.6.
```py
>>> kort_nam = kort_nam + ('Misha','Lena')
>>> kort_nam
('Yura', 'Alena', 'Denis', 'Nastya', 'Misha', 'Lena')
```
### 2.7.
```py
>>> kort_nam.count('Dima')
0
```
### 2.8.
```py
>>> dict_bas = {"строка": familia, "список": sp_kw, "кортеж": kort_nam}
>>> dict_bas
{'строка': 'Kireev', 'список': ['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'], 'кортеж': ('Yura', 'Alena', 'Denis', 'Nastya', 'Misha', 'Lena')}
```

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

@@ -0,0 +1,40 @@
# Индивидуальное контрольное задание по Теме 2
Киреев Юрий, А-02-23
## Задание
Введите инструкцию
```py
tov={'капуста','помидоры','огурцы','яблоки'}
```
Определите, к какому классу относится этот объект и какими атрибутами он обладает. Отобразите элементы объекта в командном окне. Замените элемент «яблоки» на «свекла».
## Решение
Ввёл инструкцию:
```py
>>> tov={'капуста','помидоры','огурцы','яблоки'}
```
Артрибуты и класс объекта:
```py
>>> type(tov)
<class 'set'>
>>> dir(tov)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__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']
```
Отобразил элементы объекта:
```py
>>> tov
{'капуста', 'огурцы', 'яблоки', 'помидоры'}
```
Заменил элемент "яблоки" на "свекла":
```py
>>> tov.remove('яблоки')
>>> tov.add('свекла')
>>> tov
{'свекла', 'огурцы', 'капуста', 'помидоры'}
```

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

@@ -0,0 +1,789 @@
# Отчёт по теме 3
Киреев Юрий, А-02-23
## 1. Запуск оболочки IDLE
В задании просят создать файл протокола, отчёт по лабораторной работе записан в файле report.md, который Вы сейчас читаете.
## 2. Преобразование простых базовых типов объектов
### 2.1. Преобразование в логический тип с помощью функции bool(<Объект>)
Некоторые примеры использования:
```py
>>> logiz1 = bool(56)
>>> logoz2 = bool(0)
>>> logiz3 = bool("Beta")
>>> logiz4 = bool("")
>>> logiz1,logiz2,logiz3,logiz4
(True, False, True, False)
>>> type(logiz1),type(logiz2),type(logiz3),type(logiz3)
(<class 'bool'>, <class 'bool'>, <class 'bool'>, <class 'bool'>)
```
### 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления
Для этого используем функцию int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.
Некоторые примеры использования:
```py
>>> tt1=int(198.6) # Отбрасывается дробная часть
>>> tt2=int("-76") # Число – в строке символов, система по умолчанию - десятичная
>>> tt3=int("B",16) # В в шестнадцатиричной системе счисления переведено в десятичную - 11
>>> tt4=int("71",8)
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
>>> tt1,tt2,tt3,tt4
(198, -76, 11, 57)
```
Диагностическое сообщение выдаётся потому, что int() читает строку и пытается выделить целое число, но в строке число с плавающей точкой, поэтому int() не может прочитать это число.
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
Некоторые примеры преобразований:
```py
>>> flt1=float(789)
>>> flt2=float(-6.78e2)
>>> flt3=float("Infinity")
>>> flt4=float("-inf")
>>> flt1,flt2,flt3,flt4
(789.0, -678.0, inf, -inf)
```
### 2.3. Преобразование десятичных чисел в другие системы счисления
Примеры преобразования:
```py
>>> hh=123
>>> dv1=bin(hh)
>>> vos1=oct(hh)
>>> shs1=hex(hh)
>>> dv1,vos1,shs1
('0b1111011', '0o173', '0x7b')
```
Для проверки выполним обратные преобразования:
```py
>>> des1=int(dv1,2)
>>> des2=int(vos1,8)
>>> des3=int(shs1,16)
>>> des1,des2,des3
(123, 123, 123)
```
## 3. Преобразования более сложных базовых типов объектов
### 3.1. Преобразование в строку символов с помощью функции str(<Объект>)
Некоторые примеры использования:
```py
>>> strk1=str(23.6)
>>> strk2=str(logiz3)
>>> strk3=str(["A","B","C"]) #Преобразуем список
>>> strk4=str(("A","B","C")) #Преобразуем кортеж
>>> strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
>>> strk1,strk2,strk3,strk4,strk5
('23.6', 'True', "['A', 'B', 'C']", "('A', 'B', 'C')", "{'A': 1, 'B': 2, 'C': 9}")
```
### 3.2. Преобразование элементов объекта в список с помощью функции list(<Объект>)
Некоторые примеры преобразований:
```py
>>> spis1=list("Строка символов") #Заданная строка разделяется на символы
>>> spis2=list((124,236,-15,908)) #Кортеж превращается в список
>>> spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
>>> spis1,spis2,spis3
(['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в'], [124, 236, -15, 908], ['A', 'B', 'C'])
```
Инструкция, обеспечивающая создание из того же словаря списка с другими его частями (в данном случае, со значениями):
```py
>>> spis4 = list({"A":1, "B":2, "C":9}.values())
>>> spis4
[1, 2, 9]
```
### 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>)
Некоторые примеры преобразований:
```py
>>> kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
>>> kort8=tuple(spis2) #Преобразование списка в кортеж
>>> kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
>>> kort7,kort8,kort9
(('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в'), (124, 236, -15, 908), ('A', 'B', 'C'))
```
### 3.4. Удаление объектов
Очистим оперативную память от ранее созданных объектов можно с помощью инструкции del:
```py
>>> del strk5, kort8
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'des1', 'des2', 'des3', 'dv1', 'flt1', 'flt2', 'flt3', 'flt4', 'hh', 'kort7', 'kort9', 'logiz1', 'logiz3', 'logiz4', 'logoz2', 'shs1', 'spis1', 'spis2', 'spis3', 'spis4', 'strk1', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'vos1']
```
Как мы видим, указанные объекты не остались в оперативной памяти.
Создам строку со своей фамилией и инициалами, преобразую её в список, затем список – в кортеж и, наконец, кортеж – в строку:
```py
>>> zad34='KireevYP'
>>> spis34=list(zad34)
>>> kort34=tuple(spis34)
>>> fin=str(kort34)
>>> zad34,spis34,kort34,fin
('KireevYP', ['K', 'i', 'r', 'e', 'e', 'v', 'Y', 'P'], ('K', 'i', 'r', 'e', 'e', 'v', 'Y', 'P'), "('K', 'i', 'r', 'e', 'e', 'v', 'Y', 'P')")
```
## 4. Арифметические операции
### 4.1. Сложение и вычитание
Некоторые примеры:
```py
>>> 12+7+90 # Сложение целых чисел
109
>>> 5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>> 23.6+54 #Сложение вещественного и целого чисел
77.6
>>> 14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
```
### 4.2 Умножение
Пример:
```py
>>> -6.7*12 #Умножение вещественного числа на целое число
-80.4
```
### 4.3. Деление
Некоторые примеры:
```py
>>> -234.5/6 #Деление вещественного числа на целое
-39.083333333333336
>>> a=178/45 #Деление двух целых чисел
>>> a,type(a)
(3.9555555555555557, <class 'float'>)
```
Результатом деления всегда будет вещественное число.
### 4.4. Деление с округлением вниз
Некоторые примеры:
```py
>>> b=178//45 #Деление двух целых чисел
>>> b, type(b)
(3, <class 'int'>)
>>> c=-24.6//12.1 #Деление двух вещественных чисел
>>> c, type(c)
(-3.0, <class 'float'>)
```
При делении с округлением вниз результат может быть целым или вещественным.
### 4.5. Получение остатка от деления
Некоторые примеры:
```py
>>> 148%33 #Остаток от деления двух целых чисел
16
>>> 12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
```
Попробуем смешанные комбинации типов чисел в этой операции:
```py
>>> 12.6%4
0.5999999999999996
>>> 148%3.8
3.6000000000000068
```
Если в данной операции присутствует вещественное число, то и остаток тоже будет вещественным числом.
### 4.6. Возведение в степень
Некоторые примеры:
```py
>>> 14**3 #Целое число возводится в целую степень
2744
>>> e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>> e
35.719843790663525
```
Попробуем смешанные комбинации типов чисел в этой операции:
```py
>>> 14**3.6
13367.830445904418
>>> 2.7**3
19.683000000000003
```
Как и в предыдущем подпункте, если присутствует вещественное число, то и результат тоже будет вещественным числом.
Попробуем операции с участием комплексных чисел:
```py
>>> 2+3j+10
(12+3j)
>>> 2+3j-11
(-9+3j)
>>> 2+3j*5
(2+15j)
>>> b=2+3j
>>> b*5.5
(11+16.5j)
>>> c=b*5.5
>>> c,type(c)
((11+16.5j), <class 'complex'>)
>>> b//3 #Диагностическое сообщение, т.к. данную операцию нельзя применить к комплексным числам
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
b//3
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
>>> b**3
(-46+9j)
>>> b**3.3
(-68.5109468174904-6.986605925999231j)
>>> b%8 #Диагностическое сообщение, т.к. данную операцию нельзя применить к комплексным числам
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
b%8
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
>>> b/3
(0.6666666666666666+1j)
>>> b/3.3
(0.6060606060606061+0.9090909090909092j)
```
Нетрудно заметить, что в результате операции над числами разных типов получается число, имеющее наиболее сложный тип из тех типов, которые участвуют в операции.
## 5. Операции с двоичными представлениями целых чисел
### 5.1. Двоичная инверсия
Значение каждого бита в представлении числа заменяется на противоположное:
```py
>>> dv1=9
>>> bin(dv1)
'0b1001'
>>> dv2=~dv1
>>> bin(dv2)
'-0b1010'
>>> dv2
-10
```
### 5.2. Двоичное "И"
Побитовое совпадение двоичных представлений чисел
```py
>>> 7&9 # 111 и 1001 = 0001
1
>>> 7&8 # 111 и 1000 = 0000
0
>>> bin(7&9)
'0b1'
>>> bin(7&8)
'0b0'
```
### 5.3. Двоичное «ИЛИ»
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```py
>>> 7|9 # 111 или 1001 = 1111
15
>>> bin(7|9)
'0b1111'
>>> 7|8 # 111 или 1000 = 1111
15
>>> bin(7|8)
'0b1111'
>>> 14|5 # 1110 или 0101 = 1111
15
>>> bin(14|5)
'0b1111'
>>> bin(8|2)
'0b1010'
>>> 8|2
10
```
### 5.4. Двоичное «исключающее ИЛИ»
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
```py
>>> 14^5 # 1110 исключающее или 0101 = 1011
11
>>> bin(14^5)
'0b1011'
```
### 5.5. Сдвиг двоичного представления на заданное число разрядов влево или вправо
Некоторые примеры:
```py
h=14 #Двоичное представление = 1110
bin(h)
'0b1110'
g=h<<2 # Новое двоичное представление = 111000
bin(g)
'0b111000'
g1=h>>1 # Новое двоичное представление = 0111
bin(g1)
'0b111'
g2=h>>2; bin(g2) # Новое двоичное представление = 0011
'0b11'
```
Число дополняется нулями, соответственно справа или слева.
Выполним различные операции с двоичными числами, длиной не менее 7 знаков:
```py
>>> ch1=64; ch2=65 #1000000 и 1000001 в двоичной
>>> ch3=~ch1
>>> bin(ch3)
'-0b1000001'
>>> ch3
-65
>>> ch2&ch1; bin(ch2&ch1)
64
'0b1000000'
>>> ch2|ch1; bin(ch2|ch1)
65
'0b1000001'
>>> ch1^ch2; bin(ch1^ch2)
1
'0b1'
>>> bin(ch1<<2)
'0b100000000'
>>> bin(ch2>>3)
'0b1000'
```
## 6. Операции при работе с последовательностями
### 6.1. Объединение последовательностей (конкатенация)
Некоторые примеры:
```py
>>> 'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2. Повторение
Некоторые примеры:
```py
>>> 'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99 #Создание списка со 100 отсчетами сигнала-ступеньки
>>> signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> signal2=(0,)*3+(1,)*5+(0,)*7 #Создание кортежа с отсчетами сигнала – импульса
>>> signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
### 6.3. Проверка наличия заданного элемента в последовательности
Некоторые примеры:
```py
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka #Наличие подстроки в строке
True
>>> 'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
### 6.4. Подстановка значений в строку с помощью оператора «%»
Пример 1:
```py
>>> stroka='Температура = %g %s %g'
>>> stroka
'Температура = %g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
Пример 2. Вставка с использованием данных из словаря.
```py
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka
'Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
### 7.1 Обычное присваивание значения переменной (=)
Пример:
```py
>>> zz=-12
>>> zz
-12
```
### 7.2 Увеличение или уменьшение значения переменной на заданную величину
Примеры:
```py
>>> zz+=5 # Значение zz увеличивается на 5
>>> zz
-7
>>> zz-=3 # Значение уменьшается на 3
>>> zz
-10
```
Для последовательностей операция (+=) означает конкатенацию текущего значения объекта с заданным дополнением.
```py
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> stroka
'Система регулирования'
```
### 7.3. Умножение или деление текущего значения переменной на заданную величину
Примеры:
```py
>>> zz/=2
>>> zz
-5.0
>>> zz*=5
>>> zz
-25.0
```
Для строк операция (*=) означает повторение текущего значения объекта заданное число раз.
```py
>>> stroka='Я рыба'
>>> stroka*=16
>>> stroka
'Я рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыбаЯ рыба'
```
### 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
Примеры:
```py
>>> x = 17
>>> x //= 3
>>> x
5
>>> a = 17
>>> a %= 3
>>> a
2
>>> p = 2
>>> p **= 8
>>> p
256
```
### 7.5. Множественное присваивание
Некоторые примеры:
```py
>>> w=v=10 # Переменным присваивается одно и то же значение
>>> w,v
(10, 10)
>>> n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
>>> n1,n2,n3
(11, -3, 'all')
```
Проверим, можно ли вместо кортежа справа использовать строку, список, словарь, множество.
```py
>>> m1,m2,m3='abc'
>>> m1,m2,m3
('a', 'b', 'c')
>>> o1,o2,o3=[11, -3, 'all']
>>> o1,o2,o3
(11, -3, 'all')
>>> p1,p2,p3={1:'mean',2:'standart deviation',3:'correlation'}
>>> p1,p2,p3
(1, 2, 3)
>>> r1,r2,r3={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
Traceback (most recent call last):
File "<pyshell#197>", line 1, in <module>
r1,r2,r3={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
ValueError: too many values to unpack (expected 3)
>>> r1,r2,r3={'двигатель','датчик','линия связи'}
>>> r1,r2,r3
('линия связи', 'датчик', 'двигатель')
```
Использовать можно всё из перечисленного, но множество стоит ограничить по размеру до того количества элементов, скольким переменным мы присваеваем значения.
## 8. Логические операции
### 8.1. Операции сравнения
Некоторые примеры:
```py
>>> 14>7
True
>>> 15==-15
False
>>> 16<=0
False
>>> 16<7
False
>>> 4!=0
True
>>> 8954>=8954.999
False
```
Сравним ранее введённые переменные w и v:
```py
>>> w==v
True
>>> w!=v
False
>>> w<v
False
>>> w>v
False
>>> w<=v
True
>>> w>=v
True
```
### 8.2. Проверка наличия заданного элемента в последовательности или во множестве
Операции с множеством:
```py
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
```
Операции со словарем:
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> 56 in dic1.values()
True
```
Ещё пример работы со словарем:
```py
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```
### 8.3. Создание больших логических выражений с использованием соединительных слов
Пример:
```py
>>> a=17
>>> b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
```
Ещё 2 примера сложных логических выражений:
```py
>>> (not (v==w) or ('flash-card' in mnoz1)) and Saratov in dic1
False
>>> (a + b != 11) and Kishinev in dic1
False
```
### 8.4. Проверка ссылок переменных на один и тот же объект
Примеры:
```py
>>> w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
>>> w is v
True
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1 is v1
False
```
В данном случае w1 и v1 ссылаются на два разных объекта в памяти.
## 9. Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например:
```py
>>> stroka='Микропроцессорная система управления'
>>>dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
### 9.1. Методы для работы со строками
Рассмотрим несколько примеров таких методов:
```py
>>> stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
>>> stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>> stroka3
'Микропроцессорная система управления'
>>> stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
```
Выведем справку по методу format:
```py
>>> help(format)
Help on built-in function format in module builtins:
format(value, format_spec='', /)
Return value.__format__(format_spec)
format_spec defaults to the empty string.
See the Format Specification Mini-Language section of help('FORMATTING') for
details.
```
Форматирование строки осуществляется в случае, если необходимо в символьную строку подставить значения некоторых объектов, например, полученных в ходе выполнения программы. Часто такую строку затем используют для вывода результатов работы программы на экран или в файл протокола.
Например:
```py
>>> strk1='Момент времени {}, значение = {}'
>>> strk1
'Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
>>> strk3='Момент времени {num}, значение = {znch}'
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2. Методы для работы со списками
Примеры использования методов:
```py
>>> spsk = ['Я', 'рыба', 222, strk2, '11']
>>> dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> spsk.pop(2) #Показывает элемент с индексом 2 и удаляет его
222
>>> spsk.append('c') #Добавляет в конец списка 'c'
>>> spsk
['Я', 'рыба', 'Момент времени {1}, значение = {0}:{2}', '11', 'c']
>>> spsk.insert(2,'a') #На место с индексом 2 ставит элемент 'a'
>>> spsk
['Я', 'рыба', 'a', 'Момент времени {1}, значение = {0}:{2}', '11', 'c']
>>> spsk.count('a') #Считает кол-во элементов 'a' в списке
1
```
### 9.3. Методы для работы с кортежами
```py
>>> my_tuple = (10, 20, 30, 20, 40, 50, 20, 'hello', 3.14)
>>> my_tuple.count(20)
3
>>> my_tuple.index(20)
1
```
У кортежа всего 2 метода: index - ищет индекс первого вхождения элемента, count - считает кол-во вхождений этого элемента.
### 9.4. Методы для работы со словарями и множествами
Методы работы со словарями:
```py
>>> my_dict = {'name': 'Yura','age': 19,'city': 'Shelkovo','country': 'Russia','hobby': 'gaming'}
>>> my_dict.keys() #Получить все ключи
dict_keys(['name', 'age', 'city', 'country', 'hobby'])
>>> my_dict.values() #Получить все значения
dict_values(['Yura', 19, 'Shelkovo', 'Russia', 'gaming'])
>>> my_dict.items() #Получить пары ключ-значение
dict_items([('name', 'Yura'), ('age', 19), ('city', 'Shelkovo'), ('country', 'Russia'), ('hobby', 'gaming')])
>>> my_dict.get('name') #Безопасное получение значения
'Yura'
>>> my_dict.pop('city') #Удалить элемент и вернуть его значение
'Shelkovo'
>>> my_dict.popitem() #Удалить и вернуть последнюю пару
('hobby', 'gaming')
>>> my_dict.update({'age': 20, 'language': 'Python'}) #Обновить словарь
>>> my_dict
{'name': 'Yura', 'age': 20, 'country': 'Russia', 'language': 'Python'}
>>> skill = my_dict.setdefault('skill', 'Beginner') #Получить значение или установить по умолчанию
>>> my_dict
{'name': 'Yura', 'age': 20, 'country': 'Russia', 'language': 'Python', 'skill': 'Beginner'}
>>> age = my_dict.setdefault('age', 30)
>>> my_dict
{'name': 'Yura', 'age': 20, 'country': 'Russia', 'language': 'Python', 'skill': 'Beginner'}
>>> my_dict.clear() #Очистить словарь
>>> my_dict
{}
>>> my_dict = {'a': 1, 'b': 2}
>>> dict_copy = my_dict.copy() #Создать копию словаря
>>> dict_copy
{'a': 1, 'b': 2}
```
Методы работы с множествами:
```py
>>> my_set = {1, 2, 3, 4, 5, 6}
>>> my_set.add(7) #Добавить элемент
>>> my_set
{1, 2, 3, 4, 5, 6, 7}
>>> my_set.remove(3) #Удалить элемент (м.б. с ошибкой)
>>> my_set
{1, 2, 4, 5, 6, 7}
>>> my_set.discard(10) #Удалить элемент без ошибки
>>> my_set
{1, 2, 4, 5, 6, 7}
>>> my_set.pop() #Удалить и вернуть случайный элемент
1
>>> my_set
{2, 4, 5, 6, 7}
>>> my_set.clear() #Очистить множество
>>> my_set
set()
>>> my_set = {1, 2, 3} #Создать копию
>>> set_copy = my_set.copy()
>>> set_copy
{1, 2, 3}
#Рассмотрим операции с двумя множествами
>>> set_a = {1, 2, 3, 4, 5}
>>> set_b = {4, 5, 6, 7, 8}
>>> set_a.union(set_b) #Объединение
{1, 2, 3, 4, 5, 6, 7, 8}
>>> set_a.intersection(set_b) #Пересечение
{4, 5}
>>> set_a.difference(set_b) #Разность
{1, 2, 3}
>>> set_a.symmetric_difference(set_b) #Симметричная разность
{1, 2, 3, 6, 7, 8}
>>> {1, 2}.issubset(set_a) #Проверочные методы
True
>>> set_a.issuperset({1, 2})
True
>>> set_a.isdisjoint({9, 10})
True
```
## 10. Закончил сеанс работы с IDLE.

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

@@ -0,0 +1,82 @@
# Общее контрольное задание по теме 3
Киреев Юрий, А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
1. Преобразовать восьмеричное значение 45 в целое число.
2. Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная вре-мени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
3. Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
4. Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
5. Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
6. Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
7. Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
1.
```py
>>> t=int('45',8)
>>> t
37
```
2.
```py
>>> D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
>>> D1 = list(D.keys())
>>> D2 = list(D.values())
>>> D1,D2
(['усиление', 'запаздывание', 'постоянная времени'], [23, 12, 78])
>>> T = tuple(D1 + D2)
>>> T
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
```
Объект-кортеж похож на список, но его нельзя изменить – кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки.
3.
```py
>>> ((1768//24.8)%3)**2.4
5.278031643091577
```
4.
```py
>>> ((~(13&27))^14)<<2
-32
```
5.
```py
>>> spis = ['колебат']*4
>>> spis
['колебат', 'колебат', 'колебат', 'колебат']
>>> 'аткол' in spis[1]+spis[2]
True
```
6.
```py
>>> 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])
```
7.
```py
>>> stroka = 'Создать объект - символьную строку с текстом данного предложения'
>>> spis2 = stroka.split(' ')
>>> spis2
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> spis2.pop(2)
>>> spis2[spis2.index("-")] = ","
>>> spis2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> spis2.remove('данного')
>>> spis2
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

@@ -0,0 +1,620 @@
# Отчёт по теме 4
Киреев Юрий А-02-23
## 1. Запуск интерактивной оболочки IDLE
В задании просят создать файл протокола, отчёт по лабораторной работе записан в файле report.md, который Вы сейчас читаете.
## 2. Стандартные функции
Они находятся в модуле builtins, который становится доступным без импорта при запуске среды IDLE.
### 2.1. Функция round
Получим справку по назначению этой функции.
```py
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
```
Попробуем использовать эту функцию на примерах:
```py
>>> round(123.456,1)
123.5
>>> round(123.456,0)
123.0
>>> type(round(123.456,1))
<class 'float'> #вещественный тип
>>> type(round(123.456,0))
<class 'float'>
```
Вычисления данной функции имеют вещественный тип, отличие в округлении.
Первое вычисление - округление до 1го знака после запятой, а второе - округление до запятой.
Попробуем выполнить такую инструкцию:
```py
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'> #целый тип
```
### 2.2. Функция range
Пример
```py
>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
```
Аргументами функции являются границы диапазона значений и шаг. При этом правая граница в создаваемую последовательность включена не будет.
Чтобы увидеть получившуюся последовательность чисел, его надо преобразовать, например, в список, обычным способом:
```py
>>> list(gg)
[76, 85, 94, 103, 112, 121]
```
Обратим внимание на возможность вызова функции range с одним аргументом:
```py
>>> range(23)
>>> range(0, 23)
>>> type(range(0, 23))
<class 'range'>
>>> list(range(0, 23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
Получился объект со значениями от 0 до 22, границы - от 0 до 23, где 23 - не включительно, шаг - 1.
Аргументами range(23) является граница и шаг 1.
### 2.3. Функция zip
Пример использования:
```py
>>> qq = ['Kireev', 'Bezhenar', 'Kuzmenko','Dobrovolska']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x0000023822FEA700>
>>> tuple(ff)
((76, 'Kireev'), (85, 'Bezhenar'), (94, 'Kuzmenko'), (103, 'Dobrovolska'))
```
Здесь получается «итерируемый объект» класса zip, поэтому, чтобы увидеть результат вычисления функции, превратили его в кортеж.
В кортеже получилось 4 элемента, что является минимальным числом элементов из gg и qq.
К объекту zip нельзя обратиться по индексу поскольку он не является последовательностью.
```py
>>> ff[1]
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
### 2.4. Функция eval
Пример использования
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=3.4
>>> dan
-139.0
```
### 2.5. Функция exec
Пример:
```py
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
```
### 2.6. Функции abs, pow, max, min, sum, divmod, len, map.
Покажем на примерах, за что отвечает каждая функция:
```py
>>> abs(-5) #Абсолютное значение
5
>>> pow(2,3) #Возведение в степень
8
>>> max(1,5,2,8) #Нахождение максимального значения
8
>>> min(1,5,2,8) #Нахождение минимального значения
1
>>> sum([1,5,2,8]) #Нахождение суммы
16
>>> divmod(15,4) #Нахождение частного и остатка от делния
(3, 3)
>>> len('Hello') #Нахождение длины объекта
5
>>> numbers = [1,2,3,4,5]
>>> string_numbers = list(map(str, numbers)) #map-применяет функцию (в данном случае str) к каждому элементу
>>> string_numbers
['1', '2', '3', '4', '5']
```
## 3. Функции из стандартного модуля math
Запустим модуль math с помощью инструкции:
```py
import math
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
```
Обращение к функциям из импортированного модуля осуществляется с указанием имени модуля, по образцу: <имя модуля>.<имя функции>(<аргументы функции>)
Изучим функцию расчёта факториала:
```py
>>> 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.
```
Попробуем использовать эту функцию:
```py
>>>math.factorial(5)
120
```
Аналогичным образом изучим и попробуем применить некоторые другие функции из этого модуля:
```py
>>> help(math.pi)
Help on float object:
class float(object)
| float(x=0, /)
|
| Convert a string or number to a floating point number, if possible.
... # огромная справка
| real
| the real part of a complex number
>>> 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/2)
1.0
>>>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
>>>help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
>>> math.degrees(2*math.pi)
360.0
>>> help(math.radians)
Help on built-in function radians in module math:
radians(x, /)
Convert angle x from degrees to radians.
>>> math.radians(180)
3.141592653589793
>>> help(math.exp)
Help on built-in function exp in module math:
exp(x, /)
Return e raised to the power of x.
>>> math.exp(5)
148.4131591025766
>>> 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
>>> 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
>>> help(math.sqrt)
Help on built-in function sqrt in module math:
sqrt(x, /)
Return the square root of x.
>>> math.sqrt(9)
3.0
>>> 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(3.14)
4
>>> 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(3.14)
3
```
## 4. Модуль cmath
Функции из модуля cmath – совокупность функций для работы с комплексными числами.
```py
>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(1.2-0.5j) #квадратный корень
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1-0.5j) #расчёт фазы
-0.4636476090008061
```
## 5. Модуль random
Стандартный модуль random – совокупность функций для выполнения операций с псевдослучайными числами и выборками.
```py
>>> 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']
```
Изучим функцию seed.
```py
>>> help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>> random.seed() #В настоящий момент начальное состояние для псевдослучайных чисел - это системное время
```
Попробуем самостоятельно изучить и применить некоторые функции:
```py
>>> 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.5183251743006774
>>> 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,2)
1.863883074901376
>>> 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, 10)
7
>>> 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(0,10)
-14.080852645068202
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.
>>> numbers = [1, 2, 3, 4, 5]
>>> random.choice(numbers)
5
>>> 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.
>>> random.shuffle(numbers)
>>> numbers
[3, 1, 4, 2, 5]
>>> 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(numbers,3)
[2, 5, 1]
>>> 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, 10)
0.0334849854614458
>>> 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(1,10)
21.801817565886562
```
Создадим список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
```py
rand_spis = [random.random(), random.uniform(1,2), random.betavariate(1, 10), random.gammavariate(1,10)]
rand_spis
[0.855682663095964, 1.3318533389175167, 0.08901765537251825, 5.945577224669993]
```
## 6. Модуль time
Работа с календарем и со временем.
```py
>>> import time
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
```
Изучим функцию time, возвращающую время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г.
```py
>>> c1=time.time()
>>> c1
1760885662.4458969
>>> c2=time.time()-c1 #время со ввода предыдущей инструкции
>>> c2
13.31933856010437
```
Изучим функцию gmtime:
```py
>>> help(time.gmtime)
Help on built-in function gmtime in module time:
gmtime(...)
gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,
tm_sec, tm_wday, tm_yday, tm_isdst)
Convert seconds since the Epoch to a time tuple expressing UTC (a.k.a.
GMT). When 'seconds' is not passed in, convert the current time instead.
If the platform supports the tm_gmtoff and tm_zone, they are available as
attributes only.
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=57, tm_sec=31, tm_wday=6, tm_yday=292, tm_isdst=0)
>>> dat.tm_mon
10
```
Для получения местного времени применим функцию localtime
```py
dat2 = time.localtime()
dat2
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=59, tm_sec=55, tm_wday=6, tm_yday=292, tm_isdst=0)
```
Попробуем изучить и применить другие функции модуля time:
```py
>>> help(time.asctime)
Help on built-in function asctime in module time:
asctime(...)
asctime([tuple]) -> string
Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime()
is used.
>>> time.asctime(dat)
'Sun Oct 19 14:57:31 2025'
>>> help(time.ctime)
Help on built-in function ctime in module time:
>>> ctime(...)
ctime(seconds) -> string
Convert a time in seconds since the Epoch to a string in local time.
This is equivalent to asctime(localtime(seconds)). When the time tuple is
not present, current time as returned by localtime() is used.
>>> time.ctime(c1)
'Sun Oct 19 17:54:22 2025'
help(time.sleep)
Help on built-in function sleep in module time:
sleep(...)
sleep(seconds)
Delay execution for a given number of seconds. The argument may be
a floating point number for subsecond precision.
time.sleep(1) #произошла пауза в IDLE на 1 секунду
>>> help(time.mktime)
Help on built-in function mktime in module time:
mktime(...)
mktime(tuple) -> floating point number
Convert a time tuple in local time to seconds since the Epoch.
Note that mktime(gmtime(0)) will not generally return zero for most
time zones; instead the returned value will either be equal to that
of the timezone or altzone attributes on the time module.
>>> time.mktime(dat)
1760875051.0
>>> time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=54, tm_sec=22, tm_wday=6, tm_yday=292, tm_isdst=0)
```
## 7. Графические функции
```py
>>> import pylab #импортируем модуль
>>> x=list(range(-3,55,4))
>>> t=list(range(15))
>>> x,t
([-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
>>> pylab.plot(t,x) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x00000208629323B0>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show() #Отображение графика на экране
```
Наш график:
![График](Ris1.PNG)
Сохранен в текущем каталоге с именем Ris1.
Рассмотрим способ построения нескольких графиков на одном рисунке:
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x00000208655097B0>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000020865509AB0>]
>>> pylab.show()
```
Графики:
![Рисунок2](Ris2.PNG)
Теперь изучим возможность построения круговой диаграммы:
```py
>>> region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>> naselen=[65,12,23,17] # Значения для диаграммы
>>> pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x000002086B0C6E60>, <matplotlib.patches.Wedge object at 0x000002086B0C6DA0>, <matplotlib.patches.Wedge object at 0x000002086B0C78B0>, <matplotlib.patches.Wedge object at 0x000002086B0C7DF0>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show() #Отображение диаграммы
```
![Диаграмма](Ris3.PNG)
Изучим отдельно функции hist и bar:
```py
>>> pylab.hist([1, 1, 1, 2, 2, 3], bins=3)
(array([3., 2., 1.]), array([1. , 1.66666667, 2.33333333, 3. ]), <BarContainer object of 3 artists>)
>>> pylab.show()
```
Гистограмма:
![Гистограмма](Ris4.PNG)
```py
>>> pylab.bar(region, naselen)
<BarContainer object of 4 artists>
>>> pylab.show()
```
Столбиковая диаграмма:
![Стобиковая диаграмма](Ris5.PNG)
## 8. Модуль statistic
```py
>>> import statistics
>>> dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_mean_stdev', '_normal_dist_inv_cdf', '_sqrt_bit_width', '_ss', '_sum', 'bisect_left', 'bisect_right', 'correlation', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'mul', 'multimode', 'namedtuple', 'numbers', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sqrt', 'stdev', 'sys', 'tau', 'variance']
>>> statistics.mean([1, 2, 3, 4, 5, 6, 7, 8, 9]) # Вычисление среднего
5
>>> statistics.stdev([1, 2, 3, 4, 5, 6, 7, 8, 9]) # Вычисление среднеквадратичного отклонения
2.7386127875258306
>>> statistics.median([1, 2, 3, 4, 5, 6, 7, 8]) # Вычисление медианы
4.5
```
## 9. Завершил сеанс работы с IDLE

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

@@ -0,0 +1,57 @@
# Общее контрольное задание по теме 4
Киреев Юрий А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
1. Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
2. Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
3. Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
4. Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
5. Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
6. Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
1.
```py
>>> import cmath
>>> divmod(round(cmath.phase(0.2+0.8j),2)*20,3)
(8.0, 2.6000000000000014)
```
2.
```py
>>> import time
>>> localTime = time.localtime()
>>> print("Current time: {}:{}".format(localTime.tm_hour, localTime.tm_min))
Current time: 19:52
```
3.
```
>>> Days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
>>> import random
>>> random.sample(Days, 3)
['Wednesday', 'Sunday', 'Friday']
```
4.
```py
>>> random.choice(range(14, 33, 3))
17
```
5.
```py
>>> import math
>>> N = math.floor(random.gauss(15, 4))
>>> N
10
import string
letters = random.sample(string.ascii_letters, N)
letters
['l', 'x', 'J', 'm', 'K', 'C', 'Z', 'c', 'L', 'G']
```
6.
```py
timediff = round(time.time() - time.mktime(localTime))
print(timediff // 60, "minutes and", timediff % 60, "seconds")
18 minutes and 51 seconds
```