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

...

16 Коммитов

Автор SHA1 Сообщение Дата
ac2fd98764 26 2025-10-13 14:41:05 +03:00
6a56424c81 26 2025-10-13 14:27:32 +03:00
067cf26fda o 2025-10-13 13:58:39 +03:00
7618bbeb2f lab4 2025-10-13 13:55:09 +03:00
d988fc8b25 lab4 2025-10-13 01:29:04 +03:00
fa60788940 Test 2025-09-29 14:50:43 +03:00
acec586f5c Test 2025-09-29 14:47:58 +03:00
2622962676 lab3 2025-09-29 11:14:35 +03:00
40717bf6b9 lab3 2025-09-28 14:22:00 +03:00
018b00b0d8 lab3 2025-09-28 14:16:01 +03:00
a77984b71e laba2 2025-09-15 12:23:13 +03:00
2b8221e869 laba2 2025-09-15 12:12:14 +03:00
bbfe0cbd4a laba1 2025-09-15 01:19:34 +03:00
ae33519ad6 laba1 2025-09-15 01:15:00 +03:00
16ff9e3ab1 protocol 2025-09-15 01:14:27 +03:00
09fe594785 Pr0.py 2025-09-15 01:13:34 +03:00
10 изменённых файлов: 2504 добавлений и 0 удалений

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

@@ -0,0 +1,5 @@
#Программа по Теме 1 <Цветкова Т. А.>
print('Hello')
h=input('Your name=')
import os
os.chdir(r'C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA1')

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

@@ -0,0 +1,156 @@
# Отчет.
## Модуль 1 Основы языка программирования Python.
## Тема 1. Знакомство с интерпретатором и интерактивной оболочкой IDLE.
## Пункт1:
Была создана папка и распакован архив Tema1/
## Пункт2:
Запустили на выполнение интерпетатор Python 3.11
## Пункт3:
Ввели команду print и убедились в ее работоспособности.
```py
>>> print('Hello')
Hello
```
## Пункт4:
Изучили команду input.
```py
>>> h=input('Your Name=')
Your Name=Tanya
>>> h
'Tanya'
```
## Пункт5:
Завершили работу интерпретатора с помощью команды
```py
>>>exit().
```
## Пункт6:
Запустили IDLE Python 3.11
## Пункт7:
Изучили устройство главного командного окна
## Пункт8:
Ввели инструкции настройки рабочего каталога среды
```py
>>>import os
>>>os.chdir(r'C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA1')
```
## Пункт9:
Установили в среде шрифт типа Arial CYR, размер 11, размер начального окна - высота 50 символов, ширина 100 символов, подкраска комментариев - коричневая
## Пункт10:
Создали новый фйл Pr0.py
```py
Программа по Теме 1 <ЦветковаТА>
>>>print('Hello')
>>>h=input('Your name=')
>>>import os
>>>os.chdir('C:\\Users\\Admin\\Desktop\\TsvetkovaTA\\Tema1\\')
```
Запустили модуль и получили результат
```py
>>>import Pr0
Hello
Your name=Tanya
```
## Пункт11:
Запустили модуль prb1
```py
>>>import prb1
Как Вас зовут? Таня
Привет, Таня
```
## Пункт12:
Попробовали открыть файл Pr0.cpython-34.pyc и поняли, что из-за скомпилированного бинарного файла текстовый редактор как раз-таки выдает ошибку, тк не может считать файл .рус, ожидая стандартную для него кодировку.
Комплиляция программ необходима, чтобы перевести команды из человекопонятной формы в машинный код, который может быть обработан процессором.
При выполнении скрипта Python сначала преобразовывает его в байт-код (.рус), а затем уже он компилируется с помощью виртуальный машины.
Это ускорит повторную загрузку программы.
## Пункт13:
В текстовом редакторе оболочки IDLE открыли новое окно.
Сохранили все из командного окна
## Пункт14:
В разделе помощи можно увидеть следующее
```py
About IDLE - информация о версии IDLE
IDLE Help - документация по самой IDLE
Python Docs - документация по языку Python
Turtle Demo - окно работы и помощь модуля для работы с графикой turtle
```
```py
>>>help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
```
```py
>>>help(print), help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
(None, None)
```
при F1 открывается справочное окно
## Пункт15:
Узнали, что опция Окно (Window)» помогает перемещаться между открытыми окнами
```py
>>>import tdemo_chaos
>>>tdemo_chaos.main()
'Done!'
```
Вывели на экран графическое представление
программы с часами. Есть и другие примеры программ модуля turtle,
которые можно брать за основу собственных программ, изменять или реализовывать
свои идеи
## Пункт16:
Звершили работу со средой
```py
>>>exit
```

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

@@ -0,0 +1,15 @@
#Программа по Теме 1 <Цветкова Т. А.>
import os
os.chdir(r'C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA1')
import Pr0
Hello
Your name=Tatyana
import os
os.chdir(r'C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA1')
import prb1
Как Вас зовут? Tatyana
Привет, Tatyana

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

@@ -0,0 +1,604 @@
# Протокол по Теме 2 <ЦветковаТА>»
## пункт2:
изучили простые объекты и присваивание
```py
>>>f1=16; f2=3
>>>f1,f2
(16, 3)
```
Или через точку с запятой. тогда друг за другом:
```py
>>> f1; f2
16
3
```
Узнаем какие объекты уже существуют в среде
```py
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
```
Еще эта функция может показать атрибуты объекта:
```py
>>> 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__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag',
'numerator', 'real', 'to_bytes']
```
Функция del необходима для удаления объекта
```py
>>> del f1,f2
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
```
## Пункт3:
```py
>>>gg1=1.6 #значение в виде вещественного числа
>>>hh1='Строка' #значение в виде символьной строки
>>>73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
SyntaxError: invalid decimal literal
>>>and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика!
SyntaxError: invalid syntax
```
## Пункт4:
Вывели список ключевых слов и присвоили команду к переменной
```py
>>>import keyword
>>>keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>>k=keyword.kwlist
k
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## Пункт5:
Выведем список встроенных идеентификаторов
```py
>>>import builtins
>>>dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', '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']
```
модуль
```py
>>>abs(-7)
7
```
длинна
```py
>>>len([1,2])
2
```
максимум и минимум
```py
>>>max(20,5)
20
>>>min(20,5)
5
```
возведение в степень
```py
>>>pow(4,2)
16
```
возведение в степень по модулю
```py
>>>pow (5, 2, 2)
1
```
округление
```py
>>>round (33.2)
33
```
округление с определенной точностью
```py
>>>round (33.45826, 3)
33.458
```
сумма
```py
>>>sum ([2, 5])
7
```
сортировка и иобратная сортировка
```py
>>>sorted ([5, 4, 18, 40, -6, 0])
[-6, 0, 4, 5, 18, 40]
>>>sorted ([5, 4, 18, 40, -6, 0], reverse = True)
[40, 18, 5, 4, 0, -6]
```
Объединение объектов в кортеж (возвращается указатель на участок памяти)
```py
>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> zip (list1, list2)
<zip object at 0x0000000002C42E88>
Это итератор - указатель на объект памяти. Чтобы увидеть сам кортеж, итератор надо
преобразовать в другой объект
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
```
## Пункт6:
Регестрочувствительность
```py
>>>Gg=45
>>>Gg
45
>>>gg
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
gg
NameError: name 'gg' is not defined. Did you mean: 'Gg'?
```
## Пункт7:
Типы объектов
```py
>>>bb1=True; bb2=False
>>>bb1;bb2
True
False
>>>type(bb1)
<class 'bool'>
тип (класс) объекта
```
Целое число (десятичное)
```py
>>> ii1 = 1234567890
>>> type(ii1)
<class 'int'>
```
Экспоненциальная форма записи числа
```py
>>> ff1 = 8.987e-12
>>> type(ff1)
<class 'float'>
```
Двоичное число (префикс 0b - binary)
```py
>>> dv1 = 0b1100101
>>> type(bb1)
<class 'bool'>
```
Восьмеричное число (0о - octal)
```py
>>> vsm1 = 0o52765
>>> type(vsm1)
<class 'int'>
```
Шестнадцатеричное число (0х - hexadecimal)
```py
>>> shest1 = 0x7109af6
>>> type(shest1)
<class 'int'>
```
Комплексное число
```py
>>> cc1 = 2 - 3j
>>> type(cc1)
<class 'complex'>
```
```py
>>> a = 3.67
>>> b = 0.45
>>> cc2 = complex (a, b)
>>> cc2
(3.67+0.45j)
>>> type (cc2)
<class 'complex'>
```
Строка символов
```py
>>> ss1='Это - строка символов'
>>> ss1="Это - строка символов"
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
>>> print(ss1a)
Это - " строка символов ",
выводимая на двух строках
>>> ss1b= 'Меня зовут: \n <Цветкова ТА>'
>>> print(ss1b)
Меня зовут:
<Цветкова ТА>
```
```py
>>> mnogo="""Нетрудно заметить , что в результате операции
... над числами разных типов получается число,
... имеющее более сложный тип из тех, которые участвуют в операции."""
>>> print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
```
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки.
Обратимся к отдельным элементам с помощью квадратных кавычек
(нумерация с нуля):
```py
>>> mnogo[5]
'д'
```
Обращение начиная с последнего элемента:
```py
>>> ss1b[-1]
'>'
```
Срезы:
```py
>>> ss1[7:10]
'тро'
```
Срез с шагом в 2:
```py
>>> ss1[7:14:2]
'тоас'
```
```py
>>> ss1[5:-8]
' строка '
```
Задав шаг -1, можно вывести строку в обратном порядке:
```py
>>> ss1[::-1]
'воловмис акортс - отЭ'
```
К элементу можно обратиться как по нумерации с начала, так и с конца:
```py
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[-4:3:-2]
'омсаот '
```
Строка является неизменяемым объектом
```py
>>> ss1[4]='=' # Будет диагностика!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> ss1=ss1[:4]+'='+ss1[5:]
>>> print(ss1)
Это = строка символов
```
Новый объект на основе среза из старого:
```py
>>> ss1b_cut = ss1b [::-1]
>>> ss1b_cut
'>АТ авоктевЦ< \n :тувоз янеМ'
```
## Пункт8:
Список
```py
>>> 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]
>>> pis=[1,2,3,4,
... 5,6,7,
... 8,9,10]
>>> pis
[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
```
Методы списка
Добавление в конец (append)
```py
>>> help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
>>> spis1.append('New item') # В конец списка добавлен элемент «New item»
>>> spis1
['111', 'Список', (5-9j), 'New item']
>>> spis1+['New item']
Только возвращает результат, но не фиксирует такое значение!
['111', 'Список', (5-9j), 'New item', 'New item']
```
Удаление элемента по индексу
```py
>>> spis1.pop(1)
'Список'
>>> spis1
['111', (5-9j), 'New item', 'Меня зовут: \n <Цветкова ТА>']
```
Вставка элемента в определенное место по индексу (insert)
```py
>>> spis1.insert(2, "hello")
>>> spis1
['111', (5-9j), 'hello', 'New item', 'Меня зовут: \n <Цветкова ТА>']
```
Удаление элемента по значению (remove)
```py
>>> 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 <Цветкова ТА>']
```
```py
>>> spis1.remove('222')
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
spis1.remove('222')
```
Добавление элементов объекта в конец другого объекта (extend)
```py
>>> 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 = [77, "lab"]
>>> spis1.extend(end1)
>>> spis1
[(5-9j), 'hello', 'New item', 'Меня зовут: \n <Цветкова ТА>', '77', 'lab']
```
Полное очищение списка (clear)
```py
>>> help(spis1.clear)
Help on built-in function clear:
clear() method of builtins.list instance
Remove all items from list.
>>> end1.clear()
>>> end1
[]
```
Сортировка списка БЕЗ создания нового объекта (sort)
```py
>>> 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.
>>> abc = [4,7,-3,0]
>>> abc.sort(key = abs, reverse = True)
>>> abc
[7, 4, -3, 0]
```
При этом некоторые key's не применимы для некоторых типов (у string нет abs,
у complex нет длины и т.д.)
Создание копии списка (copy)
```py
>>> help(abc.copy)
Help on built-in function copy:
copy() method of builtins.list instance
Return a shallow copy of the list.
>>> abccopy=abc.copy()
>>> abccopy
[7, 4, -3, 0]
```
Поиск индекса по значению (index)
```py
>>> help(abccopy.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.
>>> abccopy.index(0)
3
```
Подсчет количества элементов по значению (count)
```py
>>> help(abccopy.count)
Help on built-in function count:
count(value, /) method of builtins.list instance
Return number of occurrences of value.
>>> abccopy.count(4)
1
```
Вложенные списки:
```py
>>> spis2=[spis1,[4,5,6,7]]
>>> spis2
[['111', (5-9j), 'hello', 'New item', 'Меня зовут: \n <Цветкова ТА>', '77', 'lab'], [4, 5, 6, 7]]
>>> spis2[0][1]
(5-9j)
>>> spis2[0][1]=78
>>> spis2
[['111', 78, 'hello', 'New item', 'Меня зовут: \n <Цветкова ТА>', '77', 'lab'], [4, 5, 6, 7]]
>>> spis1
[['111', 78, 'hello', 'New item', 'Меня зовут: \n <Цветкова ТА>', '>'
```
spis1 тоже изменился. Это происходит потому, что python работает не просто с
объектами, а с ссылками на участки памяти. То есть, в Python списки передаются по ссылке,
а не по значению.
Кортеж: последовательность как список, но неизменяемая как строка.
```py
>>> kort1=(222,'Kortezh',77+8j)
>>> kort1= kort1+(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 "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> kortstr = ("gjgvu", 4, [1,2,3], (1,2))
>>> kortstr
('gjgvu', 4, [1, 2, 3], (1, 2))
>>> type(kortstr[3])
<class 'tuple'>
>>> type(kortstr[2])
<class 'list'>
```
Словарь (dictionary) - содержит в себе совокупность пар
"ключ (key) (неизменяемый)": "значение (value) (любого типа)"
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
>>> dic1[1]
Traceback (most recent call last):
File "<pyshell#99>", 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 <Цветкова ТА>'}
```
Создание собственного словаря на основе кортежа из семи элементов и списка из пяти:
```py
>>> a0223=('спать', 'учиться','работать', 'кмы','барс','лекции','общежитие')
>>> a0123=['1', '2', '3', '4', '5']
>>> MPEI=dict(zip(a0123, a0223))
>>> MPEI
{'1': 'спать', '2': 'учиться', '3': 'работать', '4': 'кмы', '5': 'барс'}
```
В итоговом словаре пять объектов. Это связано с работой функции zip:
длина итогового объекта = минимальной длине составляющего
объекта.
Словари: состоят из НЕповторяющихся неизменяемых элементов
```py
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'двигатель', 'линия связи', 'датчик', 'микропроцессор'}
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'реле', 'микропроцессор', 'датчик', 'двигатель'}
```
Общее контрольное задание:
1. Создать переменную с именем familia и со значением -
символьной строкой – своей фамилией в латинской транскрипции.
```py
>>> familia = 'Tsvetkova'
```
2. Создать переменную со значением, совпадающим с первой
буквой из familia.
```py
>>> fam1 = familia[0]
>>> fam1
'T'
```
3. Создать переменную с именем sp_kw со значением –
списком всей ключевых слов языка Python.
```py
>>> import keyword
>>> sp_kw = keyword.kwlist
>>> sp_kw
['False', 'None', 'True', '__peg_parser__', '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'. Выводом списка в
командном окне IDLE убедитесь, что это значение удалено из списка.
```py
>>> sp_kw.remove('nonlocal')
>>> sp_kw
['False', 'None', 'True', '__peg_parser__', '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.
```py
>>> kort_nam = ('Stas', 'Dana', 'Katya', 'Tanya')
>>> type(kort_nam)
<class 'tuple'>
```
6. Напишите инструкцию, добавляющую в kort_nam имена
еще двух студентов.
```py
>>> kort_nam += ('Andrey', 'Nastya')
>>> kort_nam
('Stas', 'Dana', 'Katya', 'Tanya', 'Andrey', 'Nastya')
```
7. Напишите инструкцию, позволяющую определить, сколько раз в
кортеже присутствуют студенты с именем «Дима».
```py
>>> kort_nam.count("Dima")
0
```
8. Создайте словарь dict_bas, в котором ключами являются русские
названия типов переменных, использованных в предыдущих операторах,
а значениями – ранее созданные переменные, соответствующие этим типам.
```py
>>> dict_bas = {"строка": familia, "символ": fam1, "список": sp_kw,
"кортеж": kort_nam,}
>>> dict_bas
{'строка': 'Tsvetkova', 'символ': 'T', 'список': ['False', 'None', 'True',
'__peg_parser__', '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'], 'кортеж': ('Stas', 'Dana', 'Katya', 'Tanya', 'Andrey', 'Nastya')}
```

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

@@ -0,0 +1,48 @@
## 1)Для чего предназначено предложение "Окно (Window)" главного меню?
Для быстрого переключения между различными открытыми окнами в среде IDLE
## 2)Создайте объект-кортеж с 5 произвольными двоичными элементами. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
```py
>>> bin(4)
'0b100'
>>> bin(6)
'0b110'
>>> bin(7)
'0b111'
>>> bin(44)
'0b101100'
>>> bin(99)
'0b1100011'
>>> k=(0b100, 0b110, 0b111, 0b101100,0b1100011)
>>> type(k)
<class 'tuple'>
>>> dir(k)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
```
## 3)Напишите инструкцию создания нового кортежа, в который включите два последних элемента ранее созданного кортежа, и два элемента - символы "a" и "b". Отобразите созданный объект на экране.
```py
>>> k1=k[-2:]+('a','b')
>>> k1
(44, 99, 'a', 'b')
```
## 4) Преобразуйте кортеж в список. Вставьте в качестве второго элемента списка значение "Автоматизированная система". Отобразите полученный объект.
```py
>>> spisok=list(k1)
>>> spisok.insert(1, 'Автоматизированная система')
>>> spisok
[44, 'Автоматизированная система', 99, 'a', 'b']
```
## 5) Напишите инструкции, обеспечивающие подсчет суммы числовых элементов кортежа. С использованием формата отобразите результат по шаблону: "Сумма элементов=:".
```py
>>> sum_rez=0
>>> for element in k1:
... if type(element)==int:
... sum_rez += element
...
>>> sum_rez
143
>>> s="Сумма элементов=:"+str(sum_rez)
>>> s
'Сумма элементов=:143'
```

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

@@ -0,0 +1,813 @@
# Отчет
## Тема 3.
Операции с объектами
## Пункт 2.
Преобразование простых базисов типов объектов
## 2.1 Преобразование в логический тип с помощью функции bool(<Объект>)
```py
>>>logiz1=bool(56)
>>>logiz1
True
>>>logiz2=bool(0)
>>>logiz2
False
>>>logiz3=bool("Beta")
>>>logiz3
True
>>>logiz4=bool("")
>>>logiz4
False
```
## 2.2 Преобразование в целое десятичное число
```py
>>>tt1= int(198.6)
>>>tt1
198
>>>tt2=int('-76')
>>>tt2
-76
>>>tt3= int('B',16)
>>>tt3
11
>>>tt4=int("71",8)
>>>tt4
57
>>> tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
Функция int() может преобразовывать в целое число только строки, которые содержат целое число (например, "98"). Строка "98.76" содержит десятичную точку, поэтому возникает ошибка.
Решить эту проблему можно так:
```py
>>>tt5 = int(float("98.76"))
>>>tt5
98
```
## 2.3 Преобразование десятичных чисел в другие системы счисления
```py
>>>hh=123
>>>dv1=bin(hh) #в двоичную сс
>>>dv1
'0b1111011'
>>>vos1=oct(hh) #в восьмеричную сс
>>>vos1
'0o173'
>>>shs1=hex(hh) #в шеснадцатеричную сс
>>>shs1
'0x7b'
```
Для проверки выполним обратные преобразования
```py
>>>int (dv1,2)
123
>>int(vos1,8)
123
>>int(shs1,16)
123
```
## Пункт 3.
Преобразование более сложных базовых типов объектов
## 3.1 Преобразование в строку символов с помощью функции str(<Объект>)
```py
>>>strk=str(23.6)
>>>strk
'23.6'
>>>strk2=str(logiz3)
>>>strk2
'True'
>>>strk3=str(["A","B","C"]) #Преобразуем список
>>>strk3
"['A', 'B', 'C']"
>>>strk4=str(("A","B","C")) #Преобразуем кортеж
>>>strk4
"('A', 'B', 'C')"
>>>strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
>>>strk5
"{'A': 1, 'B': 2, 'C': 9}"
```
## 3.2 Преобразование элементов объекта в список с помощью функции list(<Объект>)
```py
>>>spis1=list("Строка символов") #Заданная строка разделяется на символы
>>>spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>>spis2=list((124,236,-15,908)) #Кортеж превращается в список
>>>spis2
[124, 236, -15, 908]
>>>spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
>>>spis3
['A', 'B', 'C']
>>> spis4 = list({"A":1,"B":2,"C":9}.values())
>>> spis4
[1, 2, 9]
```
## 3.3 Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>)
```py
>>>kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
>>>kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
>>>kort8=tuple(spis2) #Преобразование списка в кортеж
>>>kort8
(124, 236, -15, 908)
>>>kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
>>>kort9
('A', 'B', 'C')
>>> kort9 = tuple(({"A":1,"B":2,"C":9}.values()))
>>> kort9
(1, 2, 9)
```
## 3.4. Удаление объектов
```py
>>>del strk5, kort8
Проверим
>>>dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'hh', 'kort7', 'kort9', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'shs1', 'spis1', 'spis2', 'spis3', 'spis4', 'strk', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'tt5', 'vos1']
```
Создадим строку со своей фамилией и инициалами, преобразуем её в список, затем список – в кортеж и, наконец, кортеж – в строку.
```py
>>> f= 'ЦветковаТА'
>>> spis= list(f)
>>> spis
['Ц', 'в', 'е', 'т', 'к', 'о', 'в', 'а', 'Т', 'А']
>>> k=tuple(spis)
>>> k
('Ц', 'в', 'е', 'т', 'к', 'о', 'в', 'а', 'Т', 'А')
>>> kk=str(k)
>>> kk
"('Ц', 'в', 'е', 'т', 'к', 'о', 'в', 'а', 'Т', 'А')"
>>> sttr = ''.join(k)
>>> sttr
'ЦветковаТА'
```
## Пункт 4. Арифметические операции.
## 4.1. Сложение и вычитание (+ и -)
```py
>>> 12+7+90
109
>>> 5.689e-1 - 0.456
0.11289999999999994
>>> 23.6+54
77.6
>>> 14-56.7+89
46.3
```
## 4.2. Умножение (*)
```py
>>> -6.7*12
-80.4
```
## 4.3. Деление (/). Результатом деления всегда будет вещественное число!
```py
>>> -234.5/6
-39.083333333333336
>>> a=178/45
>>> a
3.9555555555555557
>>> type(a)
<class 'float'>
```
## 4.4. Деление с округлением вниз (//). Здесь результат может быть целым или вещественным.
```py
>>> b=178//45
>>> b
3
>>> type(b)
<class 'int'>
>>> c=-24.6//12.1
>>> c
-3.0
>>> type(c)
<class 'float'>
```
## 4.5. Получение остатка от деления (%).
```py
>>> 148%33
16
>>> 12.6%3.8
1.2000000000000002
>>> 56.97%6
2.969999999999999
```
## 4.6. Возведение в степень (**).
```py
>>> 14**3
2744
>>> e=2.7**3.6
>>> e
35.719843790663525
>>> d=2.7**3
>>> d
19.683000000000003
```
Попробуем проделать арифметические операции над комплексными числами. Создадим два
комплексных числа
```py
>>> k1=(2+1j)
>>> k2=(1+2j)
>>> k1+k2
(3+3j)
>>> k2-k1
(-1+1j)
>>> k1*k2
5j
>>> k1/k2
(0.8-0.6j)
>>> k1**k2
(-0.42589434775182566+0.7753703444218832j)
>>> k1//k2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
>>>k1//2
Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
k1//2
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
>>> k1%k2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
>>>k1%2
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
```
## Пункт 5. Операции с двоичными представлениями целых чисел.
## 5.1 Двоичная инверсия (~). Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0)
```py
>>> dv1=9
>>> dv2=~dv1
>>> dv2
-10
```
## 5.2 Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```py
>>> 7&9
1
>>> 7&8
0
```
Проверим
```py
>>> bin(7)
'0b111'
>>> bin(9)
'0b1001'
>>> bin(7&9)
'0b1'
```
## 5.3 Двоичное «ИЛИ» (|) – побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```py
>>> 7|9 # 0111 или 1001 = 1111
15
>>> 7|8 # 0111 или 1000 = 1111
15
>>> 14|5 # 1110 или 0101 = 1111
15
>>> bin(15)
'0b1111'
```
## 5.4. Двоичное «исключающее ИЛИ»(^) - побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
```py
>>> 14^5 #1110 ^ 0101 = 1011
11
>>> bin(11)
'0b1011'
>>> bin(14)
'0b1110'
>>> bin(5)
'0b101'
```
## 5.5 Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```py
>>> h=14
>>> bin(14)
'0b1110'
>>> g=h<<2
>>> bin(g)
'0b111000'
>>> g1=h>>1
>>> bin(g1)
'0b111'
>>> g2=h>>2
>>> bin(g2)
'0b11'
```
Придумайте два двоичных числа, не менее чем с 7 знаками, и попробуйте выполнить с ними разные операции.
```py
>>> bin(76)
'0b1001100'
>>> bin(112)
'0b1110000'
>>> 76&112
64
>>> bin(64)
'0b1000000'
>>> 76|112
124
>>> bin(124)
'0b1111100'
>>> 76^112
60
>>> g=76<<2
>>> g
304
>>> bin(g)
'0b100110000'
```
## 6. Операции при работе с последовательностями (строками, списками, кортежами).
## 6.1. Объединение последовательностей (конкатенация)(+)
```py
>>>'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
## 6.2 Повторение (*)
```py
>>> 'ля-'*5
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99
>>> signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> signal2=(0,)*3+(1,)*5+(0,)*7
>>> signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
## 6.3. Проверка наличия заданного элемента в последовательности (in)
```py
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka
True
>>> 'ку' in ['ку','-']*3
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
## 6.4. Подстановка значений в строку с помощью оператора «%»
```py
>>> stroka='Температура=%g %s %g'
>>> stroka
'Температура=%g %s %g'
>>> stroka % (16,' меньше ',25)
'Температура=16 меньше 25'
>>> stroka % (66,' меньше ',77)
'Температура=66 меньше 77'
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Оператор присваивания
## 7.1. Обычное присваивание значения переменной (=)
```py
>>> zz=-12
```
## 7.2. Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```py
>>> zz+=5
>>> zz
-7
>>> zz-=3
>>> zz
-10
>>> stroka='Система'
>>> stroka+=' регулирования'
>>> stroka
'Система регулирования'
```
## 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
>>> zz/=2
>>> zz
-5.0
>>> zz*=5
>>> zz
-25.0
```
## 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```py
>>> zz//=2
>>> zz
-13.0
>>> zz**=2
>>> zz
169.0
>>> zz%=5
>>> zz
4.0
```
## 7.5. Множественное присваивание
Присваивание одного значения нескольким переменным
```py
>>> w=v=10
>>> w
10
>>> v
10
```
Присваивание кортежа
```py
>>> n1,n2,n3=(11,-3,'all')
>>> n1,n2,n3
(11, -3, 'all')
```
Присваивание списка
```py
>>> a1,a2,a3=[1,2,3]
>>> a1,a2,a3
(1, 2, 3)
```
Присваивание словаря
```py
>>> s1,s2,s3={'один':1,'два':2,'три':3}
>>> s1,s2,s3
('один', 'два', 'три')
```
Если необходимо присвоить значения, то это можно сделать через .values()
```py
>>> s1,s2,s3={'один':1,'два':2,'три':3}.values()
>>> s1,s2,s3
(1, 2, 3)
```
Если необходимо присвоить ключи и значения, то это можно сделать через .items()
```py
>>> f1,f2,f3={'один':1,'два':2,'три':3}.items()
>>> f1,f2,f3
(('один', 1), ('два', 2), ('три', 3))
>>> f1
('один', 1)
>>> f2
('два', 2)
>>> f3
('три', 3)
```
Присваивание множества
```py
>>> m1,m2,m3={0,89,6}
>>> m1,m2,m3
(0, 89, 6)
```
Присваивание строки
```py
>>> c1,c2,c3='1','2','3'
>>> c1,c2,c3
('1', '2', '3')
```
## 8. Логические операции (True или False)
## 8.1. Операции сравнение
```py
>>> v==w
True
>>> v!=w
False
>>> v>w
False
>>> v<w
False
>>> v>=w
True
>>> v<=w
True
>>> 5==4
False
>>> 5!=4
True
>>> 5>4
True
>>> 5<4
False
>>> 5>=4
True
>>> 5<=4
False
```
## 8.2. Проверка наличия заданного элемента в последовательности или во множестве, а также про-верка наличия ключа в словаре (in).
Операции с множеством
```py
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
```
Операции со словарем
```py
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> 56 in dic1.values()
True
```
Ещё пример работы со словарем:
```py
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```
## 8.3. Создание больших логических выражений с использованием соединительных слов: логиче-ское «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
```py
>>> a=17
>>> b=-6
>>> (a>=b)and('book' in mnoz1)and not('Pskov' in dic1 )
True
>>> (5==4)or(a==17)
True
>>> (5==4)and(a==17)
False
>>> ((5==4)and(a==17))or(not(5==4)and(a==17))
True
```
## 8.4. Проверка ссылок переменных на один и тот же объект (is).
```py
>>> w=v=10
>>> w1=['A','B']
>>> v1=['A','B']
>>> w1==v2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'v2' is not defined. Did you mean: 'v'?
>>> w1==v1
True
>>> w1 is v1
False
>>> w is v
True
```
Оператор is сравнивает адреса объектов в памяти. Целые числа из одной строки хранятся по одному адресу, поэтому is возвращает True. Словари же, созданные отдельно, размещаются в разных местах памяти, и is для них дает False.
## Пункт 9. Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например,
```py
>>> 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. Методы для работы со строками
```py
>>> stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
>>> stroka.count("с") #Подсчет числа вхождений строки "с" в stroka
4
>>> stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит за-данный разделитель
>>> spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
>>> stroka3
'Микропроцессорная система управления'
>>> stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
```
## Mетод format
Форматирование строки осуществляется в случае, если необходимо в символьную строку подставить значения некоторых объектов, например, полученных в ходе выполнения программы. Часто такую строку затем используют для вывода результатов работы программы на экран или в файл протокола.
```py
>>> strk1='Момент времени {}, значение = {}'
>>> strk1
'Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}'
```
Здесь цифры в фигурных скобках – это индексы, определяющие порядок использования аргумен-тов формата. Поэтому такой способ называют основанным на позиционных аргументах. Например,
```py
>>> strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
>>> strk3='Момент времени {num}, значение = {znch}'
```
Здесь в скобках указаны имена аргументов – вставок. Поэтому такой способ основан на имено-ванных аргументах.
```py
>>> strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
## 9.2. Методы для работы со списками.
```py
>>> spsk = [1, (2, 3), 'hello Sergey Alexandrovich', 3.14 , 'pi']
>>> spsk.pop(2) #Удаление элемента по индексу
'hello Sergey Alexandrovich'
>>> spsk.append('c') #Вставка элемента в конец
>>> spsk
[1, (2, 3), 3.14, 'pi', 'c']
>>> spsk.insert(2,'a') #Вставка элемента в конкретное место по индексу
>>> spsk
[1, (2, 3), 'a', 3.14, 'pi', 'c']
>>> spsk.count('a') #Подсчет количества элементов по значению
1
## 9.3. Mетоды кортежей
У кортежей методов меньше, тк он являетя неизменяемым и методов на добавление/удаление объекта - нет
```py
>>> km2=(5,'пять', 5.55, 'мопсикии',4+1j)
>>> km2.count(5)
1
>>> km2.index('мопсикии')
3
```
## 9.4 Методы словарей
```py
>>> d={'key1':1, 'key2':2,'key3':3,'key4':4}
Cоздание копии
```py
>>> d1=d.copy()
>>> d1
{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4}
```
Возвращение значения по ключу
```py
>>> d.get('key3')
3
```
Возвращение кортежей из пар ключ-значение
```py
>>> d.items()
dict_items([('key1', 1), ('key2', 2), ('key3', 3), ('key4', 4)])
```
Возвращение объекта только из ключей
```py
>>> d.keys()
dict_keys(['key1', 'key2', 'key3', 'key4'])
```
Возвращение объекта только из значений
```py
>>> d.values()
dict_values([1, 2, 3, 4])
```
Добавление ключ-значения
```py
>>> d['key5']=5
>>> d
{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5}
```
Удаление ключ-значения
```py
>>> d.pop('key1')
1
>>> d
{'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5}
```
Очищение словаря
```py
>>> d.clear()
>>> d
{}
```
## Методы множеств
```py
>>> mn={1,'dva',3.33}
```
Добавление элемента
```py
>>> mn.add(4)
>>> mn
{1, 3.33, 4, 'dva'}
```
Создание копии
```py
>>> cop=mn.copy()
>>> cop
{1, 3.33, 4, 'dva'}
```
Удаление элемента по значению
```py
>>> mn.remove(1)
>>> mn
{3.33, 4, 'dva'}
```
Удаление элемента по значению
```py
>>> mn.discard('dva')
>>> mn
{3.33, 4}
```
Очищение множества
```py
>>> mn.clear()
>>> mn
set()
```
Удаление и возвращение случайного элемента из множества
```py
>>> cop.pop()
1
>>> cop
{3.33, 4, 'dva'}
```
Добавление элементов
```py
>>> cop.update({False,'t'})
>>> cop
{False, 3.33, 4, 't', 'dva'}
```
## Общее контрольное задание
Преобразовать восьмеричное значение 45 в целое число.
```py
>>> octv = '45'
>>> decv = int(octv, 8)
>>> decv
37
```
Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12,
"постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и
значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж
от списка?
```py
>>> D = {"усиление": 23, "запаздывание": 12, "постоянная времени": 78}
>>> keyD = list(D.keys())
>>> keyD
['усиление', 'запаздывание', 'постоянная времени']
>>> valD = list(D.values())
>>> valD
[23, 12, 78]
>>> tupD = (keyD, valD)
>>> tupD
(['усиление', 'запаздывание', 'постоянная времени'], [23, 12, 78])
```
Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с
округлением вниз, с определением после этого остатка от деления получившегося значения
на 3 и затем возведения результата в степень 2.4.
```py
>>> ((1768 // 24.8) % 3) ** 2.4
5.278031643091577
```
Напишите и выполните единое выражение, последовательно осуществляющее следующие
операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее
ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
```py
>>> ((~(13 & 27)) ^ 14) << 2
-32
```
Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки
наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов
этого списка.
```py
>>> lst = ["колебат"] * 4
>>> lst[1] += lst[2]
>>> lst
['колебат', 'колебатколебат', 'колебат', 'колебат']
>>> lst.pop(2)
'колебат'
>>> lst
['колебат', 'колебатколебат', 'колебат']
>>> 'аткол' in lst[1]
True
```
Определить список методов, доступных у ранее созданного словаря D. Поочередно
использовать его методы keys и values, определить, что можно получить с применением
этих методов.
```py
>>> D
{'усиление': 23, 'запаздывание': 12, 'постоянная времени': 78}
>>> dir(D)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__',
'__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items',
'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> D.keys()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
>>> D.values()
dict_values([23, 12, 78])
```
#dict_keys и dict_values особые объекты, которые ссылаются на элементы исходного словаря.
Создать объект - символьную строку с текстом данного предложения. Из символьной строки
создать список, элементами которого будут отдельные слова из созданной строки. Заменить в
списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить
получившийся список.
```py
>>> sen = "Создать объект - символьную строку с текстом данного предложения"
>>> senl = sen.split()
>>> senl
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> senl[senl.index("-")] = ","
>>> senl
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
>>> senl.remove("данного")
>>> senl
['Создать', 'объект', ';', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

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

@@ -0,0 +1,26 @@
26) Напишите инструкцию определения и запоминания в переменной текущего московского ка-лендарного времени. Создайте список с 40 элементами – числами от 3 с шагом 6. Создайте кортеж с 12 элементами - случайным подмножеством из элементов списка. Создайте новый кортеж с элементами из первого кортежа, упорядоченными по убыванию величина. Рассчитайте сумму элементов второго кортежа, начиная с 4-го от начала и до 8-го. Отобразите ре-зультат на экране в виде «Сумма элементов кортежа = ХХХ». Определите, сколько времени в секундах прошло с начала выполнения задания
```py
>>> import time #начальное время
>>> import random #начальное время для Москвы
>>> start_time = time.time()
>>> start_time
1760354973.1996331
>>> here = time.localtime()
>>> here
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=14, tm_min=29, tm_sec=44, tm_wday=0, tm_yday=286, tm_isdst=0)
>>> numbers_list = list(range(3, 3 + 40*6, 6)) #список с 40 элементами – числами от 3 с шагом 6
>>> numbers_list
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99, 105, 111, 117, 123, 129, 135, 141, 147, 153, 159, 165, 171, 177, 183, 189, 195, 201, 207, 213, 219, 225, 231, 237]
>>> random_tuple = tuple(random.sample(numbers_list, 12)) #кортеж с 12 элементами - случайным подмножеством из элементов списка
>>> random_tuple
(189, 159, 153, 171, 219, 183, 201, 93, 237, 111, 165, 225)
>>> r_tuple=tuple(sorted(random_tuple, reverse=True)) #сортировка в обратном порядке в кортеж
>>> r_tuple
(237, 225, 219, 201, 189, 183, 171, 165, 159, 153, 111, 93)
>>> sum_elements = sum(r_tuple[3:8]) #суммa элементов второго кортежа
>>> sum_elements
909
>>> end_time = time.time()
>>> end_time
1760355380.4714587
```

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

@@ -0,0 +1,30 @@
26. Напишите инструкцию определения и запоминания в переменной текущего московского ка-лендарного времени. Создайте список с 40 элементами – числами от 3 с шагом 6. Создайте кортеж с 12 элементами - случайным подмножеством из элементов списка. Создайте новый кортеж с элементами из первого кортежа, упорядоченными по убыванию величина. Рассчитайте сумму элементов второго кортежа, начиная с 4-го от начала и до 8-го. Отобразите ре-зультат на экране в виде «Сумма элементов кортежа = ХХХ». Определите, сколько времени в секундах прошло с начала выполнения задания.
импорт библиотек
```py
>>> import time
>>> import random
```
```py
>>> start_time = time.time() #начальное время
>>> here = time.localtime() #начальное время для Москвы
>>> here
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=14, tm_min=12, tm_sec=58, tm_wday=0, tm_yday=286, tm_isdst=0)
>>> start_time
1760353951.7821183
>>> numbers_list = list(range(3, 3 + 40*6, 6)) #список с 40 элементами – числами от 3 с шагом 6
>>> numbers_list
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99, 105, 111, 117, 123, 129, 135, 141, 147, 153, 159, 165, 171, 177, 183, 189, 195, 201, 207, 213, 219, 225, 231, 237]
>>> reverse_tuple = tuple(sorted(numbers_list, reverse=True)) #сортировка в обратном порядке в кортеж
>>> reverse_tuple
(237, 231, 225, 219, 213, 207, 201, 195, 189, 183, 177, 171, 165, 159, 153, 147, 141, 135, 129, 123, 117, 111, 105, 99, 93, 87, 81, 75, 69, 63, 57, 51, 45, 39, 33, 27, 21, 15, 9, 3)
>>> sum_elements = sum(sorted_kortezh[3:8])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sorted_kortezh' is not defined
>>> sum_elements = sum(reverse_tuple[3:8]) #рассчитайте сумму элементов второго кортежа
>>> sum_elements
1035
>>> end_time = time.time() #финальное время
>>> end_time
1760354435.6719537

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

@@ -0,0 +1,748 @@
### Отчет тема 4
## Пункт 2 Стандартные функции (модуль builtins, импортированный по умолчанию)
## Пункт 2.1
round() - округление с заданной точностью
```py
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
```
```py
>>> round(123.456,1)
123.5
>>> type(round(123.456,1))
<class 'float'>
```
```py
>>> round(123.456,0)
123.0
>>> type(round(123.456,0))
<class 'float'>
```
```py
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'>
```
Если ndigits не указан, функция возвращает округленное целое число.
Если указано, то число с плавающей точкой
## Пункт 2.2
Функция range создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1.
```py
>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
>>> type(gg)
<class 'range'>
>>> list(gg)
[76, 85, 94, 103, 112, 121]
```
Можно и не задавать шаг
```py
>>> range(23)
range(0, 23)
>>> list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
## Пункт 2.3 zip – создание общего объекта, элементами которого являются кортежи, составленные из эле-ментов двух или более объектов-последовательностей
```py
>>> qq = ['Цветкова', 'Снегура','Зеленкина']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x000001903C06A5C0>
>>> tuple(ff)
((76, 'Цветкова'), (85, 'Снегура'), (94, 'Зеленкина'))
>>> ff[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'zip' object is not subscriptable
```
```py
>>> ff[1]
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
Объект класса zip неизменяемый.
## Пункт 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.
```py
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
>>> dan
-131.0
>>> fff
5.0
```
eval() — Это встроенная функция в Python, которая выполняет строку кода как программу.
Как работает:
1)Компилирует строку в байт-код
2)Выполняет этот байт-код в заданном контексте
## Пункт 2.5. Похожая на eval функция exec – чтение и выполнение объекта-аргумента функции. Этот объ-ект должен представлять собой строку символов с совокупностью инструкций на языке Python.
```py
>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
Пояснение:
eval превращает текст в работающий код
exec может выполнять любой код, но не возвращает значение.
## Пункт 2.6. Самостоятельно изучите и попробуйте применить функции abs, pow, max, min, sum, divmod, len, map.
```py
Возведение модуля (abs)
```py
>>> abs(-5)
5
>>> abs(5+5j)
7.0710678118654755
>>> abs(4**(-10))
9.5367431640625e-07
>>> abs(-4**10)
1048576
>>> abs(-4**(-10))
9.5367431640625e-07
```
Возведение степени
```py
>>> pow(5,2)
25
>>> pow(-5,-2)
0.04
>>> pow(5,4,2)
1
>>> pow(5+5j,2)
50j
```
Максимальное значение
```py
>>> max(2,5.8,7)
7
>>> max([4,0,-7])
4
>>> max({'a': 1, 'b': 2, 'c': 3}) #выбор большего происходит из ключей
'c'
>>> max(["ee", "eee", "eeeeeee"], key = len)
'eeeeeee'
>>> max("b", "B") #сравнивает коды символов в unicode
'b'
>>> max([34,5,6, "e", 5+2j])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
```
Видно что с разными типами данных не работает
Минимальное значение
```py
>>> min(2,5.8,7)
2
>>> min(({'a': 1, 'b': 2, 'c': 3})) #по ключу
'a'
>>> min(-7,-6,abs(-8))
-7
```
Сумма элементов
```py
>>> sum([1,2,3,4])
10
>>> sum([1,2,3,4], -2)
8
```
```py
>>> sum("bbbb", "аааа")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
>>> sum(5+5j,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not iterable
>>> sum(5+5j,5+5j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not iterable
>>> sum(4.5,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object is not iterable
>>> sum(4.5,4.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object is not iterable
```
Возвращение кортежа из целой части и остатка от деления
```py
>>> help(divmod)
Help on built-in function divmod in module builtins:
divmod(x, y, /)
Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
>>> divmod(20,3)
(6, 2) #20 // 3 = 6 (целая часть) 20 % 3 = 2 (остаток)
>>> divmod(20,-3)
(-7, -1) 20 ÷ (-3) = -6.666... округляем вниз -7 20 % -3 = 1
```
Длина объекта
```py
>>> len((1,2,2))
3
>>> len("aaaaaaaaaa")
10
>>> len(["aaaa","ddddddddddd"])
2
>>> len({'a': 1, 'b': 2, 'c': 3})
3
>>> len(12)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
```
Применение функции к каждому элементу коллекции
```py
>>> help(map)
Help on class map in module builtins:
class map(object)
| map(func, *iterables) --> map object
|
| Make an iterator that computes the function using arguments from
| each of the iterables. Stops when the shortest iterable is exhausted.
>>> map(int, ["1", "2"])
<map object at 0x000001903C2BB5E0>
>>> list(map(int, ["1", "2"]))
[1, 2]
```
Останавливается когда самая короткая коллекция заканчивается
"Лишние" элементы из более длинных коллекций игнорируются
## Пункт 3 Стандартный модуль math
```py
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin',
'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees',
'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp',
'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5)
120
```
Нахождение синуса
```py
>>> help(math.sin)
Help on built-in function sin in module math:
sin(x, /)
Return the sine of x (measured in radians).
>>> math.sin(math.pi/2)
1.0
>>> math.sin(0.96)
0.8191915683009983
```
Нахождение арккосинуса
```py
>>> math.acos(1)
0.0
>>> math.acos(-1)
3.141592653589793
>>> math.acos(-0.54)
2.1412334361948187
>>> math.acos(5) #больше 1 нельзя
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
```
Перевод из радиан в градусы
```py
>>> help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
>>> math.radians(math.pi)
0.05483113556160755
>>> math.radians(360)
6.283185307179586
>>> math.radians(90)
1.5707963267948966
```
Число е в степени заданного
```py
>>> help(math.exp)
Help on built-in function exp in module math:
exp(x, /)
Return e raised to the power of x.
>>> math.exp(0)
1.0
>>> math.exp(1)
2.718281828459045
>>> math.exp(-5)
0.006737946999085467
>>> math.exp(1/2)
1.6487212707001282
```
Нахождение логарифма
```py
>>> help(math.log)
Help on built-in function log in module math:
log(...)
log(x, [base=math.e])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
>>> math.log(math.e)
1.0
>>> math.log(5)
1.6094379124341003
>>> math.log(25,5)
2.0
>>> math.log(-25,5) #с отрицательными числами не работает
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.log(25,-5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
```
Десятичный логарифм
```py
>>> math.log10(10)
1.0
>>> math.log10(0.01)
-2.0
```
Извлечение квадратного корня
```py
>>> math.sqrt(25)
5.0
>>> math.sqrt(26)
5.0990195135927845
>>> math.sqrt(26.7)
5.167204273105526
>>> math.sqrt(-25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.sqrt(26.7+7j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be real number, not complex
```
Округление числа до ближайшего целого вверх
```py
>>> 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(1.2)
2
>>> math.ceil(9.99)
10
>>> math.ceil(-6.2)
-6
>>> math.ceil(-6.9)
-6
```
Округление вниз
```py
>>> math.floor(1.2)
1
>>> math.floor(9.99)
9
>>> math.floor(-6.2)
-7
>>> math.floor(-6.9)
-7
>>> math.floor(-6.9+5j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be real number, not complex
```
Константа: число пи
```py
>>> math.pi
3.141592653589793
```
комбинированное использование
```py
>>> math.sin(2 * math.pi / 7 + math.exp(0.23))
0.8334902641414562
```
## Пункт 4 Модуль cmath для работы с комплексными числами
```py
>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(1.2-0.5j)
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1-0.5j)
-0.4636476090008061
```
## Пункт 5 Модуль random для генерации псевдослучайных чисел и работы с ними
```py
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_index', '_inst', '_isfinite', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>> random.seed()
```
```py
>>> help(random.random)
Help on built-in function random:
random() method of random.Random instance
random() -> x in the interval [0, 1).
```
Случайное число от 0 до 1
```py
>>> random.random()
0.23002075073724337
>>> random.random()
0.535712008113208
>>> random.random()
0.4738049347613569
>>> help(random.uniform)
Help on method uniform in module random:
uniform(a, b) method of random.Random instance
Get a random number in the range [a, b) or [a, b] depending on rounding.
```
Равномерно распределенное случайное число
```py
>>> random.uniform(20,30)
22.41214721441803
```
Равномерное случайное целое
```py
>>> help(random.randint)
Help on method randint in module random:
randint(a, b) method of random.Random instance
Return random integer in range [a, b], including both end points.
>>> random.randint(20,30)
21
>>> random.randint(20,30)
27
```
Случайное из коллекции
```py
>>> help(random.choice)
Help on method choice in module random:
choice(seq) method of random.Random instance
Choose a random element from a non-empty sequence.
>>> random.choice([ъъъ, "уууууууe", 80, 7, 5+5j])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ъъъ' is not defined
>>> random.choice(["ffff", "уууууууe", 80, 7, 5+5j])
80
>>> random.choice(["ffff", "уууууууe", 80, 7, 5+5j])
(5+5j)
```
Нормально распределенное случайное число
```py
>>> help(random.gauss)
Help on method gauss in module random:
gauss(mu=0.0, sigma=1.0) method of random.Random instance
Gaussian distribution.
mu is the mean, and sigma is the standard deviation. This is
slightly faster than the normalvariate() function.
Not thread-safe without a lock around calls.
>>> random.gauss(0,1)
-0.43812614222540897
>>> random.gauss(7,8)
11.287669776968896
```
Случайное подмножество
```py
>>> help(random.sample)
Help on method sample in module random:
sample(population, k, *, counts=None) method of random.Random instance
Chooses k unique random elements from a population sequence.
Returns a new list containing elements from the population while
leaving the original population unchanged. The resulting list is
in selection order so that all sub-slices will also be valid random
samples. This allows raffle winners (the sample) to be partitioned
into grand prize and second place winners (the subslices).
Members of the population need not be hashable or unique. If the
population contains repeats, then each occurrence is a possible
selection in the sample.
Repeated elements can be specified one at a time or with the optional
counts parameter. For example:
sample(['red', 'blue'], counts=[4, 2], k=5)
is equivalent to:
sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
To choose a sample from a range of integers, use range() for the
population argument. This is especially fast and space efficient
for sampling from a large population:
sample(range(10000000), 60)
>>> lst=('a','b','c')
>>> random.sample(lst, 2)
['a', 'c']
>>> random.sample(lst, 0)
[]
>>> random.sample(list, 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\random.py", line 439, in sample
raise TypeError("Population must be a sequence. "
TypeError: Population must be a sequence. For dicts or sets, use sorted(d).
```
Случайное число, подчиняющееся бета-распределению
```py
>>> help(random.betavariate)
Help on method betavariate in module random:
betavariate(alpha, beta) method of random.Random instance
Beta distribution.
Conditions on the parameters are alpha > 0 and beta > 0.
Returned values range between 0 and 1.
>>> random.betavariate(3,4)
0.4104754948305531
>>> random.betavariate(3,4)
0.4104754948305531
```
Случайное число, подчиняющееся гамма-распределению
```py
>>> help(random.gammavariate)
Help on method gammavariate in module random:
gammavariate(alpha, beta) method of random.Random instance
Gamma distribution. Not the gamma function!
Conditions on the parameters are alpha > 0 and beta > 0.
The probability distribution function is:
x ** (alpha - 1) * math.exp(-x / beta)
pdf(x) = --------------------------------------
math.gamma(alpha) * beta ** alpha
>>> random.gammavariate(3,4)
18.75253913135498
```
Список из четырех чисел с разными законами распределения:
```py
>>> rd=[random.uniform(3,4),random.gauss(3,4),random.betavariate(3,4),random.gammavariate(3,4)]
>>> rd
[3.9065412706472173, 5.093585831129117, 0.423027969366889, 7.115102862880251]
```
## Пункт 6 time - модуль для работы со временем
```py
>>> import time
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
```
UNIX-время
```py
>>> c1=time.time()
>>> c1
1760272978.995956
>>> c2=time.time()-c1
>>> c2
12.162038326263428
```
Текущее время
```py
>>> time.gmtime
<built-in function gmtime>
>>> help(time.gmtime)
Help on built-in function gmtime in module time:
gmtime(...)
gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,
tm_sec, tm_wday, tm_yday, tm_isdst)
Convert seconds since the Epoch to a time tuple expressing UTC (a.k.a.
GMT). When 'seconds' is not passed in, convert the current time instead.
If the platform supports the tm_gmtoff and tm_zone, they are available as
attributes only.
>>> dat=time.gmtime()
>>> list(dat)
[2025, 10, 12, 12, 44, 15, 6, 285, 0]
>>> dat.tm_year
2025
>>> dat.tm_yday
285
>>> dat.tm_isdst #Показывает, действует ли летнее время (0 - нет, 1 - да, -1 - нет данных)
0
```
Текущее время с учетом часового пояса
```py
>>> here = time.localtime()
>>> here
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=15, tm_min=44, tm_sec=59, tm_wday=6, tm_yday=285, tm_isdst=0)
```
Время из кортежа в строку
```py
>>> time.asctime(here)
'Sun Oct 12 15:44:59 2025'
```
Время из секунд в строку
```py
>>> time.ctime()
'Sun Oct 12 15:46:30 2025'
```
Пауза
```py
>>> time.sleep(5)
```
Из кортежа в секунды с начала эпохи
```py
>>> time.mktime(here)
1760273099.0
```
## Пункт 7 Графические функции модуля pylab пакета matplotlib
```py
>>> import matplotlib
>>> import pylab
>>> x=list(range(-3,55,4))
>>> t=list(range(15))
>>> pylab.plot(t,x) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x00000158D9921670>]
>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>> pylab.show()
```
Два графика на одном окне
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x000001905007A090>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000019050064D90>]
>>> pylab.show()
```
Круговая диаграмма:
```py
>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x00000158DBCC8820>, <matplotlib.patches.Wedge object at 0x00000158DBCC8760>, <matplotlib.patches.Wedge object at 0x00000158DBCC8FD0>, <matplotlib.patches.Wedge object at 0x00000158DBCDE490>], [Text(-0.1910130855889933, 1.083288512416601, 'Центр'), Text(-0.8613283319035216, -0.6841882085072037, 'Урал'), Text(0.04429273729355889, -1.0991078898011077, 'Сибирь'), Text(0.9873752043868569, -0.4848610169543564, 'Юг')])
>>> pylab.show()
```
Гистограмма:
```py
>>> region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>> naselen=[65,12,23,17] # Значения для диаграммы
>>> pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x000001904BFBD350>, <matplotlib.patches.Wedge object at 0x000001904F822550>, <matplotlib.patches.Wedge object at 0x000001904F83E5D0>, <matplotlib.patches.Wedge object at 0x000001904F83FC50>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show() #Отображение диаграммы
```
Столбиковая диаграмма:
```py
>>> a=['cat','dog','frog']
>>> v=[10,55,100]
>>> pylab.bar(a,v,color='purple')
<BarContainer object of 3 artists>
>>> pylab.show()
```
## Пункт 8
Статистический модуль statistics
```py
>>> import statistics
>>> dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_mean_stdev', '_normal_dist_inv_cdf', '_sqrt_bit_width', '_ss', '_sum', 'bisect_left', 'bisect_right', 'correlation', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'mul', 'multimode', 'namedtuple', 'numbers', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sqrt', 'stdev', 'sys', 'tau', 'variance']
```
Математическое ожидание
```py
>>> data = [0,11,8,5]
>>> statistics.mean(data)
6
```
Медиана
```py
>>> statistics.median(data)
6.5
```
Среднеквадратичное отклонение
```py
>>> statistics.stdev(data)
4.69041575982343
```
Дисперсия
```py
>>> statistics.variance(data)
22
```
Квантили
```py
>>> statistics.quantiles(data)
[1.25, 6.5, 10.25]
```

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

@@ -0,0 +1,59 @@
ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ
• Напишите и исполните единое выражение, реализующее последовательное выполнение
следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата
до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из
двух значений: округленное вниз значение от деления результата на 3 и остатка от этого
деления
>>> divmod((round(cmath.phase(0.2 + 0.8j), 2) * 20), 3)
(8.0, 2.6000000000000014)
• Создайте объект класса struct_time с временными параметрами для текущего
московского времени. Создайте строку с текущим часом и минутами.
>>> nowtime = time.localtime()
>>> nowtime
time.struct_time(tm_year=2024, tm_mon=9,
tm_mday=30, tm_hour=1, tm_min=44, tm_sec=10, tm_wday=0, tm_yday=274, tm_isdst=0)
>>> nows = str(nowtime.tm_hour) + " " + str(nowtime.tm_min)
>>> nows
'1 44'
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку
из этого списка с тремя днями недели.
>>> week = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
>>> random.sample(week, 3)
['вторник', 'суббота', 'четверг']
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от
14 до 32 с шагом 3.
>>> random.choice(range(14, 32, 3))
26
>>> random.choice(range(14, 32, 3))
14
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и
стандартным отклонением 4 и округлите его до целого значения. Создайте список с N
элементами – случайно выбранными буквами латинского алфавита.
>>> N = round(random.gauss(15,4))
>>> N
13
>>> lst = list("abcdefghijgklmnopqrstuvwxyz")
>>> random.sample(lst, N)
['i', 'g', 'g', 'j', 't', 's', 'r', 'v', 'f', 'y', 'b', 'z', 'l']
Или в одну строку:
>>> random.sample(list("abcdefghijgklmnopqrstuvwxyz"), round(random.gauss(15,4)))
['l', 'u', 'z', 'g', 't', 'd', 'f', 'e', 'm', 'k']
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с
момента предыдущего (из п.2) определения временных параметров.
>>> (time.mktime(nowtime) - time.mktime(time.localtime())) / 60
-27.216666666666665