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

..

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

Автор SHA1 Сообщение Дата
Пользователь № 6 аудитории Ж-115 5e4aed02c4 икз
1 месяц назад
Пользователь № 6 аудитории Ж-115 cda7a77dc1 икз
1 месяц назад
Пользователь № 6 аудитории Ж-115 6b5eb56023 икз
1 месяц назад
Пользователь № 6 аудитории Ж-115 13f8ef0c17 отчет
1 месяц назад
GoloshchapovDY 3da1dde586 отчет
1 месяц назад
GoloshchapovDY 6f9abe833f Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
1 месяц назад
GoloshchapovDY 9b4a8e108e отчет
1 месяц назад
Пользователь № 7 аудитории Ж-115 89381eb1f0 икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 f03e826fba икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 fcda4ca9f4 икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 004736f534 икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 a60618ec85 икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 053cf63996 отчет
2 месяцев назад
Пользователь № 7 аудитории Ж-115 3489ef8216 окз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 a5d82e4111 окз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 ba27609d1f отчет
2 месяцев назад
GoloshchapovDY d256a94a07 Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
2 месяцев назад
GoloshchapovDY ce36ec1458 отчет
2 месяцев назад
Пользователь № 7 аудитории Ж-115 e555e5cc3f икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 a2012c615f икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 502978c576 икз
2 месяцев назад
Пользователь № 7 аудитории Ж-115 0aa7a21443 отчет
2 месяцев назад
GoloshchapovDY 7f16803393 окз
2 месяцев назад
GoloshchapovDY c525dec81c Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
2 месяцев назад
GoloshchapovDY b0aef753ef отчет
2 месяцев назад
Пользователь № 12 аудитории Ж-115 8e69428e2f отчет
3 месяцев назад
Пользователь № 12 аудитории Ж-115 7d361db18e отчет
3 месяцев назад
Пользователь № 12 аудитории Ж-115 23a20e6f2c окз
3 месяцев назад
GoloshchapovDY 0b2f126266 Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
3 месяцев назад
GoloshchapovDY 535bf7dbe4 отчет
3 месяцев назад
Пользователь № 7 аудитории Ж-115 d134f5108b икз
3 месяцев назад
Пользователь № 7 аудитории Ж-115 7f58198e24 отчет
3 месяцев назад
Пользователь № 7 аудитории Ж-115 be76086d87 отчет
3 месяцев назад
GoloshchapovDY 46945f58b6 окз
3 месяцев назад
GoloshchapovDY 9445ebaa4f отчет
3 месяцев назад
GoloshchapovDY 28aad7c9ec Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-
3 месяцев назад
GoloshchapovDY b5f9fc830b отчет
3 месяцев назад
Пользователь № 7 аудитории Ж-115 3e03a94eb7 икз
4 месяцев назад
Пользователь № 7 аудитории Ж-115 4113c9e5b4 отчет
4 месяцев назад
Пользователь № 7 аудитории Ж-115 1adb53b8a2 модуль
4 месяцев назад
GoloshchapovDY 4b245c1571 отчет
4 месяцев назад
GoloshchapovDY fd95f946ed отчет
4 месяцев назад
GoloshchapovDY 04cb96ab68 отчет
4 месяцев назад
GoloshchapovDY e18ade923e отчет
4 месяцев назад
GoloshchapovDY 6cde9c8752 пр
4 месяцев назад
GoloshchapovDY 551aab0ea7 Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
4 месяцев назад
GoloshchapovDY ef4a1b5138 отчет
4 месяцев назад
Пользователь № 7 аудитории Ж-115 2978dcfae9 икз
4 месяцев назад
Пользователь № 7 аудитории Ж-115 6a80a6e488 отчет
4 месяцев назад
GoloshchapovDY ff6aa14b50 отчет
4 месяцев назад
GoloshchapovDY cdc4a67a0d отчет
4 месяцев назад
GoloshchapovDY 5079218d95 отчет
4 месяцев назад
GoloshchapovDY 2e8f3ffa3d отчет
4 месяцев назад
GoloshchapovDY 96a5e93641 Merge branch 'main' of http://uit.mpei.ru/git/GoloshchapovDY/python-labs
4 месяцев назад
GoloshchapovDY a272b33871 отчет
4 месяцев назад
Пользователь № 7 аудитории Ж-115 5b8c2a36c3 окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 00c3e8a5c8 окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 151856a8db окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 8ca9c2f928 окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 e7fbd5cbe3 окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 23198c0e3d окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 b5d142143e окз
5 месяцев назад
Пользователь № 7 аудитории Ж-115 c806a81a72 отчет
5 месяцев назад
Пользователь № 7 аудитории Ж-115 eecf8053bd кв
5 месяцев назад
Пользователь № 7 аудитории Ж-115 5567c41c77 отчет
5 месяцев назад
Пользователь № 7 аудитории Ж-115 f37ab5c261 отчет
5 месяцев назад
Пользователь № 7 аудитории Ж-115 2d168d9324 отчет
5 месяцев назад
GoloshchapovDY e2633362b4 команды
5 месяцев назад
GoloshchapovDY 713865f3f3 команды
5 месяцев назад
GoloshchapovDY ecce18d3eb окз
5 месяцев назад
GoloshchapovDY 390a2d64ba отчет
5 месяцев назад
GoloshchapovDY de0eb4286b отчет
5 месяцев назад
GoloshchapovDY 9e7891884a отчет
5 месяцев назад
GoloshchapovDY 448d0c7dbe :протокол
5 месяцев назад
GoloshchapovDY e480b3a8a5 команды
5 месяцев назад
GoloshchapovDY 731adf6feb отчет
5 месяцев назад

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

@ -6,7 +6,7 @@
## 1.1 Настройка текущего каталога
```py
```
>>> import os
>>> os.chdir(r"C:\users\u111-19\Desktop\python\TEMA1")
>>> os.getcwd()

@ -0,0 +1,5 @@
#Программа по Теме 1 <Голощапов Дмитрий Евгеньевич>
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')

@ -0,0 +1,62 @@
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
# Протокол по Теме 1 <Голощапов Дмитрий Евгеньевич>
print('Hello')
Hello
h=input('Your name=')
Your name=Dima
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
import Pr0
Hello
Your name=
import prb1
Как Вас зовут? Дима
Привет, Дима
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)
import tdemo_chaos

@ -0,0 +1,188 @@
# Отчет по теме 1
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
На рабочем столе создана папка Goloshchapov. После этого с помощью команды git clone http://uit.mpei.ru/git/GoloshchapovDY/python-labs.git мы клонируем форк репозитария в эту папку.
# 2 Знакомство с интерпретатором
Запущен интерпретатор Python 3.10
# 3 Введение пробных команд
>>>print("hello")
hello
# 4 Вводим еще одну инструкцию
>>>h = input('Your name = ')
Your name = Dima
>>>h
'Dima'
# 5 Завершение работы интерпретатора
>>>exit()
# 6-7
Запущена IDLE Python 3.10, изучено устройство главного командного окна
среды
# 8 Настройка рабочего каталога
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
# 9 Настройки(Options)
Шрифт изменен на Arial CYR, размер 11, размер начального окна 50*100 символов,
комментарии подсвечиваются коричневым
# 10 Создание текстового файла IDLE
В текстовом редакторе IDLE создана программа следующего содержания:
#Программа по теме 1 <Голощапов Дмитрий Евгеньевич>
>>>print('Hello')
>>>h=input('Your name=')
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
Она делает следующий вывод:
======= RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.py ======
Hello
Your name=
Другой вариант запуска:
>>>import Pr0
hello
Your name =
При нажатии f5 в активном окне редактора:
======= RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.py ======
hello
Your name =
# 11 Запуск программы из рабочего каталога
Из консоли вызван файл prb1.py
>>>import prb1
Как Вас зовут? Dima
Привет, Dima
# 12 Изучение рабочего каталога
Файл Pr0.cpython-310.pyc открыт в Блокноте.
o
ЛFёhэ г  @ s& e d ѓ edѓZddlZe dЎ dS )ZHelloz
Your name=й NuW C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1)ЪprintЪinputЪosЪchdir© r r х^ C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.pyЪ<module> s 
При выполнении скрипта Python сначала
преобразовывает его в байт-код (.рус), а затем уже он выполняется с
помощью виртуальный машины. Это ускорит повторную загрузку программы, так как будет пропущен этап преобразования в байт-код, и виртуальная машина сможет напрямую выполнить байт-код.
# 13 Создание отдельного файла для команд и результатов их выполнения
Все верные команды из командного окна IDLE скопированы в отдельный файл
# 14 Изучение раздела помощи (Help) главного меню.
В разделе помощи help можно найти следующие опции:
About IDLE - описание характеристик текущей среды (версия, путь и пр.)
IDLE Help - помощь по работе со средой
Python Docs - документация по языку
Turtle Demo - окно работы и помощь модуля для работы с графикой turtle
Проверка команд:
>>>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)
F1 -> Указатель -> print() (built-in function) выводит справку по этой
функции
То же диалоговое окно появляется при help - Python Docs
# 15 Изучение перехода между окнами с помощью «Окна (Window)»
File - Open - prb1.py
С помощью Window можно переключаться между всеми открытыми окнами
prb1.py - Run
====== RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\prb1.py ======
Как Вас зовут? Dima
Привет, Dima
>>>import tdemo_chaos
Help - Turtle Demo - clock - Start выводит на экран графическое представление
программы - циферблат с часами. Есть и другие примеры программ модуля turtle,
которые можно брать за основу собственных программ, изменять или реализовывать
свои идеи.
# 16. Завершена работа со средой: File - exit

@ -0,0 +1,178 @@
#Отчет по теме 1
Голощапов Дмитрий, А-01-23
#Пункт 1
В папку C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1 перенесены материалы
и распакован архив Tema1.rar
#Пункт 2
Запущен интерпретатор Python 3.10
#Пункт 3
>>> print("hello")
hello
#Пункт 4
>>> h = input('Your name = ')
Your name = Dima
>>> h
'Dima'
#Пункт 5 Завершение работы интерпретатора
>>> exit()
#Пункты 6-7
Запущена IDLE Python 3.10, изучено устройство главного командного окна
среды
#Пункт 8 Настройка рабочего каталога
>>> import os
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
#Пункт 9 Настройки(Options)
Шрифт изменен на Arial CYR, размер 11, размер начального окна 50*100 символов,
комментарии подсвечиваются коричневым
#Пункт 10
В текстовом редакторе IDLE создана программа следующего содержания:
#Программа по теме 1 <Голощапов Дмитрий Евгеньевич>
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
Она делает следующий вывод:
======= RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.py ======
Hello
Your name=
Другой вариант запуска:
>>> import Pr0
hello
Your name =
При нажатии f5 в активном окне редактора:
======= RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.py ======
hello
Your name =
#Пункт 11
Из консоли вызван файл prb1.py
>>> import prb1
Как Вас зовут? Dima
Привет, Dima
#Пункт 12
Файл Pr0.cpython-310.pyc открыт в Блокноте.
o
ЛFёhэ г  @ s& e d ѓ edѓZddlZe dЎ dS )ZHelloz
Your name=й NuW C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1)ЪprintЪinputЪosЪchdir© r r х^ C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\Pr0.pyЪ<module> s 
Видно, что
разультат компиляции тяжел для восприятия человеком, вероятно, из-за
несоответствия кодировок. Комплиляция программ необходима, чтобы
перевести команды из человекопонятной формы в машинный код, который
может быть обработан процессором. При выполнении скрипта Python сначала
преобразовывает его в байт-код (.рус), а затем уже он компилируется с
помощью виртуальный машины. Это ускорит повторную загрузку программы.
#Пункт 13
Все верные команды из командного окна IDLE скопированы в отдельный файл
#Пункт 14
В разделе помощи help можно найти следующие опции:
About IDLE - описание характеристик текущей среды (версия, путь и пр.)
IDLE Help - помощь по работе со средой
Python Docs - документация по языку
Turtle Demo - окно работы и помощь модуля для работы с графикой turtle
>>> 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)
F1 -> Указатель -> print() (built-in function) выводит справку по этой
функции
То же диалоговое окно появляется при help - Python Docs
#Пункт 15
File - Open - prb1.py
С помощью Window можно переключаться между всеми открытыми окнами
prb1.py - Run
====== RESTART: C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA1\prb1.py ======
Как Вас зовут? Dima
Привет, Dima
>>> import tdemo_chaos
Help - Turtle Demo - clock - Start выводит на экран графическое представление
программы - циферблат с часами. Есть и другие примеры программ модуля turtle,
которые можно брать за основу собственных программ, изменять или реализовывать
свои идеи.
16. Завершена работа со средой: File - exit

@ -0,0 +1,13 @@
# Контрольный вопрос №11 по теме 1
Голощапов Дмитрий, А-01-23
# Вопрос:
В каком месте инструкции можно написать комментарий?
# Ответ:
Комментарий можно написать в любой месте строки, но он должен начинаться с символа #.
Весь текст после # до конца строки будет считаться комментарием и игнорироваться интерпретатором.
Комментарий можно разместить как на отдельной строке, так и после инструкции.

@ -0,0 +1,731 @@
# Протокол лабораторной работы 2 Голощапов Дмитрий Евгеньевич
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
f1 = 16; f2 = 3
f1, f2
(16, 3)
f1; f2
16
3
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
dir (f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
type(f2)
<class 'int'>
del f1, f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
gg1 = 1.6
gg1
1.6
hh1 = 'example'
hh1
'example'
73sr = 3
SyntaxError: invalid decimal literal
and = 7
SyntaxError: invalid syntax
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']
type(kwd)
<class 'list'>
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', 'S
ystemExit', '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(-5)
5
len([1, 2, 3])
3
max(14, 8)
14
min (15, 0)
0
pow (5, 2)
25
round (3,124)
3
sum ([7, 3, 5])
15
sorted ([3, 7, 9, 75, 0, -1])
[-1, 0, 3, 7, 9, 75]
list1 = [1, 2, 3]
list2 = [4, 5, 6]
zip (list1, list2)
<zip object at 0x0000019F7EA6E700>
list(zipped)
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
list(zipped)
NameError: name 'zipped' is not defined
Gg1 = 45
gg1, Gg1
(1.6, 45)
gg1 == Gg1
False
bb1 = True
SyntaxError: unexpected indent
KeyboardInterrupt
bb1 = True
bb2 = False
type(bb1)
<class 'bool'>
ii1=-1234567890
type(ii1)
<class 'int'>
ff1 = 8.987e-12
type(ff1)
<class 'float'>
dv1 = 0b1100101
type(dv1)
<class 'int'>
vsm1 = 0o52765
type(vsm1)
<class 'int'>
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'>
ss1 = "Это - строка символов"
ss2 = 'Это - строка символов'
ss1 == ss2
True
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
print(ss1b)
Меня зовут:
Голощапов Д.Е.
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
ss1[6:9]
'стр'
ss1[13:]
'символов'
ss1[:13]
'Это - строка '
ss1[5:-8]
' строка '
ss1[3:17:2]
' тоасм'
ss1[17:3:-2]
'омсаот '
ss1[-4:3:-2]
'омсаот '
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
ss1=ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
ss1b[-1]
'.'
ss1b_cut = ss1b [::-1]
ss1b_cut
'.Е.Д вопащолоГ \n :тувоз янеМ'
num10 = 26
type(num10)
<class 'int'>
num16 = hex(num10)
num16
'0x1a'
type(num16)
<class 'str'>
str1 = str(num10) + ' в десятичной - это ' + str(num16) + ' в шестнадцатеричной '
str1
'26 в десятичной - это 0x1a в шестнадцатеричной '
str1[5:16:3]
'дячй'
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(spis1)
3
help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
spis1.append('New item')
spis1
[111, 'Список', (5-9j), 'New item']
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
spis1
[111, 'Список', (5-9j), 'New item']
spis1 += ss1b
spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
spis1 = [111, 'Список', (5-9j), 'New item']
spis1.append(ss1b)
spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.pop(7)
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
spis1.pop(7)
IndexError: pop index out of range
help(spis1.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
spis1.insert(2, "hello")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.insert(8, "test")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
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), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
spis1.remove('kitten')
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
spis1.remove('kitten')
ValueError: list.remove(x): x not in list
help(spis1.extend)
Help on built-in function extend:
extend(iterable, /) method of builtins.list instance
Extend list by appending elements from the iterable.
end1 = [123, "mew", (1,2)]
spis1.extend(end1)
spis1
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
end1.clear()
end1
[]
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.
end1 = [5, 6, 9.99999, 384, 0, -5]
end1.sort(key = abs, reverse = True)
end1
[384, 9.99999, 6, 5, -5, 0]
help(end1.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
endcopy = end1.copy()
endcopy
[384, 9.99999, 6, 5, -5, 0]
help(endcopy.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.
endcopy.index(0)
5
endopy.index("lalala")
Traceback (most recent call last):
File "<pyshell#142>", line 1, in <module>
endopy.index("lalala")
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
help(endcopy.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
endcopy.count(5)
1
endcopy.count(666666)
0
spis2=[spis1,[4,5,6,7]]
spis2
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
spis2[0][1]
'hello'
spis2[0][1]=78
spis2
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
spis1
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1
(222, 'Kortezh', (77+8j), 1, 2)
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
kort1.index(2)
4
kort1.count(222)
1
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
kortstr
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
type(kortstr[5])
<class 'tuple'>
type(kortstr[4])
<class 'list'>
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
dic1[1]
Traceback (most recent call last):
File "<pyshell#168>", line 1, in <module>
dic1[1]
KeyError: 1
dic1['Orel']
56
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic3['statistics'][2]
'standart deviation'
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
count_list = ["one", "two", "three", "four", "five"]
terms_dict = dict(zip(count_list, terms_tuple))
terms_dict
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz1
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
mnoz2 = {'спичка', 15, False, 'gear'}
mnoz2
{False, 'спичка', 'gear', 15}
len(mnoz2)
4
mnoz2.remove(15)
mnoz2
{False, 'спичка', 'gear'}

@ -0,0 +1,406 @@
#Протокол лабораторной работы 2 Голощапов Дмитрий Евгеньевич
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
f1 = 16; f2 = 3
f1, f2
(16, 3)
f1; f2
16
3
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
dir (f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
type(f2)
<class 'int'>
del f1, f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
gg1 = 1.6
gg1
1.6
hh1 = 'example'
hh1
'example'
73sr = 3
SyntaxError: invalid decimal literal
and = 7
SyntaxError: invalid syntax
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']
type(kwd)
<class 'list'>
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(-5)
5
len([1, 2, 3])
3
max(14, 8)
14
min (15, 0)
0
pow (5, 2)
25
round (3,124)
3
sum ([7, 3, 5])
15
sorted ([3, 7, 9, 75, 0, -1])
[-1, 0, 3, 7, 9, 75]
list1 = [1, 2, 3]
list2 = [4, 5, 6]
zip (list1, list2)
<zip object at 0x0000019F7EA6E700>
list(zipped)
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
list(zipped)
NameError: name 'zipped' is not defined
Gg1 = 45
gg1, Gg1
(1.6, 45)
gg1 == Gg1
False
bb1 = True
SyntaxError: unexpected indent
KeyboardInterrupt
bb1 = True
bb2 = False
type(bb1)
<class 'bool'>
ii1=-1234567890
type(ii1)
<class 'int'>
ff1 = 8.987e-12
type(ff1)
<class 'float'>
dv1 = 0b1100101
type(dv1)
<class 'int'>
vsm1 = 0o52765
type(vsm1)
<class 'int'>
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'>
ss1 = "Это - строка символов"
ss2 = 'Это - строка символов'
ss1 == ss2
True
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
print(ss1b)
Меня зовут:
Голощапов Д.Е.
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
ss1[6:9]
'стр'
ss1[13:]
'символов'
ss1[:13]
'Это - строка '
ss1[5:-8]
' строка '
ss1[3:17:2]
' тоасм'
ss1[17:3:-2]
'омсаот '
ss1[-4:3:-2]
'омсаот '
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
ss1=ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
ss1b[-1]
'.'
ss1b_cut = ss1b [::-1]
ss1b_cut
'.Е.Д вопащолоГ \n :тувоз янеМ'
num10 = 26
type(num10)
<class 'int'>
num16 = hex(num10)
num16
'0x1a'
type(num16)
<class 'str'>
str1 = str(num10) + ' в десятичной - это ' + str(num16) + ' в шестнадцатеричной '
str1
'26 в десятичной - это 0x1a в шестнадцатеричной '
str1[5:16:3]
'дячй'
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(spis1)
3
help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
spis1.append('New item')
spis1
[111, 'Список', (5-9j), 'New item']
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
spis1
[111, 'Список', (5-9j), 'New item']
spis1 += ss1b
spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
spis1 = [111, 'Список', (5-9j), 'New item']
spis1.append(ss1b)
spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.pop(7)
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
spis1.pop(7)
IndexError: pop index out of range
help(spis1.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
spis1.insert(2, "hello")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.insert(8, "test")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
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), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
spis1.remove('kitten')
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
spis1.remove('kitten')
ValueError: list.remove(x): x not in list
help(spis1.extend)
Help on built-in function extend:
extend(iterable, /) method of builtins.list instance
Extend list by appending elements from the iterable.
end1 = [123, "mew", (1,2)]
spis1.extend(end1)
spis1
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
end1.clear()
end1
[]
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.
end1 = [5, 6, 9.99999, 384, 0, -5]
end1.sort(key = abs, reverse = True)
end1
[384, 9.99999, 6, 5, -5, 0]
help(end1.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
endcopy = end1.copy()
endcopy
[384, 9.99999, 6, 5, -5, 0]
help(endcopy.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.
endcopy.index(0)
5
endopy.index("lalala")
Traceback (most recent call last):
File "<pyshell#142>", line 1, in <module>
endopy.index("lalala")
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
help(endcopy.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
endcopy.count(5)
1
endcopy.count(666666)
0
spis2=[spis1,[4,5,6,7]]
spis2
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
spis2[0][1]
'hello'
spis2[0][1]=78
spis2
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
spis1
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1
(222, 'Kortezh', (77+8j), 1, 2)
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
kort1.index(2)
4
kort1.count(222)
1
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
kortstr
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
type(kortstr[5])
<class 'tuple'>
type(kortstr[4])
<class 'list'>
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
dic1[1]
Traceback (most recent call last):
File "<pyshell#168>", line 1, in <module>
dic1[1]
KeyError: 1
dic1['Orel']
56
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic3['statistics'][2]
'standart deviation'
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
count_list = ["one", "two", "three", "four", "five"]
terms_dict = dict(zip(count_list, terms_tuple))
terms_dict
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz1
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
mnoz2 = {'спичка', 15, False, 'gear'}
mnoz2
{False, 'спичка', 'gear', 15}
len(mnoz2)
4
mnoz2.remove(15)
mnoz2
{False, 'спичка', 'gear'}

@ -0,0 +1,683 @@
# Отчет по теме 2
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
# 2. Изучение простых объектов
Создадим два простых объекта - переменные f1 и f2. Это можно сделать в одну строку:
>>>f1 = 16; f2 = 3
Можно вывести эти переменные через запятую. Тогда они будут отображены как кортеж:
>>>f1, f2
(16, 3)
Или через точку с запятой. Тогда друг за другом:
>>>f1; f2
16
3
Функция dir() покажет, какие объекты находятся в текущем рабочем пространстве:
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
Еще эта функция может показать атрибуты объекта:
>>>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 f1, f2
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
# 3. Изучение правила именования объектов в Python.
>>>gg1 = 1.6
>>>gg1
1.6
>>>hh1 = 'example'
>>>hh1
'example'
>>>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']
>>>type(kwd)
<class 'list'>
# 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(-5)
5
Длина списка:
>>>len([1, 2, 3])
3
Выбор максимального и минимального значения:
>>>max(14, 8)
14
>>>min (15, 0)
0
Возведение в степень:
>>>pow (5, 2)
25
Округление до целого:
>>>round (3,124)
3
Сортировка по возрастанию(можно применить reverse = True для сортировки по убыванию):
>>>sorted ([3, 7, 9, 75, 0, -1])
[-1, 0, 3, 7, 9, 75]
Суммирование:
>>>sum ([7, 3, 5])
15
Объединение последовательности объектов в последовательность кортежей:
>>>list1 = [1, 2, 3]
>>>list2 = [4, 5, 6]
>>>zip (list1, list2)
<zip object at 0x0000019F7EA6E700>
>>> result=zip (list1, list2)
>>> list(result)
[(1, 4), (2, 5), (3, 6)]
# 6. Пример того, что Python - регистрочувствительный язык.
>>>Gg1 = 45
>>>gg1, Gg1
(1.6, 45)
>>>gg1 == Gg1
False
Таким образом, большая и маленькая буква одной и той же буквы в начале имеют различие в имени переменной, так как получилось два разных объекта
# 7. Изучение простых базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
## 7.1.Логический тип.
>>>bb1 = True
>>>bb2 = 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 = "Это - строка символов"
>>>ss2 = 'Это - строка символов'
>>>ss1 == ss2
True
Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \, ', ", \t, \n и другие. Пример:
>>>ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>>print(ss1a)
Это - " строка символов ",
выводимая на двух строках
Создадим строку по шаблону:
>>>ss1b = 'Меня зовут: \n Голощапов Д.Е.'
>>>print(ss1b)
Меня зовут:
Голощапов Д.Е.
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например:
>>>mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
>>>print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки. Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например:
>>>ss1[0]
'Э'
>>>ss1[8]
'р'
>>>ss1[-2]
'о'
Операция «разрезания» или «создания среза», создающая новый объект:
>>>ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!)
'стр'
>>>ss1[13:] #Это часть строки – с 13-го индекса и до конца
'символов'
>>>ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно
'Это - строка '
>>>ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца
' строка '
>>>ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2
' тоасм'
Обратим внимание на то, что в срезе указываются не позиции элементов, а их индексы и что указываемая правая граница в срез не включается.
Значение при отрицательном значении шага:
>>>ss1[17:3:-2]
'омсаот '
При замене 17 на -4 получается такой же результат:
>>>ss1[-4:3:-2]
'омсаот '
Строка является неизменяемым объектом. Попробуем, например, инструкцию
>>>ss1[4]='='
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
Однако, можно это сделать по-другому, переопределив её:
>>>ss1=ss1[:4]+'='+ss1[5:]
>>>ss1
'Это = строка символов'
С использованием ранее созданной строки ss1b попробуем создать объекты с разными срезами исходной строки.
>>>ss1b[-1]
'.'
>>>ss1b_cut = ss1b [::-1]
>>>ss1b_cut
'.Е.Д вопащолоГ \n :тувоз янеМ'
Самостоятельное создание объектов разных типов. Отображение типов и значений созданных объектов.
>>>num10 = 26
>>>type(num10)
<class 'int'>
>>>num16 = hex(num10)
>>>num16
'0x1a'
>>>type(num16)
<class 'str'>
# 8. Списки (list), кортежи (tuple), словари (dict), множества (set).
## 8.1. Список list - изменяемый тип данных. Это упорядоченная последовательность из элементов
одного или разных типов.
Пример списка с 3 элементами разных типов:
>>>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']
>>>spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
>>>spis1
[111, 'Список', (5-9j), 'New item']
Обратим внимание на то, что в этой инструкции новый список только отображается, но не сохраняется.
Добавим в конец списка spis1 строку ss1b и отобразите список:
>>>spis1 += ss1b
>>>spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
>>>spis1 = [111, 'Список', (5-9j), 'New item']
>>>spis1.append(ss1b)
>>>spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
Удаление элемента:
>>>spis1.pop(1)
'Список'
>>>spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
Для insert (Вставка элемента в определенное место по индексу):
>>>help(spis1.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
>>>spis1.insert(2, "hello")
>>>spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
>>>spis1.insert(8, "test")
>>>spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
Для 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), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
>>>spis1.remove('kitten')
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
Для 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.
>>>end1 = [123, "mew", (1,2)]
>>>spis1.extend(end1)
>>>spis1
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
Для clear (Полное очищение списка):
>>>help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
>>>end1.clear()
>>>end1
[]
Для 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.
>>>end1 = [5, 6, 9.99999, 384, 0, -5]
>>>end1.sort(key = abs, reverse = True)
>>>end1
[384, 9.99999, 6, 5, -5, 0]
Для copy (Создание копии списка):
>>>help(end1.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
>>>endcopy = end1.copy()
>>>endcopy
[384, 9.99999, 6, 5, -5, 0]
Для index (Поиск индекса по значению):
>>>help(endcopy.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.
>>>endcopy.index(0)
5
>>>endopy.index("lalala")
Traceback (most recent call last):
File "<pyshell#142>", line 1, in <module>
endopy.index("lalala")
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
Для count (Подсчет количества элементов по значению):
>>>help(endcopy.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
>>>endcopy.count(5)
1
>>>endcopy.count(666666)
0
Списки могут быть вложенными:
>>>spis2=[spis1,[4,5,6,7]]
>>>spis2
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
Обращение к элементам вложенного списка:
>>>spis2[0][1]
'hello'
Изменение элемента вложенного списка:
>>>spis2[0][1]=78
>>>spis2
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
>>>spis1
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
Видим, что spis1 тоже изменился. Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, поэтому его изменения в составе spis2 отображаются на исходном spis1.
Создание своего списка - объекта:
>>>spis3 = [100, 'Test', True, spis1]
>>>spis3
[100, 'Test', True, [(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]]
## 8.2.Кортеж: последовательность как список, но неизменяемая как строка.
Примеры операций с кортежами: создание кортежа:
>>>kort1=(222,'Kortezh',77+8j)
Изменить кортеж нельзя, но можно его переопределить:
>>>kort1= kort1+(1,2)
>>>kort1
(222, 'Kortezh', (77+8j), 1, 2)
Если надо добавить еще один элемент в кортеж:
>>>kort1= kort1+(ss1b,)
>>>kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
Теперь переопределим кортеж с удалением комплексного элемента:
>>>kort2=kort1[:2]+kort1[3:]
>>>kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
Два важных метода кортежа (они есть также и у списков):
• Определение индекса заданного элемента:
>>>kort1.index(2)
4
• Подсчет числа вхождений заданного элемента в кортеже:
>>>kort1.count(222)
1
Методов append и pop у кортежей нет, т.к. они являются неизменяемыми. Попробуем операцию замены элемента кортежа:
>>>kort1[2]=90
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
Создание объекта-кортежа с элементами разных типов: число, строка, список, кортеж.
>>>kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
>>>kortstr
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
>>>type(kortstr[5])
<class 'tuple'>
>>>type(kortstr[4])
<class 'list'>
## 8.3. Словарь (dictionary) - содержит в себе совокупность пар
"ключ (key) (неизменяемый)": "значение (value) (любого типа)"
Пример создания словаря:
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
Обращение к элементам словаря не по индексам, а по ключам:
>>>dic1['Orel']
56
Пополнение словаря (добавление элемента, изменение словаря):
>>>dic1['Pskov']=78
>>>dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря. Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям:
>>>sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
>>>sorted(dic1.values())
[45, 56, 78, 145]
Элементы словаря могут быть любого типа, в том числе и словарями. Например,создадим словарь:
>>>dic2={1:'mean',2:'standart deviation',3:'correlation'}
>>>dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
>>>dic3['statistics'][2]
'standart deviation'
Создадим более сложный словарь из списка с элементами-кортежами с использованием функции dict:
>>>dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
>>>dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
>>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
>>>dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
Самостоятельно придумайте объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. Сколько элементов в получившемся словаре? Объясните это число.
>>>terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
>>>count_list = ["one", "two", "three", "four", "five"]
>>>terms_dict = dict(zip(count_list, terms_tuple))
>>>terms_dict
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
Как мы видим длина словаря составляет 5 объектов. Это связано с функцией zip, которая делает так, что длина итогового объекта будет соответствовать минимальной длине составляющего.
## 8.4. Множество: состоят из НЕповторяющихся неизменяемых элементов
Пример создания множества:
>>>mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>>mnoz1
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
В созданном множестве дубликаты элементов были автоматически удалены.
Некоторые операции с множеством:
определение числа элементов
>>>len(mnoz1)
4
проверка наличия элемента во множестве
>>>'датчик' in mnoz1
True
добавление и удаление элемента
>>>mnoz1.add('реле')
>>>mnoz1.remove('линия связи')
>>>mnoz1
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
Объект-множество с элементами разных типов
>>>mnoz2 = {'спичка', 15, False, 'gear'}
>>>mnoz2
{False, 'спичка', 'gear', 15}
>>>len(mnoz2)
4
>>>mnoz2.remove(15)
mnoz2
{False, 'спичка', 'gear'}
# 9. Завершение работы в среде IDLE.

@ -0,0 +1,683 @@
# Отчет по теме 2
Голощапов Дмитрий, А-01-23
# Пункт 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
import os
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
# Пункт 2. Изучение простых объектов
Создадим два простых объекта - переменные f1 и f2. Это можно сделать в одну строку:
f1 = 16; f2 = 3
Можно вывести эти переменные через запятую. Тогда они будут отображены как кортеж:
f1, f2
(16, 3)
Или через точку с запятой. Тогда друг за другом:
f1; f2
16
3
Функция dir() покажет, какие объекты находятся в текущем рабочем пространстве:
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
Еще эта функция может показать атрибуты объекта:
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 f1, f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
# Пункт 3. Изучение правила именования объектов в Python.
gg1 = 1.6
gg1
1.6
hh1 = 'example'
hh1
'example'
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']
type(kwd)
<class 'list'>
# Пункт 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(-5)
5
Длина списка:
len([1, 2, 3])
3
Выбор максимального и минимального значения:
max(14, 8)
14
min (15, 0)
0
Возведение в степень:
pow (5, 2)
25
Округление до целого:
round (3,124)
3
Сортировка по возрастанию(можно применить reverse = True для сортировки по убыванию):
sorted ([3, 7, 9, 75, 0, -1])
[-1, 0, 3, 7, 9, 75]
Суммирование:
sum ([7, 3, 5])
15
Объединение объектов в кортеж (возвращается указатель на участок памяти):
list1 = [1, 2, 3]
list2 = [4, 5, 6]
zip (list1, list2)
<zip object at 0x0000019F7EA6E700>
Это итератор - указатель на объект памяти.
# Пункт 6. Пример того, что Python - регистрочувствительный язык.
Gg1 = 45
gg1, Gg1
(1.6, 45)
gg1 == Gg1
False
# Пункт 7. Изучение простых базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
## 7.1.Логический тип.
bb1 = True
bb2 = 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 = "Это - строка символов"
ss2 = 'Это - строка символов'
ss1 == ss2
True
Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \, ', ", \t, \n и другие. Пример:
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
Создадим строку по шаблону:
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
print(ss1b)
Меня зовут:
Голощапов Д.Е.
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например:
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки. Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например:
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
Операция «разрезания» или «создания среза», создающая новый объект:
ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!)
'стр'
ss1[13:] #Это часть строки – с 13-го индекса и до конца
'символов'
ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно
'Это - строка '
ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца
' строка '
ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2
' тоасм'
Обратим внимание на то, что в срезе указываются не позиции элементов, а их индексы и что указываемая правая граница в срез не включается.
Значение при отрицательном значении шага:
ss1[17:3:-2]
'омсаот '
При замене 17 на -4 получается такой же результат:
ss1[-4:3:-2]
'омсаот '
Строка является неизменяемым объектом. Попробуем, например, инструкцию
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
Однако, можно это сделать по-другому, переопределив её:
ss1=ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
С использованием ранее созданной строки ss1b попробуем создать объекты с разными срезами исходной строки.
ss1b[-1]
'.'
ss1b_cut = ss1b [::-1]
ss1b_cut
'.Е.Д вопащолоГ \n :тувоз янеМ'
Самостоятельное создание объектов разных типов. Отображение типов и значений созданных объектов.
num10 = 26
type(num10)
<class 'int'>
num16 = hex(num10)
num16
'0x1a'
type(num16)
<class 'str'>
# Пункт 8. Списки (list), кортежи (tuple), словари (dict), множества (set).
## 8.1. Список list - изменяемый тип данных. Это упорядоченная последовательность из элементов
одного или разных типов.
Пример списка с 3 элементами разных типов:
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']
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
spis1
[111, 'Список', (5-9j), 'New item']
Обратим внимание на то, что в этой инструкции новый список только отображается, но не сохраняется.
Добавим в конец списка spis1 строку ss1b и отобразите список:
spis1 += ss1b
spis1
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
spis1 = [111, 'Список', (5-9j), 'New item']
spis1.append(ss1b)
spis1
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
Удаление элемента:
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
Для insert (Вставка элемента в определенное место по индексу):
help(spis1.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
spis1.insert(2, "hello")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
spis1.insert(8, "test")
spis1
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
Для 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), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
spis1.remove('kitten')
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
spis1.remove('kitten')
ValueError: list.remove(x): x not in list
Для 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.
end1 = [123, "mew", (1,2)]
spis1.extend(end1)
spis1
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
Для clear (Полное очищение списка):
help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
end1.clear()
end1
[]
Для 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.
end1 = [5, 6, 9.99999, 384, 0, -5]
end1.sort(key = abs, reverse = True)
end1
[384, 9.99999, 6, 5, -5, 0]
Для copy (Создание копии списка):
help(end1.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
endcopy = end1.copy()
endcopy
[384, 9.99999, 6, 5, -5, 0]
Для index (Поиск индекса по значению):
help(endcopy.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.
endcopy.index(0)
5
endopy.index("lalala")
Traceback (most recent call last):
File "<pyshell#142>", line 1, in <module>
endopy.index("lalala")
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
Для count (Подсчет количества элементов по значению):
help(endcopy.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
endcopy.count(5)
1
endcopy.count(666666)
0
Списки могут быть вложенными:
spis2=[spis1,[4,5,6,7]]
spis2
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
Обращение к элементам вложенного списка:
spis2[0][1]
'hello'
Изменение элемента вложенного списка:
spis2[0][1]=78
spis2
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
spis1
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
Видим, что spis1 тоже изменился. Это происходит потому, что python работает не просто с объектами, а с ссылками на участки памяти. То есть, в Python списки передаются по ссылке, а не по значению.Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, а сообщаем именно тот список, поэтому его изменения в составе spis2 отображаются на исходном spis1.
Создание своего списка - объекта:
spis3 = [100, 'Test', True, spis1]
spis3
[100, 'Test', True, [(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]]
## 8.2.Кортеж: последовательность как список, но неизменяемая как строка.
Примеры операций с кортежами: создание кортежа:
kort1=(222,'Kortezh',77+8j)
Изменить кортеж нельзя, но можно его переопределить:
kort1= kort1+(1,2)
kort1
(222, 'Kortezh', (77+8j), 1, 2)
Если надо добавить еще один элемент в кортеж:
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
Теперь переопределим кортеж с удалением комплексного элемента:
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
Два важных метода кортежа (они есть также и у списков):
• Определение индекса заданного элемента:
kort1.index(2)
4
• Подсчет числа вхождений заданного элемента в кортеже:
kort1.count(222)
1
Методов append и pop у кортежей нет, т.к. они являются неизменяемыми. Попробуем операцию замены элемента кортежа:
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
Создание объекта-кортежа с элементами разных типов: число, строка, список, кортеж.
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
kortstr
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
type(kortstr[5])
<class 'tuple'>
type(kortstr[4])
<class 'list'>
## 8.3. Словарь (dictionary) - содержит в себе совокупность пар
"ключ (key) (неизменяемый)": "значение (value) (любого типа)"
Пример создания словаря:
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
Обращение к элементам словаря не по индексам, а по ключам:
dic1['Orel']
56
Пополнение словаря (добавление элемента, изменение словаря):
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
Обратим внимание на то, что в силу неупорядоченности словаря при его выводе
элементы могут располагаться не в том порядке, в каком они задавались при его формировании.
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря. Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям:
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
Элементы словаря могут быть любого типа, в том числе и словарями. Например,создадим словарь:
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic3['statistics'][2]
'standart deviation'
Создадим более сложный словарь из списка с элементами-кортежами с использованием функции dict:
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
Самостоятельно придумайте объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. Сколько элементов в получившемся словаре? Объясните это число.
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
count_list = ["one", "two", "three", "four", "five"]
terms_dict = dict(zip(count_list, terms_tuple))
terms_dict
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
Как мы видим длина словаря составляет 5 объектов. Это связано с функцией zip, которая делает так, что длина итогового объекта будет соответствовать минимальной длине составляющего.
## 8.4. Множество: состоят из НЕповторяющихся неизменяемых элементов
Пример создания множества:
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
В созданном множестве дубликаты элементов были автоматически удалены.
Некоторые операции с множеством:
определение числа элементов
len(mnoz1)
4
проверка наличия элемента во множестве
'датчик' in mnoz1
True
добавление и удаление элемента
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz1
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
Объект-множество с элементами разных типов
mnoz2 = {'спичка', 15, False, 'gear'}
mnoz2
{False, 'спичка', 'gear', 15}
len(mnoz2)
4
mnoz2.remove(15)
mnoz2
{False, 'спичка', 'gear'}
# Пункт 9. Завершение работы в среде IDLE.

@ -0,0 +1,70 @@
# Общее контрольное задание по теме 2
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
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, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## Решение
1. Создаю переменную familia.
familia = 'Goloshchapov'
2. Создаю переменную, которая равна первой букве familia.
fam1 = familia[0]
fam1
'G'
3. Создаю переменную с именем sp_kw, значение – списк всех ключевых слов Python.
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']
4. Удаляю из списка sp_kw значение 'nonlocal', затем убедился, что это значение удалено из списка.
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']
5. Создаю кортеж kort_nam с моим и еще 3-х студентов из группы именами. Проверяю, что тип переменной – это tuple.
kort_nam = ("Liza", "Alexander", "Danya", "Dima")
type(kort_nam)
<class 'tuple'>
6. Добавляю в kort_nam имена двух студентов.
kort_nam += ("Nikita", "Artem")
kort_nam
('Liza', 'Alexander', 'Danya', 'Dima', 'Nikita', 'Artem')
7. Определяю, сколько раз в кортеже присутствуют студенты с именем «Дима».
kort_nam.count("Dima")
1
8. Создаю словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
dict_bas = {"строка": familia, "символ": fam1, "список": sp_kw,
"кортеж": kort_nam,}
dict_bas
{'строка': 'Goloshchapov', 'символ': 'G', 'список': ['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'], 'кортеж': ('Liza', 'Alexander', 'Danya', 'Dima', 'Nikita', 'Artem')}

@ -0,0 +1,32 @@
# Индивидуальное контрольное задание по теме 2
Голощапов Дмитрий, A-01-23
# Задание
1.Пусть предполагается выполнить инструкции
u=[1,2,3,4,5]
v=['a',u,'v',[11,12]]
print(v[1][3])
Не выполняя эти инструкции, подумайте, какое значение будет выведено на экран? Проверьте свое предположение вводом инструкций.
# Решение
Перед нами представлено 2 списка, при этом 1 из них является вложенным.
Так как индексация элементов в Python начинается с 0, мы обращаемся к элементу с индексом 1( это вложенный список). Потом мы обращаемся к элементу с 3 индексом этого вложенного списка.
В результате этого обращения выведется 4.
Подтвердим это путем выполнения этих команд в Python.
>>> u=[1,2,3,4,5]
>>> v=['a',u,'v',[11,12]]
>>> print(v[1][3])
4

@ -0,0 +1,644 @@
# Отчет по теме 3
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
>>> import os
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA3')
# 2 Преобразование базовых типов обьектов в другие типы
Было изучено, как преобразовывать обьекты одного типа, в обьекты другого типа.
# 2.1 Преобразование обьектов в логический тип данных
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты логического типа.
>>> logiz1=bool(56)
>>> logiz2=bool(0)
>>> logiz3=bool("Beta")
>>> logiz4=bool("")
>>> logiz1
True
>>> type(logiz1)
<class 'bool'>
# 2.2 Преобразование обьектов в числовой тип данных
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты целого и вещественного типа int и float.
>>>tt1=int(198.6) #Отбрасывается дробная часть
>>>tt1
198
>>>tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
>>>tt2
-76
>>>tt3=int("B",16) #В шестнадцатиричной системе буква "В" соответствует числу 11
>>>tt3
11
>>>tt4=int("71",8) #71 преобразуется в число в восьмеричной системе
>>>tt4
57
>>>tt5=int("98.76") #Число представлено в виде строки, но само по себе оно относится к вещественным числам (типа float), поэтому сразу невозможно его преобразовать в целое. Для такого преобразования надо сначала переопределить его как float, а уже потом как int.
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
>>>flt1=float(789)
>>>flt1
789.0
>>>flt2=float(-6.78e2)
>>>flt2
-678.0
>>>flt3=float("Infinity")
>>>flt3
inf
>>>flt4=float("-inf")
>>>flt4
-inf
# 2.3 Преобразование целочисленных обьектов в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратное представление
Были преобразованы целочисленных обьекты в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратно представлены в целочисленном виде.
>>>hh=123
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
>>>dv1
'0b1111011'
>>>vos1
'0o173'
>>>shs1
'0x7b'
>>>int(dv1,2)
123
>>>int(vos1, 8)
123
>>>int(shs1, 16)
123
# 3 Преобразование сложных типов обьектов в другие типы
# 3.1 Преобразование элементов в строку символов
В строку были преобразованы число, логическая переменная, список, кортеж и словарь.
>>>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 Преобразование элементов в список
Были преобразованы в список строка символов, кортеж и словарь тремя способами (включая только ключи, только значения и ключи и значения вместе).
>>>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']
>>>spis3=list({"A":1,"B":2,"C":9}.values()) #Преобразование словаря в список по значениям
>>>spis3
[1, 2, 9]
>>>spis3=list({"A":1,"B":2,"C":9}.items()) #Преобразование словаря в список ключи и значения
>>>spis3
[('A', 1), ('B', 2), ('C', 9)]
# 3.3 Преобразование элементов в кортеж
В кортеж были преобразованы строка, список и словарь.
>>>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 strk5, kort8
>>>strk5
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>>kort8
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
>>> f_str="Голощапов Д.Е."
>>> f_spis=list(f_str)
>>> f_kort=tuple(f_spis)
>>> f_sstr=str(f_kort)
>>> f_spis
['Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
>>> f_kort
('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')
>>> f_sstr
"('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')"
# 4 Изучение арифметических операций
Были применены и изучены различные арифметические операции с числами целого, вещественного и комплексного типа.
# 4.1 Изучение сложения и вычитания
Были применены операции сложения и вычитания с различными числами.
>>>12+7+90 # Сложение целых чисел
109
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>>23.6+54 #Сложение вещественного и целого чисел
77.6
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
# 4.2 Изучение умножения
Было умножено вещественное число на целое.
>>>-6.7*12 #Умножение вещественного числа на целое число
-80.4
# 4.3 Изучение деления с результатом - вещественным числом
Было произведено деление чисел на целое число и проверен класс результативной переменной.
>>>-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
>>>a
3.9555555555555557
>>>type(a)
<class 'float'>
# 4.4 Изучение деления с округлением вниз
Был применен операнд деления с округлением вниз, деление испробовано на целых и вещественных числах и выведен тип результативной переменной.
>>>b=178//45 #Деление двух целых чисел
>>>b
3
>>>type(b)
<class 'int'>
>>>c=-24.6//12.1 #Деление двух вещественных чисел
>>>c
-3.0
>>>type(c)
<class 'float'>
>>>ddd=56.88//45
>>>ddd
1.0
>>>type(ddd)
<class 'float'>
>>>eee=45//56.88
>>>eee
0.0
>>>type(eee)
<class 'float'>
# 4.5 Изучение получения отсатка от деления
Был применен операнд остатка от деления, операция применена по отношению к целым и вещественным числам.
>>>148%33 #Остаток от деления двух целых чисел
16
>>>12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
>>>148%3.9
3.7000000000000033
>>>3.9%2
1.9
# 4.6 Изучение возведения в степень
Была применена операция возведения в степень с вещественными и целыми числами.
>>>14**3 #Целое число возводится в целую степень
2744
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>>e
35.719843790663525
>>>2.7**3
19.683000000000003
>>>3**2.7
19.419023519771343
Также самостоятельно были произведены операции над комплексными числами. Выяснено, что выполнимы все вышеприведенные операции, кроме деления с округлением вниз и определения остатка.
>>>kom1=5+2j
>>>kom2=3+7j
>>>kom1+kom2
(8+9j)
>>>kom1-kom2
(2-5j)
>>>kom1*kom2
(1+41j)
>>>kom1/kom2
(0.5-0.5000000000000001j)
>>>kom1//kom2
Traceback (most recent call last):
File "<pyshell#110>", line 1, in <module>
kom1//kom2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
>>>kom1//3
Traceback (most recent call last):
File "<pyshell#111>", line 1, in <module>
kom1//3
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
>>>kom1%kom2
Traceback (most recent call last):
File "<pyshell#112>", line 1, in <module>
kom1%kom2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
>>>kom1%3
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
kom1%3
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
>>>kom1**4
(41+840j)
>>>kom1**kom2
(10.184748623043754+3.841522923031664j)
# 5 Изучение операций с двоичными представлениями целых чисел
Были произведены различные операции с двоичным представлением целых чисел.
# 5.1 Изучение двоичной инверсии
Была применена двоичная инверсия.
>>>dv1=9
>>>dv2=~dv1
>>>dv2
-10
# 5.2 Изучение двоичного И
Была применена операция двоичного И.
7&9 # 111 и 1001 = 0001
1
7&8 # 111 и 1000 = 0000
0
# 5.3 Изучение двоичного ИЛИ
Была применена операция двоичного ИЛИ.
>>>7|9 # 111 или 1001 = 1111
15
>>>7|8 # 111 или 1000 = 1111
15
>>>14|5 # 1110 или 0101 = 1111
15
# 5.4 Изучение двоичного исключающего ИЛИ
Была применена операция двоичного исключающего ИЛИ.
>>>14^5 # 1110 исключающее или 0101 = 1011
11
Число 11 получилось при переводе числа 1011 из двоичной системы в десятичную. Это можно сделать с помощью выражения: 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11
# 5.5 Изучение сдвига двоичного представления на заданное число разрядов влево или вправо с дополнением нулями
Был произведен сдвиг двоичного представления влево и вправо с дополнением нулями.
>>>h=14 #Двоичное представление = 1110
>>>g=h<<2 # Новое двоичное представление = 111000
>>>g
56
>>>g1=h>>1 # Новое двоичное представление = 0111
>>>g1
7
>>>g2=h>>2 # Новое двоичное представление = 0011
>>>g2
3
Самостоятельно были созданы два двоичных числа с 7-ю знаками и произведены операции над ними.
>>>bin1 = int("0101010", 2)
>>>bin2 = int("1100101", 2)
>>>bin3 = ~bin1
>>>bin3
-43
>>>bin1&bin2
32
>>>bin1|bin2
111
>>>bin1^bin2
79
>>>bin1>>3
5
>>>bin1<<6
2688
# 6 Изучение операций при работе с последовательностями (строками, списками, кортежами)
# 6.1 Изучение обьединения обьектов различных типов
Были обьеденены строки, списки и кортежи.
>>>'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
# 6.2 Изучение повторения элементов обьекта различных типов
Было произведено повторение строки, списка и кортежа
>>>'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>>['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>>('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>>signal1=[0]*3+[1]*99
>>>signal2=(0,)*3+(1,)*5+(0,)*7
>>>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, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
# 6.3 Изучение проверки наличия элементов в обьекте
Было проверено наличие определенных элементов в строке, списке и кортеже.
>>>stroka='Система автоматического управления'
>>>'автомат' in stroka #Наличие подстроки в строке
True
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
# 6.4 Изучение подстановки элементов в обьект
Была произведена подстановка чисел и строки в обьект.
>>>stroka='Температура = %g %s %g'
>>>stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
# 7 Изучение оператора присваивания
# 7.1 Изучение присваивания для переменной
Была создана переменная и ей присвоено определенное значение.
>>>zz=-12
>>>zz
-12
# 7.2 Изучение изменения заданной переменной на определенную величину
Значение переменной было увеличено и потом уменьшено на определенное значение.
>>>zz+=5 # Значение zz увеличивается на 5
>>>zz-=3 # Значение уменьшается на 3
>>>zz
-10
# 7.3 Изучение умножения и деления переменной
Переменная была умножена, а потом поделена на определенное значение. Также самостоятельно был применен этот операнд для строки, в последствии чего символы в строке продублировались столько раз, какое было умножаемое число.
>>>zz/=2
>>>zz
-5.0
>>>zz*=5
>>>zz
-25.0
>>>xxx="zz"
>>>xxx*=5
>>>xxx
'zzzzzzzzzz'
# 7.4 Изучение деления с округлением вниз, получение остатка деления и возведение в степень
На переменной были самостоятельно испробованы операции деления с округлением вниз, получение остатка деления и возведение в степень.
>>>zz//=3
>>>zz
-9.0
>>>zz%=2
>>>zz
1.0
>>>zz**=3
>>>zz
1.0
# 7.5 Изучение множественного присваивания
Разным переменным было присвоено одно значение. Также были присвоены значения переменным в одну строку с использованием кортежа,
>>>w=v=10 # Переменным присваивается одно и то же значение
>>>w
10
>>>v
10
>>>n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа, строки, списка и словаря.
>>>n1;n2;n3
11
-3
'all'
>>>n1,n2,n3="11", "-3", "all"
>>>n1;n2;n3
'11'
'-3'
'all'
>>>n1,n2,n3=[11,-3,'all']
>>>n1;n2;n3
11
-3
'all'
>>>n1,n2,n3={11: 3,-3:7,'all':8}
>>>n1;n2;n3
11
-3
'all'
# 8 Изучение логических операций
Были изучены и применены некоторые логические операции, а также некоторые действия, с помощью логических операций.
# 8.1 Изучение операций сравнения
К двум переменным были применены различные операции сравнения.
>>>w==v
True
>>>w!=v
False
>>>w>v
False
>>>w<v
False
>>>w<=v
True
>>>w>=v
True
# 8.2 Изучение проверки наличия элемента в обьекте с помощью логических операций
Были созданы множество и словарь, и проверено имеются ли в них определенные элементы.
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
>>>'book' in mnoz1
True
>>>'cap' in mnoz1
False
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>>'Vologda' in dic1
True
>>>'Pskov' in dic1
False
>>>56 in dic1.values()
True
>>>dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>>'UII' in dct1['Depart']
True
>>>dct1['Depart'][1] == 'MM'
False
# 8.3 Изучение создания выражений с соединительными словами И, ИЛИ, НЕ
Были построены выражения с соединитиельными словами И, ИЛИ, НЕ.
>>>a=17
>>>b=-6
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
>>>(5>6) and ('kazan' in dic1) and not ('lozhka' in mnoz1)
False
>>>(5>6) and (7>5) or ("Saratov" in dic1)
True
# 8.4 Изучение проверки ссылок переменных на наличие одного и того же обьекта
Было проверено, являются ли созданные обьекты одними и теми же обьектами в памяти.
>>>w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
>>>w is v
True
>>>w1=['A','B']
>>>v1=['A','B']
>>>w1 is v1 #В данном случае эти переменные не записаны в один адрес памяти, питон создает для списков два разных обьекта, так как список это изменяемый тип и так как значение для переменных присваивалось по-отдельности. Так питон гарантирует, что изменение одного списка не повлияет на другой.
False
# 9 Изучение операций с обьектами, проводимыми с помощью методов
Была создана строка и выведены все атрибуты для нее.
>>>stroka='Микропроцессорная система управления'
>>>dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
# 9.1 Изучение методов применимых для строки
Были применены разные методы для работы со строками.
>>>stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
>>>stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
>>>stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>>spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
>>>spis22
['Микропроцессорная', 'система', 'управления']
>>>stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>>stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>>stroka3
'Микропроцессорная система управления'
>>>stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>>stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
>>>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 Изучение методов применимых к спискам
Были применены разные методы для работы со списками.
>>>spsk=[4, "a", 5, 7, 9]
>>>dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>spsk.pop(2)
5
>>>spsk
[4, 'a', 7, 9]
>>>spsk.append('c') #К списку прибавляется строка "с"
>>>spsk
[4, 'a', 7, 9, 'c']
>>>spsk.insert(2,'a') #На 2 место в списке вставляется строка "а"
>>>spsk
[4, 'a', 'a', 7, 9, 'c']
>>>spsk.count('a') #Считается количество "а" в списке
2
# 9.3 Изучение методов применимых к кортежам
Были применены разные методы для работы с кортажами и применен один из них.
>>>kor=(2, "k")
>>>dir(kor)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>>kor.index(2)
0
# 9.4 Изучение методов применимых к словарям
Были применены разные методы для работы со словарями и применен один из них.
>>>dirr={"A":3, "B":4}
>>>dir(dirr)
['__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']
>>>dirr.keys()
>>>dict_keys(['A', 'B'])
# 10 Завершение работы в IDLE

@ -0,0 +1,644 @@
# Отчет по теме 3
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
>>> import os
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA3')
# 2 Преобразование базовых типов обьектов в другие типы
Было изучено, как преобразовывать обьекты одного типа, в обьекты другого типа.
# 2.1 Преобразование обьектов в логический тип данных
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты логического типа.
>>> logiz1=bool(56)
>>> logiz2=bool(0)
>>> logiz3=bool("Beta")
>>> logiz4=bool("")
>>> logiz1
True
>>> type(logiz1)
<class 'bool'>
# 2.2 Преобразование обьектов в числовой тип данных
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты целого и вещественного типа int и float.
>>>tt1=int(198.6) #Отбрасывается дробная часть
>>>tt1
198
>>>tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
>>>tt2
-76
>>>tt3=int("B",16) #В шестнадцатиричной системе буква "В" соответствует числу 11
>>>tt3
11
>>>tt4=int("71",8) #71 преобразуется в число в восьмеричной системе
>>>tt4
57
>>>tt5=int("98.76") #Число представлено в виде строки, но само по себе оно относится к вещественным числам (типа float), поэтому сразу невозможно его преобразовать в целое. Для такого преобразования надо сначала переопределить его как float, а уже потом как int.
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
>>>flt1=float(789)
>>>flt1
789.0
>>>flt2=float(-6.78e2)
>>>flt2
-678.0
>>>flt3=float("Infinity")
>>>flt3
inf
>>>flt4=float("-inf")
>>>flt4
-inf
# 2.3 Преобразование целочисленных обьектов в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратное представление
Были преобразованы целочисленных обьекты в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратно представлены в целочисленном виде.
>>>hh=123
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
>>>dv1
'0b1111011'
>>>vos1
'0o173'
>>>shs1
'0x7b'
>>>int(dv1,2)
123
>>>int(vos1, 8)
123
>>>int(shs1, 16)
123
# 3 Преобразование сложных типов обьектов в другие типы
# 3.1 Преобразование элементов в строку символов
В строку были преобразованы число, логическая переменная, список, кортеж и словарь.
>>>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 Преобразование элементов в список
Были преобразованы в список строка символов, кортеж и словарь тремя способами (включая только ключи, только значения и ключи и значения вместе).
>>>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']
>>>spis3=list({"A":1,"B":2,"C":9}.values()) #Преобразование словаря в список по значениям
>>>spis3
[1, 2, 9]
>>>spis3=list({"A":1,"B":2,"C":9}.items()) #Преобразование словаря в список ключи и значения
>>>spis3
[('A', 1), ('B', 2), ('C', 9)]
# 3.3 Преобразование элементов в кортеж
В кортеж были преобразованы строка, список и словарь.
>>>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 strk5, kort8
>>>strk5
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
>>>kort8
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
>>> f_str="Голощапов Д.Е."
>>> f_spis=list(f_str)
>>> f_kort=tuple(f_spis)
>>> f_sstr=str(f_kort)
>>> f_spis
['Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
>>> f_kort
('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')
>>> f_sstr
"('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')"
# 4 Изучение арифметических операций
Были применены и изучены различные арифметические операции с числами целого, вещественного и комплексного типа.
# 4.1 Изучение сложения и вычитания
Были применены операции сложения и вычитания с различными числами.
>>>12+7+90 # Сложение целых чисел
109
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
>>>23.6+54 #Сложение вещественного и целого чисел
77.6
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
# 4.2 Изучение умножения
Было умножено вещественное число на целое.
>>>-6.7*12 #Умножение вещественного числа на целое число
-80.4
# 4.3 Изучение деления с результатом - вещественным числом
Было произведено деление чисел на целое число и проверен класс результативной переменной.
>>>-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
>>>a
3.9555555555555557
>>>type(a)
<class 'float'>
# 4.4 Изучение деления с округлением вниз
Был применен операнд деления с округлением вниз, деление испробовано на целых и вещественных числах и выведен тип результативной переменной.
>>>b=178//45 #Деление двух целых чисел
>>>b
3
>>>type(b)
<class 'int'>
>>>c=-24.6//12.1 #Деление двух вещественных чисел
>>>c
-3.0
>>>type(c)
<class 'float'>
>>>ddd=56.88//45
>>>ddd
1.0
>>>type(ddd)
<class 'float'>
>>>eee=45//56.88
>>>eee
0.0
>>>type(eee)
<class 'float'>
# 4.5 Изучение получения отсатка от деления
Был применен операнд остатка от деления, операция применена по отношению к целым и вещественным числам.
>>>148%33 #Остаток от деления двух целых чисел
16
>>>12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
>>>148%3.9
3.7000000000000033
>>>3.9%2
1.9
# 4.6 Изучение возведения в степень
Была применена операция возведения в степень с вещественными и целыми числами.
>>>14**3 #Целое число возводится в целую степень
2744
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
>>>e
35.719843790663525
>>>2.7**3
19.683000000000003
>>>3**2.7
19.419023519771343
Также самостоятельно были произведены операции над комплексными числами. Выяснено, что выполнимы все вышеприведенные операции, кроме деления с округлением вниз и определения остатка.
>>>kom1=5+2j
>>>kom2=3+7j
>>>kom1+kom2
(8+9j)
>>>kom1-kom2
(2-5j)
>>>kom1*kom2
(1+41j)
>>>kom1/kom2
(0.5-0.5000000000000001j)
>>>kom1//kom2
Traceback (most recent call last):
File "<pyshell#110>", line 1, in <module>
kom1//kom2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
>>>kom1//3
Traceback (most recent call last):
File "<pyshell#111>", line 1, in <module>
kom1//3
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
>>>kom1%kom2
Traceback (most recent call last):
File "<pyshell#112>", line 1, in <module>
kom1%kom2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
>>>kom1%3
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
kom1%3
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
>>>kom1**4
(41+840j)
>>>kom1**kom2
(10.184748623043754+3.841522923031664j)
# 5 Изучение операций с двоичными представлениями целых чисел
Были произведены различные операции с двоичным представлением целых чисел.
# 5.1 Изучение двоичной инверсии
Была применена двоичная инверсия.
>>>dv1=9
>>>dv2=~dv1
>>>dv2
-10
# 5.2 Изучение двоичного И
Была применена операция двоичного И.
>>>7&9 # 111 и 1001 = 0001
1
>>>7&8 # 111 и 1000 = 0000
0
# 5.3 Изучение двоичного ИЛИ
Была применена операция двоичного ИЛИ.
>>>7|9 # 111 или 1001 = 1111
15
>>>7|8 # 111 или 1000 = 1111
15
>>>14|5 # 1110 или 0101 = 1111
15
# 5.4 Изучение двоичного исключающего ИЛИ
Была применена операция двоичного исключающего ИЛИ.
>>>14^5 # 1110 исключающее или 0101 = 1011
11
Число 11 получилось при переводе числа 1011 из двоичной системы в десятичную. Это можно сделать с помощью выражения: 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11
# 5.5 Изучение сдвига двоичного представления на заданное число разрядов влево или вправо с дополнением нулями
Был произведен сдвиг двоичного представления влево и вправо с дополнением нулями.
>>>h=14 #Двоичное представление = 1110
>>>g=h<<2 # Новое двоичное представление = 111000
>>>g
56
>>>g1=h>>1 # Новое двоичное представление = 0111
>>>g1
7
>>>g2=h>>2 # Новое двоичное представление = 0011
>>>g2
3
Самостоятельно были созданы два двоичных числа с 7-ю знаками и произведены операции над ними.
>>>bin1 = int("0101010", 2)
>>>bin2 = int("1100101", 2)
>>>bin3 = ~bin1
>>>bin3
-43
>>>bin1&bin2
32
>>>bin1|bin2
111
>>>bin1^bin2
79
>>>bin1>>3
5
>>>bin1<<6
2688
# 6 Изучение операций при работе с последовательностями (строками, списками, кортежами)
# 6.1 Изучение обьединения обьектов различных типов
Были обьеденены строки, списки и кортежи.
>>>'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
# 6.2 Изучение повторения элементов обьекта различных типов
Было произведено повторение строки, списка и кортежа
>>>'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
>>>['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
>>>('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>>signal1=[0]*3+[1]*99
>>>signal2=(0,)*3+(1,)*5+(0,)*7
>>>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, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
# 6.3 Изучение проверки наличия элементов в обьекте
Было проверено наличие определенных элементов в строке, списке и кортеже.
>>>stroka='Система автоматического управления'
>>>'автомат' in stroka #Наличие подстроки в строке
True
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
True
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
# 6.4 Изучение подстановки элементов в обьект
Была произведена подстановка чисел и строки в обьект.
>>>stroka='Температура = %g %s %g'
>>>stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
# 7 Изучение оператора присваивания
# 7.1 Изучение присваивания для переменной
Была создана переменная и ей присвоено определенное значение.
>>>zz=-12
>>>zz
-12
# 7.2 Изучение изменения заданной переменной на определенную величину
Значение переменной было увеличено и потом уменьшено на определенное значение.
>>>zz+=5 # Значение zz увеличивается на 5
>>>zz-=3 # Значение уменьшается на 3
>>>zz
-10
# 7.3 Изучение умножения и деления переменной
Переменная была умножена, а потом поделена на определенное значение. Также самостоятельно был применен этот операнд для строки, в последствии чего символы в строке продублировались столько раз, какое было умножаемое число.
>>>zz/=2
>>>zz
-5.0
>>>zz*=5
>>>zz
-25.0
>>>xxx="zz"
>>>xxx*=5
>>>xxx
'zzzzzzzzzz'
# 7.4 Изучение деления с округлением вниз, получение остатка деления и возведение в степень
На переменной были самостоятельно испробованы операции деления с округлением вниз, получение остатка деления и возведение в степень.
>>>zz//=3
>>>zz
-9.0
>>>zz%=2
>>>zz
1.0
>>>zz**=3
>>>zz
1.0
# 7.5 Изучение множественного присваивания
Разным переменным было присвоено одно значение. Также были присвоены значения переменным в одну строку с использованием кортежа,
>>>w=v=10 # Переменным присваивается одно и то же значение
>>>w
10
>>>v
10
>>>n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа, строки, списка и словаря.
>>>n1;n2;n3
11
-3
'all'
>>>n1,n2,n3="11", "-3", "all"
>>>n1;n2;n3
'11'
'-3'
'all'
>>>n1,n2,n3=[11,-3,'all']
>>>n1;n2;n3
11
-3
'all'
>>>n1,n2,n3={11: 3,-3:7,'all':8}
>>>n1;n2;n3
11
-3
'all'
# 8 Изучение логических операций
Были изучены и применены некоторые логические операции, а также некоторые действия, с помощью логических операций.
# 8.1 Изучение операций сравнения
К двум переменным были применены различные операции сравнения.
>>>w==v
True
>>>w!=v
False
>>>w>v
False
>>>w<v
False
>>>w<=v
True
>>>w>=v
True
# 8.2 Изучение проверки наличия элемента в обьекте с помощью логических операций
Были созданы множество и словарь, и проверено имеются ли в них определенные элементы.
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
>>>'book' in mnoz1
True
>>>'cap' in mnoz1
False
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>>'Vologda' in dic1
True
>>>'Pskov' in dic1
False
>>>56 in dic1.values()
True
>>>dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>>'UII' in dct1['Depart']
True
>>>dct1['Depart'][1] == 'MM'
False
# 8.3 Изучение создания выражений с соединительными словами И, ИЛИ, НЕ
Были построены выражения с соединитиельными словами И, ИЛИ, НЕ.
>>>a=17
>>>b=-6
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
>>>(5>6) and ('kazan' in dic1) and not ('lozhka' in mnoz1)
False
>>>(5>6) and (7>5) or ("Saratov" in dic1)
True
# 8.4 Изучение проверки ссылок переменных на наличие одного и того же обьекта
Было проверено, являются ли созданные обьекты одними и теми же обьектами в памяти.
>>>w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
>>>w is v
True
>>>w1=['A','B']
>>>v1=['A','B']
>>>w1 is v1 #В данном случае эти переменные не записаны в один адрес памяти, питон создает для списков два разных обьекта, так как список это изменяемый тип и так как значение для переменных присваивалось по-отдельности. Так питон гарантирует, что изменение одного списка не повлияет на другой.
False
# 9 Изучение операций с обьектами, проводимыми с помощью методов
Была создана строка и выведены все атрибуты для нее.
>>>stroka='Микропроцессорная система управления'
>>>dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
# 9.1 Изучение методов применимых для строки
Были применены разные методы для работы со строками.
>>>stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
>>>stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
>>>stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>>spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
>>>spis22
['Микропроцессорная', 'система', 'управления']
>>>stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>>stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>>stroka3
'Микропроцессорная система управления'
>>>stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>>stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
>>>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 Изучение методов применимых к спискам
Были применены разные методы для работы со списками.
>>>spsk=[4, "a", 5, 7, 9]
>>>dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>spsk.pop(2)
5
>>>spsk
[4, 'a', 7, 9]
>>>spsk.append('c') #К списку прибавляется строка "с"
>>>spsk
[4, 'a', 7, 9, 'c']
>>>spsk.insert(2,'a') #На 2 место в списке вставляется строка "а"
>>>spsk
[4, 'a', 'a', 7, 9, 'c']
>>>spsk.count('a') #Считается количество "а" в списке
2
# 9.3 Изучение методов применимых к кортежам
Были применены разные методы для работы с кортажами и применен один из них.
>>>kor=(2, "k")
>>>dir(kor)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>>kor.index(2)
0
# 9.4 Изучение методов применимых к словарям
Были применены разные методы для работы со словарями и применен один из них.
>>>dirr={"A":3, "B":4}
>>>dir(dirr)
['__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']
>>>dirr.keys()
>>>dict_keys(['A', 'B'])
# 10 Завершение работы в IDLE

@ -0,0 +1,72 @@
# Общее контрольное задание по теме 3
Голощапов Дмитрий, А-01-23
# Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
•Преобразовать восьмеричное значение 45 в целое число.
•Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а за-тем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
•Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
•Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключа-ющее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
•Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
•Определить список методов, доступных у ранее созданного словаря D. Поочередно использо-вать его методы keys и values, определить, что можно получить с применением этих методов.
•Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
# Решение
>>>a = int("45", 8)
>>>a
37
>>>D={"усиление":23, "запаздывание":12, "постоянная времени":78}
>>>spis1=list(D)
>>>spis1
['усиление', 'запаздывание', 'постоянная времени']
>>>spis2=list(D.values())
>>>spis2
[23, 12, 78]
>>>kor=tuple(spis1)+tuple(spis2) #Список отличается от кортежа тем, что список изменяем, а кортеж нет.
>>>kor
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
>>>((1768//24.8)%3)**2.4
5.278031643091577
>>>((~(13&27))^14)<<2
-32
>>>spis3=["колебат", "колебат", "колебат", "колебат" ]
>>>'аткол' in spis3[1] + spis3[2]
True
>>>dir(D)
['__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']
>>>help(D.keys)
Help on built-in function keys:
keys() method of builtins.dict instance
Return a set-like object providing a view on the dict's keys.
>>>help(D.values)
Help on built-in function values:
values() method of builtins.dict instance
Return an object providing a view on the dict's values.
>>>D.keys() #Этот метод отображает ключи словаря
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
>>>D.values() #Этот метод отображает знаечния словаря
dict_values([23, 12, 78])
>>>S="Создать объект - символьную строку с текстом данного предложения"
>>>L=list(S.split())
>>>L
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>>L[L.index("-")] = ","
>>>L
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>>L.remove("данного")
>>>L
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']

@ -0,0 +1,75 @@
# Выполнение модульного задания
Голощапов Дмитрий , А-01-23
# Задание
M1_15
1) Можно ли создавать программы для среды Python с помощью других текстовых редакторов?
2) Создайте объект-список с 4 элементами: 1-й - год вашего рождения, 2-й - список изучаемых в семестре дисциплин, по которым будут сдаваться экзамены , 3-й - список ожидаемых оценок на экзаменах, 4-й - ваша фамилия ИО. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Напишите инструкции, позволяющую создать новый список, включающий взятые из исходного списка название первой экзаменационной дисциплины и ожидаемую по ней оценку. Отобразите созданный объект на экране.
4) Создайте словарь, в котором ключами будут названия экзаменационных дисциплин, взятые из списка, а значениями - ожидаемые оценки по этим дисциплинам из того же списка. Отобразите полученный объект.
5) Напишите инструкцию, которая, используя данные из словаря, обеспечит расчет среднего балла по оценкам на экзаменах. Используя операцию подстановки значений в строку, отобразите результат в виде: "Средний балл=:.".
# Решение
## Можно ли создавать программы для среды Python с помощью других текстовых редакторов?
Да, программы для Python можно создавать с помощью любых текстовых редакторов (например, Notepad++, Sublime Text).
Однако затем файл необходимо сохранить с расширением .py.
## Создайте объект-список с 4 элементами: 1-й - год вашего рождения, 2-й - список изучаемых в семестре дисциплин, по которым будут сдаваться экзамены , 3-й - список ожидаемых оценок на экзаменах, 4-й - ваша фамилия ИО. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
>>> personal_data = [
... 2005,
... ["ТАУ", "ИАД", "Схемотехника", "ЭСУ"],
... [5, 4, 5, 4],
... "Голощапов Д.Е."
... ]
>>> personal_data
[2005, ['ТАУ', 'ИАД', 'Схемотехника', 'ЭСУ'], [5, 4, 5, 4], 'Голощапов Д.Е.']
>>> type(personal_data) #Определение типа объекта
<class 'list'>
>>> dir(personal_data) #Отображение списка атрибутов
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__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']
## Напишите инструкции, позволяющую создать новый список, включающий взятые из исходного списка название первой экзаменационной дисциплины и ожидаемую по ней оценку. Отобразите созданный объект на экране.
>>> fs = personal_data[1][0] #Определение первого предмета
>>> fs
'ТАУ'
>>> fg=personal_data[2][0] #Определение оценки
>>> fg
5
>>> nl=[fs,fg]
>>> nl
## Создайте словарь, в котором ключами будут названия экзаменационных дисциплин, взятые из списка, а значениями - ожидаемые оценки по этим дисциплинам из того же списка.
>>> s = personal_data[1]
>>> s
['ТАУ', 'ИАД', 'Схемотехника', 'ЭСУ']
>>> g=personal_data[2]
>>> g
[5, 4, 5, 4]
>>> d=dict(zip(s,g))
>>> d
{'ТАУ': 5, 'ИАД': 4, 'Схемотехника': 5, 'ЭСУ': 4}
## Напишите инструкцию, которая, используя данные из словаря, обеспечит расчет среднего балла по оценкам на экзаменах. Используя операцию подстановки значений в строку, отобразите результат в виде: "Средний балл=:.".
>>> c=sum(d.values())/len(d)
>>> c
4.5
>>> str1='Средний балл=:{}'
>>> str1.format(c)
'Средний балл=:4.5'

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,401 @@
# Отчет по теме 4
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA4')
# 2 Изучение стандартных встроенных функций
# 2.1 Изучение функции округления
Была применена функция round с одним и двумя аргументами и изучены различия между указанием одного и двух аргументов.
>>>round(123.456,1)
123.5
>>>round(123.456,0)
123.0
>>>type(round(123.456,1))
<class 'float'>
>>>type(round(123.456,0)) #В результате получаются числа класса float, так как указано сколько цифр после запятой нужно оставить. Два вышеупомянутых варианта отличаются именно количесивом цифр, оставленных после запятой при округлении.
<class 'float'>
>>>round(123.456)
123
>>>type(round(123.456)) #В данном случае получается число типа int, так как не указано количество цифр после запятой, и по умолчанию число округляется до целого.
<class 'int'>
# 2.2 Изучение функции создания последовательности
Была применена функция range с тремя и с одним аргументо и изучена разница между этими способами применения функции.
>>>gg=range(76,123,9)
>>> type(gg)
<class 'range'>
>>>list(gg)
[76, 85, 94, 103, 112, 121]
>>>range(23) #При указывание одного аргумента строится последовательность от 0 до указанного числа не включительно, с шагом 1.
range(0, 23)
>>>list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
# 2.3 Изучение функции zip
Была применена функция zip и произведена попытка обращения к элементу созданной последовательности по индексу.
>>> qq=["Goloshchapov", "Filipov", "Xodyuck", "Ivanov"]
>>> ff=zip(gg,qq)
>>> tuple(ff) #В итоге получится последовательность из 4 элементов, так как в qq 4 элемента, а в gg 6. Длина равна длине самого короткого списка.
((76, 'Goloshchapov'), (85, 'Filipov'), (94, 'Xodyuck'), (103, 'Ivanov'))
>>> ff[1] #Исходя из текста ошибки, можно сказать, что zip обьекты не поддерживают доступ по индексу.
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
# 2.4 Изучение функции eval
Была применена функция eval.
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
>>> fff
5.0
>>> dan
-131.0
# 2.5 Изучение функции exec
Была применена функция exec.
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
Отличие eval() от exec() в том, что eval() вычисляет выражение , а exec() выполняет инструкции . Выражения — подмножество инструкций, отличающееся наличием результата. Например, 1, 1+2, a+3 — выражения, а присваивание или условный оператор — инструкции.
# 2.6 Изучение ряда полезных функций (abs, pow, max, min, sum, divmod, len, map)
Был изучен и применен ряд полезных функций:
abs - выдает значение по модулю;
len - выдает длину обьекта;
max - выдает максимальное число из списка введенных в аргумент;
min - выдает минимальное число из списка введенных в аргумент;
pow - при двух аргументах: возводит первый в степень второго, при наличие третьего аргумента делит получившийся результат на третий аргумент и показывает остаток;
sum - суммирует числа;
divmod - возвращает кортеж (a // b, a % b), где а и b соответственно первый и второй аргумент;
map - применяет функцию из первого аргумента к каждому элементу итерируемого обьекта, который указан во втором аргументе.
>>>abs(-5)
5
>>>len("hi")
2
>>>max(3, 4)
4
>>>min(3, 4)
3
>>>pow(3, 2)
9
>>>pow(3, 2, 3)
0
>>>sum([2, 3])
5
>>>divmod(7, 2)
(3, 1)
>>>list(map(lambda x: x*2, [1, 2, 3, 4]))
[2, 4, 6, 8]
# 3 Изучение функций из модуля math для работы с математическими выражениями и операциями.
Был импортирован и изучен модуль math. Были изучены и применены некоторые функции из модуля math.
sin - считает и выдает синус аргумента в радианах;
acos - считает и выдает арккосинус аргумента в радианах;
degrees - переводит число в радианах в градусы;
radians - переводит число в градусах в радианы;
exp - выдает значение числа e возведенного в степень, которая указана в аргументе;
log - считает натуральный логарифм числа;
log10 - считает делятичный логарифм числа;
sqrt - считает корень из числа в аргументе;
ceil - округляет число вверх;
floor - округляет число вниз;
pi - данная функция является представлением числа пи в питоне.
>>>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', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>>help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
>>>math.factorial(5)
120
>>>math.sin(180)
-0.8011526357338304
>>>math.acos(0.5)
1.0471975511965979
>>>help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
>>>math.degrees(0.5)
28.64788975654116
>>>math.radians(28)
0.4886921905584123
>>>math.exp(1)
2.718281828459045
>>>math.log(1)
0.0
>>>math.log10(1)
0.0
>>>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(4.7)
5
>>>math.floor(4.7)
4
>>>math.pi
3.141592653589793
>>>math.sin(2*math.pi/7+math.exp(0.23))
0.8334902641414562
# 4 Изучение модуля cmath для работы с комплексными числами
Был импортирован и изучен модуль cmath и применены функции для извлечения корня и расчета фазы комплексного числа.
>>>import cmath
>>>dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>>cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
>>>cmath.phase(1-0.5j)
-0.4636476090008061
# 5 Изучения стандартного модуля random для работы с псевдослучайными числами
Были самостоятельно изучены и применены методы модуля random:
random - равномерно распределенное случайное число;
uniform- равномерно распределенное случайное число в диапазоне, заданном двумя аргументами;
randint - случайные целые числа в диапазоне от значения первого аргумента до значения второго;
gauss - нормально распределенное случайное число с средним равным первому аргументу и стандартным отклонением равным второму аргументу;
choice - случайный выбор из совокупности указанной в аргументе;
shuffle - случайная перестановка элементов списка в аргументе;
sample - случайный выбор подмножества элементов из списка в первом аргументе (количество элементов равно числу, указанному во втором аргументе);
betavariate - случайное число с бета-распределением, где альфа равна первому аргументу, а бета равна второму аргументу;
gammavariate - случайное число с гамма-распределением, где альфа равна первому аргументу, а бета равна второму аргументу.
Также был самостоятельно создан список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
>>>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), на основе которого генерируется очередной результат random.random(), а само состояние обновляется.
Генерация устроена так, что распределение результатов близко к равномерному.
>>> random.seed()
>>> r = random.random()
>>> r
0.566968813410544
>>> u = random.uniform(1, 10)
>>> u
8.395257535596317
>>> rnd = random.randint(1, 10)
>>> rnd
1
>>> g = random.gauss(0, 1)
>>> g
0.7923172140812969
>>> l = ["a", "b", "c"]
>>> ch = random.choice(l)
>>> ch
'b'
>>> random.shuffle(l)
>>> l
['b', 'c', 'a']
>>> s = random.sample(l, 2)
>>> s
['c', 'b']
>>> b = random.betavariate(2, 5)
>>> b
0.30401704168811955
>>> g = random.gammavariate(2, 2)
>>> g
4.631853628453073
>>> random_list = [random.uniform(1, 10), random.gauss(5, 2), random.betavariate(2, 5), random.gammavariate(2, 2)]
>>> random_list
[3.2315627374553832, 4.74773932227122, 0.25797354673276174, 2.476042709934176]
# 6 Изучение модуля time для работы со временем и календарями
Были изучены и применены методы из модуля time:
time - возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г;
gmtime - возвращает объект класса struct_time, содержащий полную информацию о текущем времени (UTC): год (tm_year), месяц (tm_mon), день tm_mday)...;
localtime - для получения «местного» времени (которое стоит на компьютере);
asctime - преобразовывает представление времени из кортежа в строку (просто отображает время в формате строки);
ctime - преобразовывает время в секундах, прошедшего с начала эпохи, в строку;
sleep - прерывает работу программы на заданное время в секундах;
mktime - преобразовает время из типа кортежа или struct_time в число секунд с начала эпохи.
>>> 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
1759240944.8244405
>>> c2=time.time()-c1
>>> c2
19.052595853805542
>>> dat=time.gmtime()
>>> dat
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=14, tm_min=3, tm_sec=22, tm_wday=1, tm_yday=273, tm_isdst=0)
>>> dat.tm_mon
9
>>> dat.tm_hour
14
>>> tim=time.localtime()
>>> tim
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=5, tm_sec=35, tm_wday=1, tm_yday=273, tm_isdst=0)
>>> time.asctime()
'Tue Sep 30 17:06:29 2025'
>>> time.ctime()
'Tue Sep 30 17:06:47 2025'
>>> time.sleep(2) #Две секунды в IDLE не появлялось приглашение для ввода команды.
>>> time.mktime(tim)
1759241135.0
>>> time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=2, tm_sec=24, tm_wday=1, tm_yday=273, tm_isdst=0)
# 7 Изучение графических функций
Был создан линейный график, на котором изображена зависимость сигналов от времени.
>>> 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 0x000002666C2AE490>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show()
![](Ris1.png)
Далее были созданы два линейных графика на одном поле. (По оси y - значения из списка, по оси х - порядковый номер значений).
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x000002666DAA2D50>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x000002666DAA2E90>]
>>> pylab.show()
![](Ris1.1.png)
Также была создана круговая диаграмма.
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x000002666C285160>, <matplotlib.patches.Wedge object at 0x000002666D04C7D0>, <matplotlib.patches.Wedge object at 0x000002666D04CB90>, <matplotlib.patches.Wedge object at 0x000002666D04CE10>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()
![](Ris2.png)
Самостоятельно была создана гистограмма (по оси у - частота повторения значений, по оси х сами значения)
>>> data = [1, 2, 3, 3, 2, 3, 3, 3, 2]
>>> pylab.hist(data, bins=3)
(array([1., 3., 5.]), array([1. , 1.66666667, 2.33333333, 3. ]), <BarContainer object of 3 artists>)
>>> pylab.title("Гистограмма")
Text(0.5, 1.0, 'Гистограмма')
>>> pylab.show()
![](Ris3.png)
Самостоятельно была создана столбиковая диаграмма, где по оси х - категории, а по оси у - значения, относящиеся к каждой категории.
>>> c = ['A', 'B', 'C', 'D']
>>> v = [25, 40, 30, 50]
>>> pylab.bar(c, v)
<BarContainer object of 4 artists>
>>> pylab.title("Столбиковая диаграмма")
Text(0.5, 1.0, 'Столбиковая диаграмма')
>>> pylab.show()
![](Ris4.png)
# 8 Изучение модуля statistics для работы в сфере статистики
Самостоятельно был импортирован и изучен модуль statistics. Из него были использованы функции подсчета среднего значения, медианы и моды для выборки в списке.
>>> 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', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtupl e', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
>>> data = [1, 2, 2, 3, 4, 5, 5, 5, 6]
>>> mean = statistics.mean(data)
>>> mean
3.6666666666666665
>>> median = statistics.median(data)
>>> median
4
>>> mode = statistics.mode(data)
>>> mode
5
# 9 Завершение работы в IDLE
Был завершен сеанс в среде IDLE.

@ -0,0 +1,57 @@
# Общее контрольное задание по теме 4
Голощапов Дмитрий, А-01-23
# Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
# Решение
>>> divmod((round(cmath.phase(0.2+0.8j), 2))*20, 3)
(8.0, 2.6000000000000014)
>>> divmod(math.floor((round(cmath.phase(0.2+0.8j), 2))*20), 3) #Для получения остатка в целом виде и делении целых чисел, можно использовать такое выражение.
(8, 2)
>>> v = time.localtime()
>>> v
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=18, tm_min=48, tm_sec=25, tm_wday=1, tm_yday=273, tm_isdst=0)
>>> st = v.tm_hour, v.tm_min
>>> st
(18, 48)
>>> st = str(v.tm_hour)+" hour "+str(v.tm_min)+" min "
>>> st
'18 hour 48 min '
>>> ned = ["пн", "вт", "ср", "чт", "пт", "сб", "вскр"]
>>> random.sample(ned, 3)
['чт', 'сб', 'пт']
>>> random.choice(list(range(14, 33, 3)))
26
>>> N = round(random.gauss(15, 4))
>>> N
12
>>> import string #Импортировали модуль в котором есть латинский алфавит, чтобы из него выбрать буквы. Без использования этого модуля создавать список с алфавитом нужно было бы вручную.
>>> random.sample(string.ascii_letters, N)
['q', 'F', 'z', 'E', 'd', 'C', 'k', 'N', 'e', 'n', 'm', 'V']
>>> time.localtime().tm_min - v.tm_min
21

@ -0,0 +1,27 @@
# Индивидуальное контрольное задание по теме 4
Голощапов Дмитрий, А-01-23
# Задание
Определите время начала текущего временного промежутка в секундах.
Создайте список с двумя элементами: 0.3+7j и -34.6. Создайте второй список с элементами, равными квадратным корням из значений элементов первого списка.
Определите текущее время, прошедшее с зафиксированного начала временного промежутка.
# Решение
>>> v=time.localtime()
>>> k=time.mktime(v)
>>> k
1760088098.0
>>> spisok1 = [0.3+7j, -34.6]
>>> spisok2= [cmath.sqrt(x) for x in spisok1]
>>> spisok2
[(1.9113379636057752+1.8311779845554805j), 5.882176467941097j]
>>> (time.mktime(time.localtime())-k)/60
1.2

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

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

После

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

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

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

После

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

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

@ -0,0 +1,89 @@
# Общее контрольное задание по теме 5
Голощапов Дмитрий, А-01-23
# Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
# Решение
>>> import string
>>> text = "hello my friend"
>>> for char in text:
... if char in string.ascii_lowercase: #string.ascii_lowercase - это строка, содержащая все строчные буквы английского алфавита: 'abcdefghijklmnopqrstuvwxyz'
... order = string.ascii_lowercase.index(char) + 1 #получение порядкого номера в английском алфавите.
... print(char, "=", order)
... else:
... print("это не буква")
...
...
h = 8
e = 5
l = 12
l = 12
o = 15
это не буква
m = 13
y = 25
это не буква
f = 6
r = 18
i = 9
e = 5
n = 14
d = 4
>>> Str = "Создайте список со словами из задания данного пункта"
>>> L=list(Str.split())
>>> L
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта']
>>> slovo = 'список'
>>> if slovo in L:
... print("Это слово есть в тексте")
... else: print("Этого слова нет в тексте")
...
Это слово есть в тексте
>>> slovo='авадакедабра'
>>> if slovo in L:
... print("Это слово есть в тексте")
... else: print("Этого слова нет в тексте")
...
Этого слова нет в тексте
>>> students = ["Goloshchapov", "Ivanov", "Filippov", "Terechov"]
>>> leto = [4, 5, 3, 5]
>>> students2= ["Ivanov","Goloshchapov", "Terechov", "Filippov"]
>>> zima=[3, 5, 4, 4]
>>> name=input("Введите фамилию студента: ")
Введите фамилию студента: Goloshchapov
>>> if name in students and name in students2:
... leto_grade = leto[students.index(name)]
... zima_grade = zima[students2.index(name)]
... print("Студент:", name, ". Летняя:", leto_grade, ", Зимняя:", zima_grade)
... else:
... print("Студент", name, "не найден.")
...
Студент: Goloshchapov . Летняя: 4 , Зимняя: 5
>>> name=input("Введите фамилию студента: ")
Введите фамилию студента: liga
>>> if name in students and name in students2:
... leto_grade = leto[students.index(name)]
... zima_grade = zima[students2.index(name)]
... print("Студент:", name, ". Летняя:", leto_grade, ", Зимняя:", zima_grade)
... else:
... print("Студент", name, "не найден.")
...
...
Студент liga не найден.

@ -0,0 +1,24 @@
# Индивидуальное контрольное задание по теме 5
Голощапов Дмитрий, А-01-23
# Задание
Создайте символьную строку с произвольным набором латинских символов и цифр. Напишите инструкции, обеспечивающие создание списка, в котором значениями являются комбинации цифр из символьной строки, находящиеся между идущими подряд латинскими символами.
# Решение
>>> text = "ajsh6086gdlfbal53293jdl"
>>> numbers = ""
>>> result = []
>>> for char in text:
... if char in "0123456789":
... numbers += char
... else:
... if numbers: # Если символ не цифра и у нас есть накопленные цифры
... result.append(numbers) # Сохраняем найденное число в список
... numbers = ""
...
>>> print("Цифры:", result)
Цифры: ['6086', '53293']

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

Двоичные данные
TEMA6/bin.mnz

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

@ -0,0 +1,433 @@
# Отчет по теме 6
Голощапов Дмитрий, А-01-23
# 1 Подготовка к началу работы
Запуск оболочки IDLE и установка рабочего каталога
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6')
# 2 Изучение вывода данных на экран дисплея
Были изучены и применены различные способы вывода данных на экран.
# 2.1 Изучение эхо-вывода
>>> stroka='Автоматизированная система управления'
>>> stroka
'Автоматизированная система управления'
# 2.2 Изучение вывода данных с помощью печати
Была изучена функция print для вывода текста. Текст был выведен в одну строку, далее в две строки с использованием экранированных последовательностей, далее был выведен текст с дописанным в конце текстом, используя аргумент end. И также был выведен текст в три строки, используя троиные кавычки.
>>>fff=234.5;gg='Значение температуры = '
>>>print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе sep:
>>>print(gg, fff, sep="\n")
Значение температуры =
234.5
После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент:
>>>print(gg, fff,sep='\n',end='***'); print('____')
Значение температуры =
234.5***____
После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. Если в какой-то момент требуется просто перейти на новую строку, можно использовать следующее обращение к функции:
>>>print()
Оператор вывода может располагаться на нескольких строках с использованием тройных кавычек:
>>>print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""") #В этом варианте текст выводится в три отдельные строки как и при вводе команды, благодаря тройным кавычкам.
Здесь может выводиться
большой текст,
занимающий несколько строк
>>>print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк") #В данном случае текст выводится подрят в одну строку.
Здесь может выводиться большой текст, занимающий несколько строк
Разница в двух случаях состоит в том, что в первом случае тройные кавычки воспроизводят текст ровно так, как он был введен. Во втором случае три выводимых объекта-строки перечислены через запятую и выведены как три объекта, разделённые пробелом.
# 2.3 Изучение вывода данных с помощью функции write
Был импортирован модуль sys, и использована функция write, которая записывает и выводит текст, а так же возвращается количество байтов, записанных в строку.
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
# 3 Изучение ввода данных с клавиатуры
С помощью функции input был произведен вывод текста, введенного с клавиатуры.
Так же был создан цикл, который просит пользователя ввести значение до тех пор, пока оно не будет удовлетворять определенному интервалу, а потом выводит это значение на дисплей.
Также с помощью функции eval Была создана команда, благодаря которой выражение, введенное пользователем с консоли исполняется, и выдается результат расчета.
>>> psw=input('Введите пароль:')
Введите пароль:398fhg
>>> psw
'398fhg'
>>> type(psw)
<class 'str'>
input() всегда возвращает строку. Если нужна не строка, то input надо поместить внутрь функции, изменяющей тип данных.
>>> while True:
... znach=float(input('Задайте коэф.усиления = '))
... if znach<17.5 or znach>23.8:
... print('Ошибка!')
... else:
... break
...
...
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
>>> znach
21.6
>>> import math
>>> print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
Введенная строка преобразуется в исполнительные инструкции с помощью eval(), далее они выполняются и результат выводится на экран. Строка имеет тип, соответствующий результату вычислений. В данном случае - float.
# 4 Изучение различных способов чтения данных из файла и записи в файл
Были изучены и применены разные способы чтения и записи данных.
## 4.1 Изучение модуля os для работы с путями к файлам
Был просмотрен текущий рабочий каталог, занесен в переменную g. После этого совершен переход в другой рабочий католог.
Были самостоятельно изучены и применены методы из модуля os и подмодуля os.path:
mkdir - создает папку в рабочем каталоге (в приложенном фото видно, что в каталоге появилвсь папка);
>>> os.mkdir("new_folder")
![](Ris1.png)
rmdir - удаляет из каталога пустую папку;
![](Ris2.png)
listdir - возвращает список имен файлов/папок в указанном каталоге (или если аргумент не указан, то в текущем каталоге);
>>>os.listdir(g)
['.gitkeep', 'report.txt', 'Ris1.png', 'Ris2.png']
path.isdir - возвращает true, если папка является существующей в каталоге.
Далее была создана переменная, содержащая строку - путь к файлу report и имя данного файла. Используя эту переменную, с помощью функций модуля os была создана строка содержащая только путь, потом только имя, а потом применена функция, которая разделяет в одну переменную - путь, в другую - имя файла.
Далее было проверено существование определенного пути, и существование определенного файла с указаном каталоге.
>>> os.getcwd()
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
>>> g = str(os.getcwd())
>>> g
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
>>> os.path.isdir("new_folder")
False
Функция преобразования пути, переданного в качестве аргумента, в абсолютный путь - os.path.abspath(). Абсолютный путь — это полный путь к файлу или каталогу, начиная от корневого каталога системы, а не относительный путь (который зависит от текущего рабочего каталога).
>>> fil=os.path.abspath("report.txt")
>>> fil
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\report.txt'
Функции отделения из абсолютного пути только каталога/только имени файла - dirname/basename:
>>> drkt=os.path.dirname(fil)
>>> drkt
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
>>> name = os.path.basename(fil)
>>> name
'report.txt'
Функция разделения на кортеж из пути и из имени файла - split:
>>> os.path.split(os.path.abspath("report.txt"))
('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6, 'report.txt')
>>> type(os.path.split(os.path.abspath("report.txt")))
<class 'tuple'>
Функция проверки существования пути, заданного в символьной строке - exists:
>>> os.path.exists(g)
True
>>> os.path.exists('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA7')
True
>>> os.path.exists('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA11')
False
Функция проверки существования файла - isfile:
>>> os.path.isfile('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\report.txt') # Такой файл есть
True
>>> os.path.isfile('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\figure_1.png") # Такого файла нет
False
# 4.2 Изучение обобщенного процесса работы с файлами
Было определено, что для обмена данными с файлами необходимо:
• Открыть файла с указанием его имени и цели;
• Выполнить операции обмена данными с файлом;
• Закрыть файл.
# 4.3 Изучение функции open для открытия файлов с разной целью
Была применена команда open с различным написанием аргументов, создан файловый обьект. Выведен тип и список атрибутов этого обьекта.
>>>fp=open(file=drkt+'\\zapis1.txt',mode='w')
>>>fp=open(drkt+'\\zapis1.txt','w') #если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать
>>>fp=open('zapis1.txt','w') #путь в переменной drkt совпадает с рабочим каталогом, значит его можно опустить, оставив только имя открываемого файла
>>> type(fp)
<class '_io.TextIOWrapper'>
fp – это файловый объект. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла.
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__',
'__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer',
'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure',
'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
Если требуются другие операции с открываемым файлом, то для второго аргумента «mode=…» могут быть заданы следующие значения: w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, что и в «a», но с возможностью чтения из файла.
Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b»:
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
# 4.4 Изучение закрытия файла
Файл был закрыт.
>>> fp.close()
>>> fp1.close()
# 4.5 Изучение функции write для записи данных в текст
Был создан список из 12 элементов и поочередно в файл записаны числа из списка в три строки.
>>> sps=list(range(1,13))
>>> sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> fp2=open('zapis3.txt','w')
>>> fp2.write(str(sps[:4])+'\n')
13
>>> fp2.write(str(sps[4:8])+'\n')
13
>>> fp2.write(str(sps[8:])+'\n')
16
>>> fp2.close()
Метод выполняет действия по записи данных в файл, но возвращает количество записанных символов.
![](Ris3.png)
Далее был создан список из трех списков и с помощью цикла for все элементы списка были вписаны в файл в одну строку.
>>> sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
>>> sps3
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
>>> fp3=open('zapis4.txt','w')
>>> for i in range(len(sps3)):
... stroka4=sps3[i][0]+' '+str(sps3[i][1])
... fp3.write(stroka4)
...
...
11
11
12
>>> fp3.close()
![](Ris4.png)
Далее с помощью цикла for три списка из общего списка были вписаны в файл поочередно в три строки.
Запись цикла была сжата в одну строку, и проверено, что при написании той же инструкции в одну строку, содержимое файла не изменяется, относительно предыдущего метода с этими же инструкциями.
>>>gh=open('zapis5.txt','w')
>>>for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
>>>gh.close()
![](Ris5.png)
>>> gh=open('zapis6.txt','w')
>>> for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
...
12
12
13
>>>gh.close()
![](Ris6.png)
# 4.6 Изучение одного из способов чтения данных из файла с помощью цикла for
С помощью open был открыт файл для чтения, и из его символов был сконструирован список, состоящий из символов. После символы в списке были преобразованы в числа, и список стал идентичен тому, который создавался ранее и записывался в файл.
>>> sps1=[]
>>> fp=open('zapis3.txt')
>>> for stroka in fp:
... stroka=stroka.rstrip('\n')
... stroka=stroka.replace('[','')
... stroka=stroka.replace(']','')
... sps1=sps1+stroka.split(',')
...
...
>>> fp.close()
>>> sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> sps1
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки (если не задавать аргументов, он удалит любые пробелы (пробел, табуляция, символы новой строки и т.п.) с конца строки.), а с помощью метода replace – скобки. Видно, что полученный список отличается от исходного sps типом данных, а также не убраны некоторые пробелы. Исправим это:
>>> sps2 = [int(i.strip()) for i in sps1]
>>> sps2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Это list comprehension, который у каждого элемента sps1 убирает лишние пробелы с обеих сторон (в этом отличие rstrip от strip). Затем полученная строка конвертируется в число.
# 4.7 Изучение способа чтения данных из файла с помощью функции read
Был открыт текстовый файл и с помощью функции read из него сначала было прочитано и отображено 12 символов, а потом прочитаны остальные символы с помощью функции read без указания аргумента.
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> stroka1
'[1, 2, 3, 4]'
>>> stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
# 4.8 Изучение чтения данных из файла по строкам
Самостоятельно были изучены и применены функции: readline - которая читает одну строку, начиная с указателя текущей позиции, и функция readlines, которая по такому же принципу читает все строки и возвращает их в виде списка.
>>> fp=open('zapis3.txt')
>>> s1 = fp.readline()
>>> s2=fp.readline()
>>> s1
'[1, 2, 3, 4]\n'
>>> s2
'[5, 6, 7, 8]\n'
>>> fp.close()
>>> fp=open('zapis3.txt')
...
>>> s3 = fp.readlines()
>>> s3
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
# 4.9 Изучение работы с бинарными файлами с помощью модуля pickle
С помощью модуля pickle созданное множество было вписано в бинарный файл, а потом данные прочитаны из этого файла.
>>>import pickle
>>>mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
>>>fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>>pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
>>>fp.close()
![](Ris7.png)
>>>fp=open('zapis6.mnz','rb')
>>>mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>>fp.close()
>>>mnoz2 #Результат не такой как при вводе множества mnoz1, так как множество не имеет повторений и порядка элементов, поэтому автоматически множество обьединило повторяющиеся слова.
{'pen', 'iPhone', 'book', 'table'}
>>>mnoz1 == mnoz2
True
Также в файл было записано два обьекта и прочитано поочередно с помощью load.
>>>fp=open('zapis7.2ob','wb')
>>>pickle.dump(mnoz1,fp)
>>>pickle.dump(sps3,fp)
>>>fp.close()
>>>fp=open('zapis7.2ob','rb')
>>>obj1=pickle.load(fp) #Первое обращение к load читает первый объект
>>>obj2=pickle.load(fp) #Второе – читает второй
>>>fp.close()
>>>obj1
{'pen', 'iPhone', 'book', 'table'}
>>>mnoz1
{'pen', 'book', 'iPhone', 'table'}
>>>obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
>>>sps3
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
# 5 Перенаправление потоков ввода и вывода данных.
Был создан текстовый файл, куда с помощью модуля sys и методы stdout был перенаправлен поток вывода, и в нем был напечатан текст. Далее поток вывода был перенаправлен обратно и проведена проверка с помощью print.
>>>import sys
>>>vr_out=sys.stdout #Запоминаем текущий поток вывода
>>>fc=open('Stroka.txt','w') #Откроем файл вывода
>>>sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>>print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
>>>sys.stdout=vr_out #Восстановление текущего потока
>>>print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
>>>fc.close()
![](Ris8.png)
Также был перенаправлен ввод на файл, и реализован цикл, в котором считывается текст из файла и печатается на экран.
>>>tmp_in = sys.stdin #Запоминаем текущий поток ввода
>>>fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения)
>>>sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
>>>sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
>>>while True:
try:
line = input () #Считываем из файла строку
print(line) # Отображаем считанное
except EOFError:
break
запись строки в файл
>>>fd.close()
>>>sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода
# 6 Завершение работы в IDLE
Был завершен сеанс в среде IDLE

@ -0,0 +1,70 @@
# Общее контрольное задание по теме 6
Голощапов Дмитрий, А-01-23
# Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
• Записывается кортеж в бинарный файл.
• Записывается в этот же файл список и закрывается файл.
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
# Решение
>>> import random
>>> tpl= tuple(str(random.randint(6, 56)) for x in range(125))
>>> tpl
('51', '16', '55', '38', '10', '26', '47', '26', '50', '31', '55', '39', '40', '54', '41', '14', '42', '19', '33', '28', '22', '38', '19', '34', '8', '50', '19', '24', '8', '18', '23', '19', '54', '32', '6', '6', '9', '22', '36', '54', '15', '35', '48', '45', '10', '30', '43', '21', '42', '11', '53', '10', '39', '12', '10', '36', '27', '24', '53', '14', '16', '54', '18', '15', '42', '49', '53', '25', '11', '21', '12', '41', '43', '36', '38', '54', '50', '14', '24', '33', '9', '37', '6', '15', '39', '48', '48', '24', '43', '54', '19', '32', '48', '14', '23', '35', '29', '20', '26', '38', '30', '43', '15', '54', '21', '21', '12', '22', '46', '23', '42', '47', '31', '40', '40', '28', '31', '29', '7', '16', '27', '9', '32', '30', '45')
>>> L_fam = ["Goloshchapov", "Filipov", "Ivanov", "Tabolin", "Lazarev"]
>>> import os
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6')
>>> f = open('bin.mnz', 'wb')
>>> import pickle
>>> pickle.dump(tpl, f)
>>> pickle.dump(L_fam, f)
>>> f.close()
>>> f = open('bin.mnz', 'rb')
>>> obj1 = pickle.load(f)
>>> obj2_spis = pickle.load(f)
>>> obj1
('51', '16', '55', '38', '10', '26', '47', '26', '50', '31', '55', '39', '40', '54', '41', '14', '42', '19', '33', '28', '22', '38', '19', '34', '8', '50', '19', '24', '8', '18', '23', '19', '54', '32', '6', '6', '9', '22', '36', '54', '15', '35', '48', '45', '10', '30', '43', '21', '42', '11', '53', '10', '39', '12', '10', '36', '27', '24', '53', '14', '16', '54', '18', '15', '42', '49', '53', '25', '11', '21', '12', '41', '43', '36', '38', '54', '50', '14', '24', '33', '9', '37', '6', '15', '39', '48', '48', '24', '43', '54', '19', '32', '48', '14', '23', '35', '29', '20', '26', '38', '30', '43', '15', '54', '21', '21', '12', '22', '46', '23', '42', '47', '31', '40', '40', '28', '31', '29', '7', '16', '27', '9', '32', '30', '45')
>>> obj2_spis
['Goloshchapov', 'Filipov', 'Ivanov', 'Tabolin', 'Lazarev']
>>> if obj1 == tpl:
... print("обьекты кортежа совпадают")
... else: print("обьекты кортежа не совпадают")
...
обьекты кортежа совпадают
>>> if obj2_spis == L_fam:
print("обьекты списка совпадают")
else: print("обьекты списка не совпадают")
обьекты списка совпадают
>>> for i in range(0, 125, 5):
... exec('list' + str(i//5+1) + ' = ' + str(list(obj1[i:i+5])))
...
...
>>> list1
['51', '16', '55', '38', '10']
>>> list2
['26', '47', '26', '50', '31']

@ -0,0 +1,48 @@
# Выполнение модульного задания 2
Голощапов Д.Е.,А-01-23
# Задание
M2_7
1) С помощью текстового редактора создайте текстовый файл с некоторым именем, в котором будет 4 строки и на каждой строке будет по 3 числа, разделенных запятыми.
2) Запросите у пользователя и введите имя файла с данными для обработки. Обеспечьте вывод сообщения при вводе пустой строки и повторный ввод.
3) Введите данные из указанного файла и представьте их в виде списка.
4) Рассчитайте по введенным данным среднее значение синусов элементов списка.
5) Выведите рассчитанное значение на экран по шаблону: " По <число элементов в списке> элементам среднее синусов = <рассчитанное среднее>". При этом значение среднего должно быть округлено до двух знаков после точки.
# Решение
>>> import math
>>> import os
>>> os.chdir("C:\\Users\\u115-12\\Desktop\\python-labs\\TEMA6")
>>> fname = input("Введите имя файла: ")
Введите имя файла: module.txt
>>> while fname == "":
... print("Имя не должно быть пустым.")
... fname = input('Введите имя файла: ')
...
...
>>> with open(fname, 'r') as f:
... list = []
... for line in f:
... numbers = line.strip().split(',') #убрал пробелы и переносы в начале и конце строки, и разбил строку на части по запятым
... list.extend([float(x) for x in numbers]) #добавил числа в общий список
...
...
>>>
>>> list
[1.0, 4.0, 5.0, 2.0, 7.0, 8.0, 2.0, 6.0, 4.0, 8.0, 9.0, 10.0]
>>> sin_sum = sum(math.sin(x) for x in list)
>>> sin_sum
2.4119215412992787
>>> average=sin_sum/len(list)
>>> average
0.2009934617749399
>>> print("По", len(list), "элементам среднее синусов =", round(average, 2))
По 12 элементам среднее синусов = 0.2

@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

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

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

Двоичные данные
TEMA6/zapis6.mnz

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

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

Двоичные данные
TEMA6/zapis7.2ob

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

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

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

После

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

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

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

После

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

@ -0,0 +1,593 @@
# Отчёт по теме 7: Создание пользовательских функций
Голощапов Дмитрий, А-01-23
# 1. Запуск интерактивной оболочки IDLE
Запуск оболочки IDLE и установка рабочего каталога
>>>import os
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA7')
Пользовательская функция – это совокупность инструкций, которая выполняется при обращении к функции из любого места программы. Аргументы функции – это ссылки на объекты-источники данных, которые используются при её выполнении. Возвращаемые данные – это результаты вычисления функции, передаваемые в ту часть программы, из которой была вызвана функция.
# 2. Создание пользовательской функции
Создание функции предполагает выполнение трех операций: формирование функции, ее сохранение и использование.
В общем виде функция в языке Python представляется так:
def <Имя функции>([<Список аргументов >]):
[<отступы>"""<Комментарий по назначению функции>"""]
<отступы><Блок инструкций – тело функции>
[<отступы>return <Значение или вычисляемое выражение>]
Функция считается оконченной, если в очередной строке нет отступов или их число меньше, чем в отступах в функции. Если при выполнении функции будет выполнена инструкция return, то выполнение функции прекращается с возвратом значения, следующего за этой инструкцией. Если функция не содержит оператора return, она автоматически возвращает значение
None.
# 2.1 Функция без аргументов
>>> def uspeh():
... """Подтверждение успеха операции"""
... print('Выполнено успешно!')
...
...
>>> uspeh()
Выполнено успешно!
>>> type(uspeh)
<class 'function'> # Функция является объектом класса function.
>>> dir() # Имя функции появилось в пространстве имён
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh']
>>> help(uspeh)
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
help вывело справку по функции uspeh в модуле main. Далее выведена документационная строка функции (то описание, которое было указано в тройных кавычках при её определении). Документационная строка позволяет кратко и понятно описывать назначение функции.
## 2.2 Функция с аргументами
>>> def sravnenie(a,b):
... """Сравнение a и b"""
... if a>b:
... print(a,' больше ',b)
... elif a<b:
... print(a, ' меньше ',b)
... else:
... print(a, ' равно ',b)
...
>>> n,m=16,5;sravnenie(n,m)
16 больше 5
Функция работает с любыми данными, которые можно сравнить. Если нельзя сравнить, вернется TypeError.
>>> n,m='aaa', 'bbbb';sravnenie(n,m)
aaa меньше bbbb
Сравнение строк происходит по алфавиту, так же значение имеет регистр букв (заглавные меньше строчных), более короткая строка считается меньшей ("abc" < "abcd"), но "hi">"hello"
## 2.3 Функция, содержащая return
>>> def logistfun(b,a):
... """Вычисление логистической функции"""
... import math
... return a/(1+math.exp(-b))
...
>>> v,w=1,0.7;z=logistfun(w,v)
>>> z
0.6681877721681662
Модуль импортированный внутри функции будет доступен только внутри этой же функции.
## 2.4 Сложение для разных типов аргументов
>>> def slozh(a1,a2,a3,a4):
... """ Сложение значений четырех аргументов"""
... return a1+a2+a3+a4
...
...
>>> slozh(1,2,3,4) # Сложение чисел
10
>>> slozh('1','2','3','4') # Сложение строк
'1234'
>>> b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
>>> q=slozh(b1,b2,b3,b4) #Сложение списков
>>> q
[1, 2, -1, -2, 0, 2, -1, -1]
>>> c1=(1,2); c2=(-1,-2); c3= (0,2); c4=(-1,-1)
>>> q=slozh(c1,c2,c3,c4) #Сложение кортежей
>>> q
(1, 2, -1, -2, 0, 2, -1, -1)
q = slozh({1,1}, {2,2}, {"abc"}, {3,3}) # Сложение множеств
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
q = slozh({1,1}, {2,2}, {"abc"}, {3,3})
File "<pyshell#26>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
>>> dict1 = {'a': 1}; dict2 = {'b': 2}; dict3 = {'c': 3}; dict4 = {'d': 4}
>>> slozh(dict1, dict2, dict3, dict4) # Сложение словарей
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
slozh(dict1, dict2, dict3, dict4)
File "<pyshell#26>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
slozh(1, "а", 2, "b") # Сложение числа и строки
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
slozh(1, "а", 2, "b")
File "<pyshell#26>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Как видно сложение для множеств и словарей не применимо. Также нельзя складывать числа и строки, но можно складывать числа и логический тип.
## 2.5 Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
>>> def inerz(x,T,ypred):
... """ Модель устройства с памятью:
... x- текущее значение вх.сигнала,
... T -постоянная времени,
... ypred - предыдущее значение выхода устройства"""
... y=(x+T*ypred)/(T+1)
... return y
...
>>> sps=[0]+[1]*100 # Список с измерениями значений входного сигнала – в виде «ступеньки»
>>> spsy=[] #Заготовили список для значений выхода
>>> TT=20 #Постоянная времени
>>> yy=0 #Нулевое начальное условие
>>> for xx in sps:
... yy=inerz(xx,TT,yy)
... spsy.append(yy)
>>> import pylab as plt
>>> plt.plot(spsy, label = "Выходной сигнал")
[<matplotlib.lines.Line2D object at 0x000002AC6E77CB90>]
>>> plt.show()
![График](Figure_1.png)
# 3. Функции как объекты
## 3.1 Получение списка атрибутов объекта-функции
>>> dir(inerz)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
>>> inerz.__doc__
'Модель устройства с памятью:\n x- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства'
>>> help(inerz)
Help on function inerz in module __main__:
inerz(x, T, ypred)
Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства
Атрибут __doc__ содержит значение docstring, если при инициализации функции он был задан. Если не был, то inerz.__doc__ будет иметь значение None.
## 3.2 Сохранение ссылки на объект-функции в другой переменной
>>> fnkt=sravnenie
>>> v=16
>>> fnkt(v,23)
16 меньше 23
Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie.
## 3.3 Возможность альтернативного определения функции в программе
>>> typ_fun=8
>>> if typ_fun==1:
... def func():
... print('Функция 1')
... else:
... def func():
... print('Функция 2')
...
>>> func()
Функция 2
Программа выводит сообщение "Функция 2", потому что переменная typ_fun не равна 1, и
выполняется блок else, в котором функция func определена как выводящая "Функция 2".
# 4. Аргументы функции
## 4.1 Возможность использования функции в качестве аргумента другой функции
>>> def fun_arg(fff,a,b,c):
... """fff-имя функции, используемой
... в качестве аргумента функции fun_arg"""
... return a+fff(c,b)
...
>>> zz=fun_arg(logistfun,-3,1,0.7)
>>> zz
-2.3318122278318336
Python передаёт ссылку на объект функции logistfun в переменную fff. Внутри функции выполняется заданная операция.
## 4.2 Обязательные и необязательные аргументы
>>> def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1
... """Вычисление логистической функции"""
... import math
... return b/(1+math.exp(-a))
...
...
>>> logistfun(0.7) #Вычисление со значением b по умолчанию
0.6681877721681662
>>> logistfun(0.7,2) #Вычисление с заданным значением b
1.3363755443363323
## 4.3 Возможность обращения к функции с произвольным (непозиционным) расположением аргументов.
При этом надо в обращении к функции указывать имена аргументов.
>>> logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
0.34498724056380625
## 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже
>>> b1234=[b1,b2,b3,b4] # Список списков из п.2.4
>>> b1234
[[1, 2], [-1, -2], [0, 2], [-1, -1]]
>>> qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку
>>> qq
[1, 2, -1, -2, 0, 2, -1, -1]
Со звёздочкой коллекции передаются как набор аргументов функции. * - "оператор распаковки". Это было бы эквивалентно записи slozh(b1,b2,b3,b4).
## 4.5 Пример со значениями аргументов функции, содержащимися в словаре
>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4}
>>> qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
>>> qqq
10
>>> slozh(*dic4)
'a1a2a3a4'
Ключи на входе функции воспринимаются как значения позиционных переменных, а значения, как значения. Если поставить только одну звездочку, python попытается интерпретировать
ключи, а не значения словаря как позиционные аргументы.
## 4.6 Смешанные ссылки
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
>>> qqqq=slozh(*e1,**dd2)
>>> qqqq
17
## 4.7 Переменное число аргументов у функции
>>> def func4(*kort7):
... """Произвольное число аргументов в составе кортежа"""
... smm=0
... for elt in kort7:
... smm+=elt
... return smm
...
>>> func4(-1,2) #Обращение к функции с 2 аргументами
1
>>> func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами
10
## 4.8 Комбинация аргументов
>>> def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж
... """Кортеж - сборка аргументов - должен быть последним!"""
... smm=0
... for elt in kort7:
... smm+=elt
... return a*smm+b
...
>>> func4(-1,2,0,3,6)
-7
Если мы не хотим передавать b, придется переопределить функцию так, чтобы именованный параметр b был в конце, а позиционный кортеж - перед ним.
Подобным же образом в списке аргументов функции также можно использовать словарь, предварив его имя двумя звездочками.
>>> def func4(a,b=7,**dct1): #Аргументы: a-позиционный, b- по умолчанию + словарь
... """Словарь - сборка аргументов - должен быть последним!"""
... smm=0
... smm = sum (dct1.values())
... return a*smm + b
...
>>> func4(-1,2, x=3, y=4, z=5)
-10
*args и **kwargs - способы передать не уточненное заранее число элементов:
*args — переменное количество позиционных аргументов. Переданные с одной звездочкой аргументы собираются в кортеж.
**kwargs — переменное количество именованных аргументов. Все переданные аргументы, которые указываются по имени, собираются в словарь.
*args всегда должно идти перед **kwargs.
## 4.9 Изменение значений объектов, используемых в качестве аргументов функции.
Такое изменение возможно только у объектов изменяемого типа
>>> a=90 # Числовой объект – не изменяемый тип
>>> def func3(b):
... b=5*b+67
...
>>> func3(a)
>>> a
90
Поскольку функция ничего не возвращает то вычисленное значение b = 5*b+67 существует только локально внутри нее и не выносится в глобальную область видимости.
Пример со списком:
>>> sps1=[1,2,3,4] #Список – изменяемый тип объекта
>>> def func2(sps):
... sps[1]=99
...
>>> func2(sps1)
>>> print(sps1)
[1, 99, 3, 4]
Список передается по ссылке, а не по значению, поэтому изменяется именно тот объект, который был передан.
Пример с кортежем:
kort = (1,2,3,4)
func2(kort)
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
func2(kort)
File "<pyshell#109>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
Кортеж - неизменяемая коллекция, так что переназначение в таком виде не работает.
# 5. Специальные типы пользовательских функций
## 5.1 Анонимные функции
Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени, определяемые по следующей схеме:
lambda [<Аргумент1>[,<Аргумент2>,…]]:<Возвращаемое значение или выражение>
Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту.
>>> import math
>>> anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов
>>> anfun1() # Обращение к объекту-функции
2.7362852774480286
>>> anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами
>>> anfun2(17,234)
19.369215857410143
>>> anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом
>>> anfun3(100)
102.36921585741014
Вызов лямбда-функции создает объект класса "функция". Внутри лямбда-функции не могут использоваться многострочные выражения, нельзя использовать if-else.
## 5.2 Функции-генераторы
Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение.
Данный оператор в отличие от return не останавливает полностью выполнение программы. Когда выполнение функции возобновляется после yield, оно продолжается с того места, где было
приостановлено, до следующего оператора yield (или до конца функции).
>>> def func5(diap,shag):
... """ Итератор, возвращающий значения
... из диапазона от 1 до diap с шагом shag"""
... for j in range(1,diap+1,shag):
... yield j
...
>>> for mm in func5(7,3):
print(mm)
...
...
1
4
7
Здесь при каждом обращении к функции будет генерироваться только одно очередное значение.
При программировании задач у таких функций часто используют метод __next__, активирующий очередную итерацию выполнения функции.
>>> alp=func5(7,3)
...
>>> print(alp.__next__())
1
>>> print(alp.__next__())
4
>>> print(alp.__next__())
7
>>> print(alp.__next__())
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
print(alp.__next__())
StopIteration
__next__ помогает вывести значение, которое yield передает на каждой итерации цикла. Если функция отработала последнюю итерацию, но мы попытаемся сделать вызов, вернется ошибка.
В отличии от функций, которые возвращают список со значениями итераций, функции - генераторы генерируют значения по одному, не храня всё в памяти; а функция, возвращающая список создаёт весь список в памяти. Также генератор можно использовать только один раз - после прохождения всех значений он "опустошается" и больше не производит элементов.
# 6. Локализация объектов в функциях
По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Глобальные – это те объекты, значения которых заданы вне функции.
Локализация может быть переопределена путем прямого объявления объектов как глобальных с помощью дескриптора global.
## 6.1 Примеры на локализацию объектов
Пример 1. Одноименные локальный и глобальный объекты:
>>> glb=10
>>> def func7(arg):
... loc1=15
... glb=8
... return loc1*arg
...
>>> res=func7(glb)
>>> res
150
>>> glb
10
Внутри функции glb принял значение 8, но глобальная переменная при этом после выполнения
функции значения не поменяла. Это происходит потому, что локальный glb и глобальный glb - это два разных объекта.
Пример 2. Ошибка в использовании локального объекта.
>>> def func8(arg):
... loc1=15
... print(glb)
... glb=8
... return loc1*arg
...
...
>>> res=func8(glb)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
res=func8(glb)
File "<pyshell#8>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
Переменной glb присваивается значение внутри функции. Поэтому python решает, что glb - это локальная переменная для всей функции. Но когда выполнение доходит до строки 3 print(glb), локальная переменная glb еще не была инициализирована (это происходит только в строке 4), поэтому выходит ошибка.
Пример 3. Переопределение локализации объекта.
>>> glb=11
>>> def func7(arg):
... loc1=15
... global glb
... print(glb)
... glb=8
... return loc1*arg
...
...
>>> res=func7(glb)
11
>>> glb
8
Здесь мы явно указали, что в функции используем глобальную переменную, поэтому она изменилась.
## 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins
Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций.
>>> globals().keys() #Перечень глобальных объектов
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8'])
>>> locals().keys() #Перечень локальных объектов
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8'])
Сейчас различий нет, потому что эти методы возвращают объекты на уровне вызова этих функций. Сейчас мы работаем в самом рабочем пространстве, где локальная и глобальная области видимости совпадают.
>>> def func8(arg):
... loc1=15
... glb=8
... print(globals().keys()) #Перечень глобальных объектов «изнутри» функции
... print(locals().keys()) #Перечень локальных объектов «изнутри» функции
... return loc1*arg
...
>>> hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8']) # Глобальное glb
dict_keys(['arg', 'loc1', 'glb']) # Локальное glb
>>> 'glb' in globals().keys() # Глобально glb
True
## 6.3 Локализация объектов при использовании вложенных функций
>>> def func9(arg2,arg3):
... def func9_1(arg1):
... loc1=15
... glb1=8
... print('glob_func9_1:',globals().keys())
... print('locl_func9_1:',locals().keys())
... return loc1*arg1
... loc1=5
... glb=func9_1(loc1)
... print('loc_func9:',locals().keys())
... print('glob_func9:',globals().keys())
... return arg2+arg3*glb
...
...
>>> kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) # # Содержит только объекты, определенные внутри func9_1, а также объект, переданный как аргумент функции
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) # # Содержит все то же, что и locl_func9_1, но еще и arg3, переданный func9, и саму func9_1
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
## 6.4 Моделирование системы
Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
Реальный двигатель: последовательное соединение усилителя с коэффициентом усиления k1,интегратора: y(t)=x(t)+y(t-1), и инерционного звена: y(t)=(x(t)+T*y(t-1)) / (T+1) с постоянной времени Т.
Тахогенератор: последовательное соединение усилителя с коэффициентом усиления k2 и интегратора: y(t)=x(t)+y(t-1).
Нелинейное звено типа «зона нечувствительности»: y=0 при -xm≤ x ≤xm, y=x-xm при x>xm, y=x+xm при x<-xm.
Таким образом, система характеризуется параметрами: k1, T, k2, xm. Входной сигнал характеризуется параметрами: A (амплитуда синусоиды) и F (период синусоиды).
Еще один параметр задачи : N – время (число тактов) подачи сигнала.
Решение задачи:
>>> znach=input('k1,T,k2,Xm,A,F,N=').split(',') # Запрос и введение параметров задачи
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
>>> k1=float(znach[0]) # Распаковка значений из списка в отдельные объекты
>>> T=float(znach[1])
>>> k2=float(znach[2])
>>> Xm=float(znach[3])
>>> A=float(znach[4])
>>> F=float(znach[5])
>>> N=int(znach[6])
>>> import math
>>> vhod=[]
>>> for i in range(N):
... vhod.append(A*math.sin((2*i*math.pi)/F)) # Создание реализации входного сигнала
...
>>> vhod
[0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, -1.3716044150450356e-14, -4.3117471020172244e-14, -1.567547902908612e-14, 1.1766512962000004e-14, -1.7634913907721887e-14, ...]
Создание функций реализующие компоненты системы
>>> def realdvig(xtt,kk1,TT,yti1,ytin1):
... #Модель реального двигателя
... yp=kk1*xtt #усилитель
... yti1=yp+yti1 #Интегратор
... ytin1=(yti1+TT*ytin1)/(TT+1)
... return [yti1,ytin1]
...
>>> def tahogen(xtt,kk2,yti2):
... #Модель тахогенератора
... yp=kk2*xtt #усилитель
... yti2=yp+yti2 #интегратор
... return yti2
...
>>> def nechus(xtt,gran):
... #зона нечувствит
... if xtt<gran and xtt>(-gran):
... ytt=0
... elif xtt>=gran:
... ytt=xtt-gran
... elif xtt<=(-gran):
... ytt=xtt+gran
... return ytt
...
Реализуем соединение компонент в соответствии с заданием
>>> yi1=0;yin1=0;yi2=0
>>> vyhod=[]
>>> for xt in vhod:
... xt1=xt-yi2 #отрицательная обратная связь
... [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
... yi2=tahogen(yin1,k2,yi2)
... yt=nechus(yin1,Xm)
... vyhod.append(yt)
...
>>> print('y=',vyhod)
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...]
# 7. Завершение сеанса работы с IDLE

@ -0,0 +1,83 @@
# Общее контрольное задание по теме 7
Голощапов Дмитрий, А-01-23
# Задание:
1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
# Решение
## 1.
>>> def delay_signal (signal, T):
... """"Расчёт выхода y(t) для устройства задержки"""
... output=[]
... for i in range(len(signal)):
if i < T:
output.append(0)
else:
... output.append(signal[i-T])
... return output
...
...
>>> x=[1,0.5,3.6,4.5,1,2,0.5] # Входной сигнал
>>> y= delay_signal (x, 2)
>>> y
[0, 0, 1, 0.5, 3.6, 4.5, 1]
## 2.
>>> import random
>>> import matplotlib.pyplot as plt
>>> def histogram (sample, number):
... min_1=min(sample)
... max_1=max(sample)
... bins=(max_1-min_1)/number # Ширина одного интервала
... rows = [0]*number # Создание списка для подсчёта элементов в каждом интервале
... intervals = [] # Список для хранения границ интервалов
... for i in range(number):
... lower = min_1 + i * bins
... upper = min_1 + (i+1) * bins
... intervals.append((lower, upper))
...
... for x in sample:
... i = int((x-min_1)/bins) # Вычисление номера интервала для текущего элемента
... if i == number:
... i=number-1
... rows [i] +=1
... print("Границы интервала | Число элементов")
... for i in range(number):
... lower, upper = intervals[i]
... print(lower, "-", upper, " |", rows[i])
... plt.hist(sample, number)
... plt.xlabel('Значения выборки')
... plt.ylabel('Число элементов')
... plt.title('Гистограмма выборки')
... plt.show()
... return rows
...
>>> data = [random.gauss(1, 20) for _ in range(10)]
>>> histogram (data, 3)
Границы интервала | Число элементов
-23.534334630492655 - -11.561019750784087 | 3
-11.561019750784087 - 0.4122951289244803 | 2
0.4122951289244803 - 12.385610008633048 | 5
[3, 2, 5]
![График](Figure_2.png)
## 3.
>>> linear_regression = lambda b1, b2, x: b1+b2 * x
>>> result = linear_regression (2,3,5)
>>> result
17

@ -0,0 +1,55 @@
# Выполнение индивидуального контрольного задания по теме 7
Голощапов Д.Е.,А-01-23
# Задание
Разработайте анонимную функцию с 3 аргументами: х, a, b, вычисляющую значение exp(-(x-a)2/b)/(2*π*b)1/2. Рассчитайте значения функции в диапазоне значений х от a-3*b1/2 до a+3*b1/2 с шагом 0.2*b1/2 и запишите эти значения в текстовый файл по два значения на строке, разделенных запятыми.
# Решение
>>> import os
>>> os.chdir('C:\\Users\\u115-07\\Desktop\\python-labs\\TEMA7')
>>> normal= lambda x, a, b: math.exp(-(x-a)**2/b) / math.sqrt(2 * math.pi * b)
>>> def test_normal():
... a, b = 0, 1
... std_dev = math.sqrt(b)
... start = a - 3 * std_dev
... end = a + 3 * std_dev
... step = 0.2 * std_dev
... x_values = []
... current = start
... while current <= end:
... x_values.append(current)
... current += step
... function_values = []
... for x in x_values:
... y = normal_pdf(x, a, b)
... function_values.append(y)
... file = open('ikz.txt', 'w')
... for i in range(0, len(function_values), 2):
... if i + 1 < len(function_values):
... file.write(str(function_values[i])+','+str(function_values[i+1])+'\n')
... else:
... file.write(str(function_values[i])+',0\n')
...
...
>>> test_normal()
4.9233388666234e-05,0.0001570512248023814
0.00046246553014536756,0.0012571116468828324
0.0031544581746000837,0.007306882745280797
0.015624133620192436,0.03084012943829092
0.05619437965598666,0.09452050033904612
0.14676266317374007,0.21035924208613316
0.2783325845048708,0.33995618640009767
0.3832995298410415,0.3989422804014327
0.3832995298410414,0.33995618640009745
0.27833258450487053,0.21035924208613285
0.1467626631737398,0.09452050033904591
0.056194379655986504,0.030840129438290835
0.01562413362019238,0.007306882745280764
0.0031544581746000672,0.0012571116468828236
0.0004624655301453643,0.00015705122480238025

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

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

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

@ -7,3 +7,4 @@ print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print(t, expi)

@ -4,7 +4,6 @@ def alpha():
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)

@ -0,0 +1,7 @@
def read (file):
""""Чтение данных из файла"""
nums = []
with open(file, 'r') as file: # Открытие файла для чтения
for line in file:
nums.extend(map(float, line.split())) # Добавление всех элементов в список
return nums

@ -0,0 +1,16 @@
def correlation(list1, list2):
"""Расчёт коэффициента корреляции"""
n = min(len(list1), len(list2)) # Общая длина
list1 = list1[:n]
list2 = list2[:n]
mean1 = sum(list1) / n
mean2 = sum(list2) / n
chislitel = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
#Числитель формулы корреляции
znamenatel1 = sum((x - mean1) ** 2 for x in list1) # Знаменатель формулы корреляции
znamenatel2 = sum((y - mean2) ** 2 for y in list2)
if znamenatel1 == 0 or znamenatel2 == 0: # Проверка деления на 0
return 0
return chislitel/(znamenatel1 * znamenatel2) ** 0.5

@ -0,0 +1,8 @@
import Modul1
import Modul2
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
list1 = Modul1.read(file1)
list2 = Modul1.read(file2)
corr = Modul2.correlation(list1, list2)
print(f"Коэффициент корреляции: {corr:.3f}")

@ -0,0 +1,101 @@
xi yi
3.670624845040832 0
-0.3521658782544006 0
8.474868613693486 3.974868613693486
-1.2523156239267281 0
-3.7587096811346328 0
7.812468585140991 3.3124685851409907
-6.0856889627564446 -1.5856889627564446
-5.724951279110531 -1.224951279110531
-7.209307783131958 -2.7093077831319583
-0.03177225581110221 0
0.7262377096028143 0
-2.1451811018035256 0
0.682492352684937 0
-7.974098743623873 -3.4740987436238733
-4.739894789384625 -0.23989478938462483
0.5785673884962104 0
2.7900552540834824 0
-2.9878254998277147 0
8.68266903601552 4.18266903601552
0.6358011132082179 0
-1.581248665373875 0
-7.714241862469274 -3.214241862469274
4.191086710659071 0
-5.8603083872222115 -1.3603083872222115
6.6401090127726645 2.1401090127726645
2.260239806764301 0
-1.6714707105856204 0
2.11512773242201 0
-5.1120638328556165 -0.6120638328556165
-10.945281168071894 -6.445281168071894
2.8366672115699614 0
1.4086809273229965 0
-2.1496484779110046 0
-2.204188117632971 0
5.109718373038055 0.6097183730380547
-0.8627148245032066 0
-3.940717361293867 0
-6.317208582843859 -1.8172085828438593
4.161315157870332 0
3.7381890083293237 0
3.509751762296771 0
-5.112977704740069 -0.6129777047400689
1.3712601808556377 0
-4.511100221705535 -0.011100221705534707
5.187248298870852 0.6872482988708519
7.526201082555464 3.026201082555464
0.943215636501155 0
-1.6731422501170918 0
-3.6509712338126468 0
-8.970988280742628 -4.4709882807426276
-3.7178510417802197 0
-9.181348116863681 -4.681348116863681
-7.096909208628782 -2.596909208628782
-6.356674467305581 -1.8566744673055808
12.362835482493008 7.862835482493008
-3.829821255664842 0
3.863254268939434 0
-7.361058739291252 -2.861058739291252
2.647441327077496 0
-0.2463332543002399 0
-6.43345466288511 -1.9334546628851097
1.0010663991036108 0
4.891543232391817 0.3915432323918173
3.217395947085928 0
7.24856212261116 2.74856212261116
0.03268157666206739 0
2.361643183782607 0
2.7565941347292853 0
6.614328614660419 2.114328614660419
-4.522306819553961 -0.022306819553961077
-2.417360799898943 0
1.438340972480404 0
-10.538183665090727 -6.0381836650907275
2.3976210633141606 0
-7.884528665296656 -3.3845286652966564
-3.7426936627274277 0
4.2656325795417 0
8.00340261637121 3.5034026163712095
3.0203739276410437 0
2.239032949899291 0
-5.4012053050140345 -0.9012053050140345
-0.5456659941079272 0
-3.3423758989922203 0
0.6911815315164658 0
4.499821505200004 0
-2.7737597404880163 0
0.9093545223215143 0
4.045688327501273 0
3.417507437526962 0
2.287170277997463 0
12.444224815662537 7.944224815662537
-2.3029729728150645 0
7.5434316730659905 3.0434316730659905
0.875475942768364 0
-1.0441288330619352 0
-1.9188907056958815 0
-5.4887311611961715 -0.9887311611961715
7.893972719410864 3.393972719410864
-7.404570078842247 -2.904570078842247
-2.066644631987605 0

@ -0,0 +1,16 @@
import random
import math
from transform_module import transform_signal
def main():
x = [random.gauss(0.5, 5) for i in range(100)]
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
y = transform_signal(x, 4.5)
with open('file.txt', 'w') as f:
f.write("xi yi\n")
for xi, yi in zip(x, y):
f.write(f"{xi} {yi}\n")
# вывод в файле file.txt
main()

@ -0,0 +1,390 @@
# Отчёт по теме 8: Модули и структурирование программы
Голощапов Д.Е., А-01-23
# 1. Запуск интерактивной оболочки IDLE
>>> import os,sys,importlib #Импорт трёх важных вспомогательных модулей
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8')
>>> os.getcwd()
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8'
# 2. Создание и использование модулей в среде Python
Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ.
Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле.
## 2.1 Запуск модуля на выполнение путём его импорта
После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями.
Создадим и откроем в текущем каталоге файл с именем Mod1.py, который будет содержать следующее:
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
Пока введённый или изменённый текст в окне редактора с текстом модуля не сохранён в файле, в заголовке перед именем файла будет стоять символ "*".
>>> import Mod1 # Запуск модуля
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> type(Mod1) # Модуль имеет класс объекта типа модуль
<class 'module'>
>>> dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
>>> Mod1.perm1 # Получим доступ к значению объекта, созданного в модуле
'5'
При импорте модуля управление передаётся от модуля ```__main__``` к модулю Mod1, который ищется в рабочем каталоге. Если бы данного модуля там не было, то при импорте пришлось бы ещё указать каталог, где он находится.
При повторном импорте модуля, запуска программы не происходит. Чтобы это исправить, применим функцию reload из модуля importlib:
>>> importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
>>> Mod1.perm1
'3'
## 2.2 Импортированные модули заносятся в словарь - значение атрибута sys.modules
>>> print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
Для повторного импорта модуля и выполнения программы, удалим модуль из этого словаря. Затем снова повторим импорт и убедимся в выполнении программы.
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
>>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.d ebugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'to kenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
Отличие importlib.reload() от sys.modules.pop() заключается в том, что importlib.reload() перезагружает модуль, выполняя его код заново, но не удаляет модуль из словаря. Он имеет тот же адрес в памяти и все зависимости от него остаются в силе. sys.modules.pop() убирает модуль из словаря, при повторном импорте он уже будет иметь другой адрес.
## 2.3 Запуск модуля на выполнение с помощью функции exec()
Здесь модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции. Но объект-модуль при этом не создается. Созданные при выполнении модуля объекты становятся объектами главной программы.
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
# Здесь наблюдается проблема с кодировкой символов, файл был сохранён в одной кодировке, а Python хочет его прочитать в другой. Поэтому укажем явно кодировку
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
>>> exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 9
Mod1:Значение perm1= 9
>>> perm1
'9'
## 2.4 Использование инструкции from ... import ...
В одном модуле может содержаться несколько функций или пользовательских объектов. Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов.
Пример 1:
>>> from Mod1 import perm1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> perm1
'5'
>>> from Mod1 import perm1
Объект Mod1 появился в памяти, программа на выполнение вызвалась, аналогично использованию import. При последующем повторении команды ничего не происходит. Python хранит загруженные модули в sys.modules, при первом импорте выполняется весь код модуля, при повторном импорте Python просто берёт модуль из кэша.
Пример2:
С помощью текстового редактора создадим ещё один модуль Mod2, содержащий две функции:
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)
Импортируем из этого модуля только функцию beta:
>>> from Mod2 import beta
>>> g=beta(2)
>>> g
535.4916555247646
>>> print(sorted(sys.modules.keys()))
['Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> alpha()
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
Модуль Mod2 появился в списке. Функция alpha не была импортирована, поэтому и вышла ошибка.
Теперь импортируем только функцию alpha, используя для неё псевдоним al:
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=5
'5'
>>> del al,beta # Удаление импортированных объектов
>>> from Mod2 import alpha as al, beta as bt # Импорт двух функций одной инструкцией
>>> sys.modules.pop('Mod1') # Удаление импортированных объектов
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
>>> sys.modules.pop('Mod2')
<module 'Mod2' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod2.py'>
>>> from Mod2 import * # Импорт всего содержимого модуля
>>> tt=alpha()
****ALPHA****
Значение t=0.12
>>> uu=beta(float(tt))
>>> uu
1.4578913609506803
# 3. Создание многомодульных программ
## 3.1 Пример простой многомодульной программы
Создадим модуль Mod0 со следующим содержанием:
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
Данный модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0.
>>> import Mod0
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
perm1= 3
****ALPHA****
Значение t=10
tt= 10
qq= 44031505860631.98
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'10'
44031505860631.98
'3'
Переменная perm1 находится в пространстве имен модуля Mod1, а не модуля Mod0. Поэтому пришлось указывать не только имя модуля Mod0, но и имя модуля Mod1, в котором локализован объект.
## 3.2 Пример
Создадим модуль MM1, включив в него разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создадим модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала.
Модуль MM1:
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp = kk1 * xtt #усилитель
yti1 = yp + yti1 #Интегратор
ytin1 = (yti1+TT*ytin1)/(TT+1)
return [yti1, ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp = kk2 * xtt #усилитель
yti2 = yp + yti2 #интегратор
return yti2
def nechus(xtt,gran):
if (xtt < gran) and (xtt > (-gran)):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt
Модуль MM2:
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1=float(znach[0])
T=float(znach[1])
k2=float(znach[2])
Xm=float(znach[3])
A=float(znach[4])
F=float(znach[5])
N=int(znach[6])
import math
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
import MM1 as mod
yi1=0;yin1=0;yi2=0
vyhod=[]
for xt in vhod:
xt1=xt-yi2 #отрицательная обратная связь
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
yi2=mod.tahogen(yin1,k2,yi2)
yt=mod.nechus(yin1,Xm)
vyhod.append(yt)
Теперь создадим главную программу - модуль MM0, которая запускает на выполнение модуль MM2 и выводит полученный выходной сигнал:
import MM2
print('y=',MM2.vyhod)
Запустим модуль MM0:
>>> import MM0
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
y=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...]
## 3.3 Области действия объектов в модулях
В ранее созданных модулях вводятся и используются следующие объекты:
Mod1: perm1
Mod2: функции alpha, beta; переменные t, expi
Mod0: переменные tt,qq
Исходя из примеров, приведенных ниже, можно сказать, что объекты входящие в один модуль будут локализованы в этом модуле и доступны в нем. К переменным из другого модуля, даже импортированного в главный (выполняемый) модуль, прямого доступа не будет.
## 3.3.1 Добавление в функцию alpha обращение к функции beta и, наоборот, из beta – к alpha.
Изменим содержание файла Mod2.py:
def alpha():
print('****ALPHA****')
t=input('Значение t=')
beta(int(t))
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)
Запустим программу:
>>> from Mod2 import *
>>> alpha()
****ALPHA****
Значение t=5
153552935.39544657
'5'
Теперь добавим в функцию beta вызов функции alpha():
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi=q*math.pi
alpha()
return math.exp(expi)
Протестируем выполнение:
>>> beta(6)
****ALPHA****
Значение t=5
153552935.39544657
## 3.3.2 Отобразим на экране в модуле Mod0 значения объектов t и expi
Изменим содержание Mod0:
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print(t, expi)
Запустим на выполнение:
>>> import Mod0
perm1= 5
****ALPHA****
Значение t=10
tt= 10
qq= 44031505860631.98
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
import Mod0
File "C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA8\Mod0.py", line 10, in <module>
print(t, expi)
NameError: name 't' is not defined. Did you mean: 'tt'?
Выходит ошибка, потому что переменные t и expi определены в разных областях видимости и не доступны в модуле Mod0. В модуле Mod2: t - это локальная переменная функции alpha(), expi - это локальная переменная функции beta(). В модуле Mod0: мы пытаемся обратиться к переменным t и expi, которые никогда не были объявлены в этом модуле.
## 3.3.3 Увеличение в модуле Mod0 в 3 раза значение объекта perm1 и отобразить его после этого на экране.
Изменим содержание Mod0:
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
Mod1.perm1 = str(int(Mod1.perm1)*3)
print('Увеличение perm1 в 3 раза:', Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
Тестирование программы:
>>> import Mod0
perm1= 30
Увеличение perm1 в 3 раза: 90
****ALPHA****
Значение t=10
tt= 10
qq= 44031505860631.98
## 3.3.4 В командной строке необходимо увеличить в 2 раза значения объектов perm1, tt, qq
>>> import Mod0
perm1= 5
****ALPHA****
Значение t=10
tt= 10
qq= 44031505860631.98
>>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2)
>>> Mod0.Mod1.perm1
'10'
>>> Mod0.tt=str(int(Mod0.tt)*2)
>>> Mod0.tt
'20'
>>> Mod0.qq=Mod0.qq*2
>>> Mod0.qq
88063011721263.95
# 4. Завершение сеанса работы с IDLE

@ -0,0 +1,67 @@
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8
Выполнил: Голощапов Д.Е.
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
# Решение
## 1. Модуль 1 - Чтение данных из файла
def read (file):
""""Чтение данных из файла"""
nums = []
with open(file, 'r') as file: # Открытие файла для чтения
for line in file:
nums.extend(map(float, line.split())) # Добавление всех элементов в список
return nums
## 2. Модуль 2 - Расчёт коэффициента корреляции
def correlation(list1, list2):
"""Расчёт коэффициента корреляции"""
n = min(len(list1), len(list2)) # Общая длина
list1 = list1[:n]
list2 = list2[:n]
mean1 = sum(list1) / n
mean2 = sum(list2) / n
chislitel = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
#Числитель формулы корреляции
znamenatel1 = sum((x - mean1) ** 2 for x in list1) # Знаменатель формулы корреляции
znamenatel2 = sum((y - mean2) ** 2 for y in list2)
if znamenatel1 == 0 or znamenatel2 == 0: # Проверка деления на 0
return 0
return chislitel/(znamenatel1 * znamenatel2) ** 0.5
## 3. Модуль 3 - Запрос у пользователя и ввод имён файлов с исходными данными
import Modul1
import Modul2
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
list1 = Modul1.read(file1)
list2 = Modul1.read(file2)
corr = Modul2.correlation(list1, list2)
print(f"Коэффициент корреляции: {corr:.3f}")
Были подготовлены два файла с данными data1.txt и data2.txt
## 4. Тестирование
>>> import Modul3
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: 0.996

@ -0,0 +1,157 @@
# Выполнение индивидуального контрольного задания по теме 8
Голощапов Д.Е.,А-01-23
# Задание
Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигнала x по формуле: y=0 при -B≤x≤B, y=x - B при x>B, y=x+B при x<-B. Создайте список со 100 значениями входного сигнала х случайными, нормально распределенными числами с математическим ожиданием 0.5 и дисперсией 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при В=4.5. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
# Решение
Функция для линейно-кусочного преобразования transform_signal находится в модуле transformation_module.py
Код представлен ниже:
def transform_signal(x, B):
"""
Кусочно-линейное преобразование:
y = 0 при -B <= xi <= B
y = xi - B при xi > B
y = xi + B при xi < -B
x - список входных значений
"""
y = []
for xi in x:
if -B <= xi <= B:
y.append(0)
elif xi > B:
y.append(xi - B)
else:
y.append(xi + B)
return y
Код основного модуля:
import random
import math
from transform_module import transform_signal
def main():
x = [random.gauss(0.5, 5) for i in range(100)]
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
y = transform_signal(x, 4.5)
with open('file.txt', 'w') as f:
f.write("xi yi\n")
for xi, yi in zip(x, y):
f.write(f"{xi} {yi}\n")
# вывод в файле file.txt
main()
Содержимое файла file.txt:
xi yi
3.670624845040832 0
-0.3521658782544006 0
8.474868613693486 3.974868613693486
-1.2523156239267281 0
-3.7587096811346328 0
7.812468585140991 3.3124685851409907
-6.0856889627564446 -1.5856889627564446
-5.724951279110531 -1.224951279110531
-7.209307783131958 -2.7093077831319583
-0.03177225581110221 0
0.7262377096028143 0
-2.1451811018035256 0
0.682492352684937 0
-7.974098743623873 -3.4740987436238733
-4.739894789384625 -0.23989478938462483
0.5785673884962104 0
2.7900552540834824 0
-2.9878254998277147 0
8.68266903601552 4.18266903601552
0.6358011132082179 0
-1.581248665373875 0
-7.714241862469274 -3.214241862469274
4.191086710659071 0
-5.8603083872222115 -1.3603083872222115
6.6401090127726645 2.1401090127726645
2.260239806764301 0
-1.6714707105856204 0
2.11512773242201 0
-5.1120638328556165 -0.6120638328556165
-10.945281168071894 -6.445281168071894
2.8366672115699614 0
1.4086809273229965 0
-2.1496484779110046 0
-2.204188117632971 0
5.109718373038055 0.6097183730380547
-0.8627148245032066 0
-3.940717361293867 0
-6.317208582843859 -1.8172085828438593
4.161315157870332 0
3.7381890083293237 0
3.509751762296771 0
-5.112977704740069 -0.6129777047400689
1.3712601808556377 0
-4.511100221705535 -0.011100221705534707
5.187248298870852 0.6872482988708519
7.526201082555464 3.026201082555464
0.943215636501155 0
-1.6731422501170918 0
-3.6509712338126468 0
-8.970988280742628 -4.4709882807426276
-3.7178510417802197 0
-9.181348116863681 -4.681348116863681
-7.096909208628782 -2.596909208628782
-6.356674467305581 -1.8566744673055808
12.362835482493008 7.862835482493008
-3.829821255664842 0
3.863254268939434 0
-7.361058739291252 -2.861058739291252
2.647441327077496 0
-0.2463332543002399 0
-6.43345466288511 -1.9334546628851097
1.0010663991036108 0
4.891543232391817 0.3915432323918173
3.217395947085928 0
7.24856212261116 2.74856212261116
0.03268157666206739 0
2.361643183782607 0
2.7565941347292853 0
6.614328614660419 2.114328614660419
-4.522306819553961 -0.022306819553961077
-2.417360799898943 0
1.438340972480404 0
-10.538183665090727 -6.0381836650907275
2.3976210633141606 0
-7.884528665296656 -3.3845286652966564
-3.7426936627274277 0
4.2656325795417 0
8.00340261637121 3.5034026163712095
3.0203739276410437 0
2.239032949899291 0
-5.4012053050140345 -0.9012053050140345
-0.5456659941079272 0
-3.3423758989922203 0
0.6911815315164658 0
4.499821505200004 0
-2.7737597404880163 0
0.9093545223215143 0
4.045688327501273 0
3.417507437526962 0
2.287170277997463 0
12.444224815662537 7.944224815662537
-2.3029729728150645 0
7.5434316730659905 3.0434316730659905
0.875475942768364 0
-1.0441288330619352 0
-1.9188907056958815 0
-5.4887311611961715 -0.9887311611961715
7.893972719410864 3.393972719410864
-7.404570078842247 -2.904570078842247
-2.066644631987605 0

@ -0,0 +1,157 @@
# Выполнение индивидуального контрольного задания по теме 8
Голощапов Д.Е.,А-01-23
# Задание
Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигнала x по формуле: y=0 при -B≤x≤B, y=x - B при x>B, y=x+B при x<-B. Создайте список со 100 значениями входного сигнала х – случайными, нормально распределенными числами с математическим ожиданием 0.5 и дисперсией 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при В=4.5. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
# Решение
Функция для линейно-кусочного преобразования transform_signal находится в модуле transformation_module.py
Код представлен ниже:
def transform_signal(x, B):
"""
Кусочно-линейное преобразование:
y = 0 при -B <= xi <= B
y = xi - B при xi > B
y = xi + B при xi < -B
x - список входных значений
"""
y = []
for xi in x:
if -B <= xi <= B:
y.append(0)
elif xi > B:
y.append(xi - B)
else:
y.append(xi + B)
return y
Код основного модуля:
import random
import math
from transform_module import transform_signal
def main():
x = [random.gauss(0.5, 5) for i in range(100)]
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
y = transform_signal(x, 4.5)
with open('file.txt', 'w') as f:
f.write("xi yi\n")
for xi, yi in zip(x, y):
f.write(f"{xi} {yi}\n")
# вывод в файле file.txt
main()
Содержимое файла file.txt:
xi yi
3.670624845040832 0
-0.3521658782544006 0
8.474868613693486 3.974868613693486
-1.2523156239267281 0
-3.7587096811346328 0
7.812468585140991 3.3124685851409907
-6.0856889627564446 -1.5856889627564446
-5.724951279110531 -1.224951279110531
-7.209307783131958 -2.7093077831319583
-0.03177225581110221 0
0.7262377096028143 0
-2.1451811018035256 0
0.682492352684937 0
-7.974098743623873 -3.4740987436238733
-4.739894789384625 -0.23989478938462483
0.5785673884962104 0
2.7900552540834824 0
-2.9878254998277147 0
8.68266903601552 4.18266903601552
0.6358011132082179 0
-1.581248665373875 0
-7.714241862469274 -3.214241862469274
4.191086710659071 0
-5.8603083872222115 -1.3603083872222115
6.6401090127726645 2.1401090127726645
2.260239806764301 0
-1.6714707105856204 0
2.11512773242201 0
-5.1120638328556165 -0.6120638328556165
-10.945281168071894 -6.445281168071894
2.8366672115699614 0
1.4086809273229965 0
-2.1496484779110046 0
-2.204188117632971 0
5.109718373038055 0.6097183730380547
-0.8627148245032066 0
-3.940717361293867 0
-6.317208582843859 -1.8172085828438593
4.161315157870332 0
3.7381890083293237 0
3.509751762296771 0
-5.112977704740069 -0.6129777047400689
1.3712601808556377 0
-4.511100221705535 -0.011100221705534707
5.187248298870852 0.6872482988708519
7.526201082555464 3.026201082555464
0.943215636501155 0
-1.6731422501170918 0
-3.6509712338126468 0
-8.970988280742628 -4.4709882807426276
-3.7178510417802197 0
-9.181348116863681 -4.681348116863681
-7.096909208628782 -2.596909208628782
-6.356674467305581 -1.8566744673055808
12.362835482493008 7.862835482493008
-3.829821255664842 0
3.863254268939434 0
-7.361058739291252 -2.861058739291252
2.647441327077496 0
-0.2463332543002399 0
-6.43345466288511 -1.9334546628851097
1.0010663991036108 0
4.891543232391817 0.3915432323918173
3.217395947085928 0
7.24856212261116 2.74856212261116
0.03268157666206739 0
2.361643183782607 0
2.7565941347292853 0
6.614328614660419 2.114328614660419
-4.522306819553961 -0.022306819553961077
-2.417360799898943 0
1.438340972480404 0
-10.538183665090727 -6.0381836650907275
2.3976210633141606 0
-7.884528665296656 -3.3845286652966564
-3.7426936627274277 0
4.2656325795417 0
8.00340261637121 3.5034026163712095
3.0203739276410437 0
2.239032949899291 0
-5.4012053050140345 -0.9012053050140345
-0.5456659941079272 0
-3.3423758989922203 0
0.6911815315164658 0
4.499821505200004 0
-2.7737597404880163 0
0.9093545223215143 0
4.045688327501273 0
3.417507437526962 0
2.287170277997463 0
12.444224815662537 7.944224815662537
-2.3029729728150645 0
7.5434316730659905 3.0434316730659905
0.875475942768364 0
-1.0441288330619352 0
-1.9188907056958815 0
-5.4887311611961715 -0.9887311611961715
7.893972719410864 3.393972719410864
-7.404570078842247 -2.904570078842247
-2.066644631987605 0

@ -0,0 +1,18 @@
def transform_signal(x, B):
"""
Кусочно-линейное преобразование:
y = 0 при -B <= xi <= B
y = xi - B при xi > B
y = xi + B при xi < -B
x - список входных значений
"""
y = []
for xi in x:
if -B <= xi <= B:
y.append(0)
elif xi > B:
y.append(xi - B)
else:
y.append(xi + B)
return y

Двоичные данные
TEMA9/-20and50.png

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

После

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

Двоичные данные
TEMA9/-2and5.png

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

После

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

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

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

После

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

@ -0,0 +1,27 @@
import pylab
from M2 import run_M2
def main():
X, X1 = run_M2()
# Построение графиков
pylab.figure(figsize=(10, 5))
pylab.subplot(1, 2, 1)
pylab.plot(X, label='Исходный сигнал')
pylab.title("Исходный сигнал")
pylab.xlabel("Отсчёты")
pylab.ylabel("Значение")
pylab.grid(True)
pylab.subplot(1, 2, 2)
pylab.plot(X1, label='Исправленный сигнал', color='orange')
pylab.title("Исправленный сигнал")
pylab.xlabel("Отсчёты")
pylab.ylabel("Значение")
pylab.grid(True)
pylab.tight_layout()
pylab.show()
if __name__ == "__main__":
main()

@ -0,0 +1,19 @@
def find_anomalous_indices(X, M1, M2):
indices = []
for i in range(1, len(X)):
diff = X[i] - X[i-1]
if diff < M1 or diff > M2:
indices.append(i)
return tuple(indices)
def correct_anomalies(X, K):
X1 = X.copy()
for idx in K:
if idx == len(X) - 1:
X1[idx] = X1[idx - 1]
else:
X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1])
return X1

@ -0,0 +1,51 @@
# M2.py
import os
import sys
import pickle
def run_M2():
while True:
filename = input("Введите имя текстового файла с сигналом: ").strip()
if os.path.isfile(filename):
break
X = []
with open(filename, 'r') as f:
for line in f:
parts = line.strip().split()
for p in parts:
X.append(float(p))
while True:
M1 = float(input("Введите M1 (нижняя граница разности): "))
M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): "))
if M1 < M2:
break
else:
print("M1 должно быть меньше M2.")
from M1 import find_anomalous_indices, correct_anomalies
K = find_anomalous_indices(X, M1, M2)
print(f"Аномальные индексы: {K}")
if K:
X1 = correct_anomalies(X, K)
print("Исправленный сигнал:", X1)
with open("Res44.bin", "wb") as f:
pickle.dump(X1, f)
print("Результат записан в Res44.bin")
else:
print("Аномальных отсчётов не обнаружено.")
return X, X1 if K else X

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

Двоичные данные
TEMA9/Res44.bin

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

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

@ -0,0 +1,14 @@
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()

@ -0,0 +1,292 @@
# Отчёт по теме 9: Создание пользовательских классов и объектов
Голощапов Д.Е., А-01-23
# 1. Запуск интерактивной оболочки IDLE
>>> import os
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA9')
# 2. Создание классов и их наследников
Класс - это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Он представляет собой шаблоны, образцы, по которым может быть создано множество объектов-экземпляров класса. У каждого класса есть уникальное имя и некоторый набор специфических для него атрибутов: полей (данных) и методов (функций), которые могут использоваться при работе с экземплярами класса.
## 2.1 Создание автономного класса
>>> class Class1: #Объявление класса
... def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
... self.data=znach # self - ссылка на экземпляр класса
... def otobrazh(self): # Метод 2 класса1
... print(self.data)#Отображение данных экземпляра класса
...
У этого класса есть два метода: zad_zn (устанавливает значение свойства объекта) и otobrazh (выводит это значение на экран).
Еще у него есть один атрибут - data.
self — это обязательный первый параметр всех методов в классе, ссылающийся на конкретный
экземпляр класса и нужный для определения обращения к атрибутам и методам.
>>> z1=Class1() #Создаём 1-й экземпляр класса
>>> z2=Class1() #Создаём 2-й экземпляр класса
>>> z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
>>> z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
>>> z1.otobrazh() # Обращение ко второму методу класса
экз.класса 1
>>> z2.otobrazh()
-632.453
>>> z1.data='Новое значение атрибута у экз.1'
>>> z1.otobrazh()
Новое значение атрибута у экз.1
## 2.2 Создание класса-наследника
>>> class Class2(Class1): #Class2 - наследник класса Class1
... def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
... print('значение=',self.data)#Отображение данных экземпляра
...
...
>>> z3=Class2()
>>> dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
Объекты с нижними подчеркиваниями - встроенные атрибуты и методы, которые есть у каждого класса. Кроме этого, есть унаследованные от родительского класса методы, один из которых переопределен.
При создании дочернего класса атрибуты и методы родительского класса переносятся дочернему. В дочернем классе методы могут быть переопределены. То есть метод с одинаковым именем в разных классах будет вести себя по-разному.
>>> z3.zad_zn('Совсем новое')
>>> z3.otobrazh()
значение= Совсем новое
>>> z1.otobrazh()
Новое значение атрибута у экз.1
>>> del z1,z2,z3
# 3. Использование классов, содержащихся в модулях
Создадим модуль Mod3 со следующим содержанием:
class Class1: #Объявление класса Class1 в модуле
def zad_zn(self,znach): # 1 Метод класса
self.data=znach # self - ссылка на экземпляр класса Class1
def otobrazh(self): # 2 Метод класса
print(self.data)#Отображение данных экземпляра
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2
print('значение=',self.data)#Отображение данных экземпляра
def otobrazh(objekt): #Объявление самостоятельной функции
print('значение объекта=',objekt)
>>> from Mod3 import Class1 #Частичный импорт содержимого модуля
>>> z4=Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
z4.otobrazh()
File "C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
Ошибка возникла потому, что otobrazh было вызвано раньше, чем метод, инициализирующий атрибут data, то есть мы пытаемся напечатать значение несуществующего объекта.
>>> import sys
>>> sys.modules.pop('Mod3')
<module 'Mod3' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA9\\Mod3.py'>
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
Здесь otobrazh - это метод класса Class2 и соответствующего ему экземпляра класса z2. Этот метод не принимает значимых параметров, кроме формального self.
>>> del z4
>>> import Mod3 #Полный импорт содержимого модуля
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта= Объект
Здесь otobrazh - это уже просто функция, глобально определенная в модуле mod3. Она определена вне пользовательского класса, поэтому атрибута data в ее зоне доступа нет. Так что эта функция принимает один обязательный параметр - выводимую переменную.
# 4. Использование специальных методов
Имена специальных методов предваряются одним или двумя подчерками и имеют вид: ```__<имя специального метода>__```
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
... def __init__(self,znach): #Конструктор-вызывается при создании нового экземпляра класса
... self.data=znach
... def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
... return Class3(self.data+drug_zn)
... def zad_dr_zn(self,povtor): #А это - обычный метод
... self.data*=povtor
...
Метод __add__ - это один из методов, осуществляющих так называемую «перегрузку» операторов.
Для иллюстрации работы этих методов создадим экземпляр класса Class3 и отобразим его.
>>> z5=Class3('abc') #При создании экземпляра срабатывает конструктор
>>> z5.otobrazh()
значение= abc
>>> z6=z5+'def'
>>> z6.otobrazh()
значение= abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение= abcdefabcdefabcdef
# 5. Присоединение атрибутов к классу
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> Class3.fio='Иванов И.И.'
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> z7=Class3(123)
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
В dir(z7), по сравнению с dir(Class3), указаны также атрибуты, относящиеся непосредственно к экземпляру. dir(Class3) показывает атрибуты класса Class3. Это включает методы, свойства, и встроенные специальные методы класса, но не атрибуты конкретных объектов, созданных на основе этого класса.
dir(z7) показывает атрибуты объекта z7.
>>> dir(z7)==dir(Class3)
False
>>> z7.rozden='1987' # Добавим еще один атрибут
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
>>> dir(Class3) # При этом у dir(Class3) его нет
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
# 6. Выявление родительских классов
Такое выявление делается с помощью специального атрибута ```__bases__```.
>>> Class3.__bases__
(<class '__main__.Class2'>,)
>>> Class2.__bases__
(<class 'Mod3.Class1'>,)
>>> Class1.__bases__
(<class 'object'>,)
>>> object.__bases__
()
Полный порядок наследования:
>>> Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class 'Mod3.Class1'>, <class 'object'>)
>>> ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
# 7. Создание свойства класса
Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута. Свойства нужны для того, чтобы ограничить прямой доступ к изменению атрибута.
>>> class Class4:
... def __init__(sam,znach):
... sam.__prm=znach
... def chten(sam):
... return sam.__prm
... def zapis(sam,znch):
... sam.__prm=znch
... def stiran(sam):
... del sam.__prm
... svojstvo=property(chten,zapis,stiran)
...
...
>>> exempl=Class4(12)
>>> exempl.svojstvo
12
>>> exempl.svojstvo=45
>>> print(exempl.svojstvo)
45
>>> del exempl.svojstvo
>>> exempl.svojstvo
Traceback (most recent call last):
File "<pyshell#64>", line 1, in <module>
exempl.svojstvo
File "<pyshell#58>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
Такой вывод происходит, потому что этот атрибут уже удален.
# 8. Пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Создадим модуль SAU.py с классом:
```
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
```
Тестирование класса произведём с помощью следующей программы, которая находится в модуле main_Sau.py
```
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Тестирование программы:
```py
>>> import main_SAU.py
y= 0.0
y= 0.2173913043478261
y= 0.4763705103969754
y= 0.686594887811293
y= 0.8199324616478645
y= 0.8837201137353929
y= 0.8994188484874774
y= 0.8892777072047301
y= 0.870097963179993
y= 0.8518346102696789
y= 0.8387499784485772
y= 0.8314204114211459
y= 0.8286051955249649
y= 0.8285656555914835
y= 0.8297915186846528
y= 0.8312697736438287
y= 0.8324765218921963
y= 0.8332456979978418
y= 0.8336163607592184
y= 0.8337101315489143
```
![График](Figure_1.png)
# 9. Завершение сеанса работы с IDLE

@ -0,0 +1,10 @@
4.263134009624702 4.067283548723314 4.874920842655541 4.834128754109237 10.405920382638437
11.61359628853662 7.593559339199566 8.905524284214025 8.186641831318802 8.638222773625724
10.700010550793879 5.937964750303343 14.858886989589493 4.480521770666802 10.21863100240053
8.09653182808412 10.833705848935924 9.862509524620615 11.252167038027647 8.640348799010265
13.592229845972096 4.883380805635669 7.553625615588027 13.512737353500533 6.7138113007856965
11.906386758613547 9.718459182587361 3.71492974457289 4.942941008501308 10.223575151953712
12.950645342438829 5.157741827157216 10.346955136422984 12.96777573030182 13.306115816113852
8.834837767997525 0.12078079724976654 9.788832403588085 11.490264634495386 5.082665741299458
2.17738781613307 8.375021265815336 13.383241973998315 4.689091929318712 15.563525674193436
6.592656956033435 23.556310839847484 4.384188136721545 7.622389260732377 11.17003135779134

@ -0,0 +1,87 @@
# Общее контрольное задание по теме 9
Голощапов Д.Е., А-01-23
# Задание:
Создать и записать в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создать 2 экземпляра класса, задать им некоторые значения атрибутов и свойства. Отобразить эти значения. Попробовать с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
# Решение
>>> class Employee:
... def __init__(self, fio="", otdel="", dolzhnost="", oklad=0):
... self.fio = fio
... self.otdel = otdel
... self.dolzhnost = dolzhnost
... self.oklad = oklad
... self._pooshchreniya = []
...
... def povyshenie_oklad(self, summa):
... if summa > 0:
... self.oklad += summa
... return self.oklad
... else:
... print("Сумма для повышения оклада должна быть больше нуля.")
...
... def perevod(self, new_otdel):
... self.otdel = new_otdel
... return self.otdel
...
... def cmena_dolzhnosty(self, new_dolzhnost):
... self.dolzhnost = new_dolzhnost
... return self.dolzhnost
...
... @property
... def pooshchrenia(self):
... return self._pooshchreniya
...
... def add_pooshchrenie(self, pooshchrenie):
... self._pooshchreniya.append(pooshchrenie)
... print(f"Сотрудник {self.fio} теперь имеет поощрение: {pooshchrenie}")
...
...
>>> emp_1=Employee ("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 300000)
>>> emp_2=Employee ("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 1500000)
>>> print(f"{emp_1.fio}, {emp_1.otdel}, {emp_1.dolzhnost}, оклад: {emp_1.oklad}")
Толчеев В.О., Кафедра Управления и информационных технологий, Профессор, оклад: 300000
>>> print(f"{emp_2.fio}, {emp_2.otdel}, {emp_2.dolzhnost}, оклад: {emp_2.oklad}")
Бобряков А.В., Кафедра Управления и информационных технологий, Заведующий кафедрой, оклад: 1500000
>>> emp_2.perevod("МАИ")
'МАИ'
>>> emp_1.povyshenie_oklad(20000)
320000
>>> emp_2.cmena_dolzhnosty("Ассистент")
'Ассистент'
>>> emp_2.add_pooshchrenie("Выслуга лет")
Сотрудник Бобряков А.В. теперь имеет поощрение: Выслуга лет
>>> emp_1.add_pooshchrenie("Лучший ")
Сотрудник Толчеев В.О. теперь имеет поощрение: Лучший
>>> print(f"Поощрения {emp_1.fio}: {emp_1.pooshchrenia}")
Поощрения Толчеев В.О.: ['Лучший ']
>>> print(f"Поощрения {emp_2.fio}: {emp_2.pooshchrenia}")

@ -0,0 +1,198 @@
# Индивидуальное контрольное задание по теме 9
Голощапов Д.Е., А-01-23
## Задание
M3_9
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - список Х с последовательностью отсчетов некоторого сигнала и два числовых параметра:М1 и М2; в функции должен создаваться кортеж К с индексами "аномальных" отсчетов сигнала, для которых выполняются неравенства: X[i]-X[i-1]<M1 или X[i]-X[i-1]>M2.
- функция 2: аргументы - список Х с отсчетами сигнала и кортеж К с индексами "аномальных" отсчетов; в функции должен создаваться новый список Х1, в котором элементы совпадают с элементами из Х, если те не являются "аномальными", а элементы из списка К заменяются на X[i]=0.5*(X[i-1]+X[i+1]), а если "аномальным" окажется последний элемент, то его значение заменяется на значение предпоследнего элемента.
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашивается и вводится имя текстового файла со значениями сигнала; проверяется наличие файла и при отсутствии - повторение запроса;
- из указанного файла считывается список Х с сигналом, причем в строках файла может быть разное число отсчетов сигнала;
- запрашиваются и вводятся граничные значения М1 и М2 (с проверкой: М1<M2);
- с применением функции 1 создается кортеж с индексами "аномальных" отсчетов; результат отображается на экране;
- если кортеж "аномальных" отсчетов не пустой, то с применением функции 2 создается список Х1 с "исправленным" сигналом, отображается на экране и записывается в бинарный файл Res44.bin; в ином случае выдается сообщение об отсутствии "аномальных" отсчетов.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика сигналы Х и Х1.
4) Подготовьте текстовый файл, в который запишите 50 случайных, нормально распределенных чисел с математическим ожиданием 10 и стандартным отклонением 5. Проведите 2 расчета по программе с использованием этого файла: в первом расчете задайте М1=-2, М2=5, а во втором - М1=-20, М2=50.
## Решение
### Модуль 1
```
def find_anomalous_indices(X, M1, M2):
indices = []
for i in range(1, len(X)):
diff = X[i] - X[i-1]
if diff < M1 or diff > M2:
indices.append(i)
return tuple(indices)
def correct_anomalies(X, K):
X1 = X.copy()
for idx in K:
if idx == len(X) - 1:
X1[idx] = X1[idx - 1]
else:
X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1])
return X1
```
### Модуль 2
```
import os
import sys
import pickle
def run_M2():
while True:
filename = input("Введите имя текстового файла с сигналом: ").strip()
if os.path.isfile(filename):
break
else:
print('Файл не найден, повторите ввод')
X = []
with open(filename, 'r') as f:
for line in f:
parts = line.strip().split()
for p in parts:
X.append(float(p))
while True:
M1 = float(input("Введите M1 (нижняя граница разности): "))
M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): "))
if M1 < M2:
break
else:
print("M1 должно быть меньше M2.")
from M1 import find_anomalous_indices, correct_anomalies
K = find_anomalous_indices(X, M1, M2)
print(f"Аномальные индексы: {K}")
if K:
X1 = correct_anomalies(X, K)
print("Исправленный сигнал:", X1)
with open("Res44.bin", "wb") as f:
pickle.dump(X1, f)
print("Результат записан в Res44.bin")
else:
print("Аномальных отсчётов не обнаружено.")
return X, X1 if K else X
```
### Модуль 0
```
import pylab
from M2 import run_M2
def main():
X, X1 = run_M2()
pylab.figure(figsize=(10, 5))
pylab.subplot(1, 2, 1)
pylab.plot(X, label='Исходный сигнал')
pylab.title("Исходный сигнал")
pylab.xlabel("Отсчёты")
pylab.ylabel("Значение")
pylab.grid(True)
pylab.subplot(1, 2, 2)
pylab.plot(X1, label='Исправленный сигнал', color='orange')
pylab.title("Исправленный сигнал")
pylab.xlabel("Отсчёты")
pylab.ylabel("Значение")
pylab.grid(True)
pylab.tight_layout()
pylab.show()
if __name__ == "__main__":
main()
```
```
"""
Создание тестового файла с нормально распределёнными числами.
"""
import numpy as np
# Генерация 50 чисел с нормальным распределением
signal = np.random.normal(loc=10, scale=5, size=50)
# Запись в файл
with open("signal.txt", "w") as f:
for i, value in enumerate(signal):
f.write(f"{value:.4f}")
if (i + 1) % 5 == 0: # 5 значений в строке
f.write("\n")
else:
f.write(" ")
print(f"Создан файл signal.txt с {len(signal)} значениями")
```
# Результат
## Для -2 и 5:
```py
Введите имя текстового файла с сигналом: signal.txt
Введите M1 (нижняя граница разности): -2
Введите M2 (верхняя граница разности, M2 > M1): 5
Аномальные индексы: (4, 6, 11, 12, 13, 14, 15, 19, 21, 23, 24, 25, 26, 27, 29, 31, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47)
Исправленный сигнал: [4.263134009624702, 4.067283548723314, 4.874920842655541, 4.834128754109237, 8.223862521322928, 11.61359628853662, 10.259560286375322, 8.905524284214025, 8.186641831318802, 8.638222773625724, 10.700010550793879, 12.779448770191685, 8.629985270429243, 9.424308136414886, 8.760419982249502, 9.797062915592713, 10.833705848935924, 9.862509524620615, 11.252167038027647, 12.422198441999871, 13.592229845972096, 10.572927730780062, 7.553625615588027, 7.133718458186862, 9.520052608400205, 9.619255895493783, 6.667092820033337, 5.8050169142673225, 4.942941008501308, 8.946793175470068, 12.950645342438829, 11.648800239430907, 12.308287984866364, 12.96777573030182, 13.306115816113852, 6.713448306681809, 8.251140355134947, 9.870702494815166, 11.490264634495386, 6.833826225314228, 7.604423745564782, 10.493832859781548, 7.59146239455013, 11.577494034371783, 9.08507549520261, 16.320693167525047, 10.352440652123295, 8.987414956427836, 7.622389260732377, 11.17003135779134]
Результат записан в Res44.bin
```
![График](-2and5.png)
## Для -20 и 50:
```py
Введите имя текстового файла с сигналом: signal.txt
Введите M1 (нижняя граница разности): -20
Введите M2 (верхняя граница разности, M2 > M1): 50
Аномальные индексы: ()
Аномальных отсчётов не обнаружено.
```
![График](-20and50.png)
Загрузка…
Отмена
Сохранить