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

..

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

Автор SHA1 Сообщение Дата
Пользователь № 11 аудитории К-522 cc16eb5dec Выполнение ИКЗ
3 часов назад
Пользователь № 11 аудитории К-522 eebe2e3d94 исправление
4 часов назад
Пользователь № 11 аудитории К-522 dfab28d052 отчет
5 часов назад
Пользователь № 11 аудитории К-522 2d5b033dad выполнение ИКЗ
2 недель назад
Пользователь № 11 аудитории К-522 fc5d1a8988 О. изменение
2 недель назад
Пользователь № 11 аудитории К-522 88490bdb79 исправления2
2 недель назад
Пользователь № 11 аудитории К-522 d9d5f10bf2 исправления
2 недель назад
Пользователь № 11 аудитории К-522 80b9b9d9de Выполнение
2 недель назад
Пользователь № 11 аудитории К-522 c29ce51b81 выполнение ИКЗ
4 недель назад
Пользователь № 11 аудитории К-522 b98c7ae906 внесение изменений 2
4 недель назад
Пользователь № 11 аудитории К-522 75ec6411a5 внесение изменений
4 недель назад
Пользователь № 11 аудитории К-522 720444864a Merge branch 'main' of http://uit.mpei.ru/git/KriviAS/python-labs
4 недель назад
KriviAS 6d096a5de8 Отчёт
4 недель назад
KriviAS 45de000998 test1
4 недель назад
KriviAS 6603ca74f1 test
4 недель назад
KriviAS 3c87d77ff6 revert 6f4627df0f
4 недель назад
KriviAS 918bf2dcd1 Отчёт
4 недель назад
KriviAS e15aae7541 test1
1 месяц назад
KriviAS 37fa674bdb test
1 месяц назад
KriviAS aa1e598176 Merge branch 'main' of http://uit.mpei.ru/git/KriviAS/python-labs
1 месяц назад
KriviAS ed3579b903 revert 6f4627df0f
1 месяц назад
KriviAS ce1d962c62 Изменение отчета
1 месяц назад
KriviAS 6f4627df0f Удалить 'TEMA2/p1.png'
1 месяц назад
KriviAS afb41e0e07 C
1 месяц назад
KriviAS 5ae12a0056 re
1 месяц назад
KriviAS ca914d0435 изменение task
1 месяц назад
KriviAS f4001cb2db task
1 месяц назад
KriviAS 6f5792d402 Otchet
1 месяц назад
KriviAS 0165d5950f внесение изменений
1 месяц назад
Пользователь № 11 аудитории К-522 37324cdfee otch5
2 месяцев назад
Пользователь № 11 аудитории К-522 ffa0926cfb otch2
2 месяцев назад
Пользователь № 11 аудитории К-522 4140a31ccb otch1
2 месяцев назад
Пользователь № 11 аудитории К-522 7e56393d94 otch
2 месяцев назад
Пользователь № 11 аудитории К-522 33e9470216 otchet
2 месяцев назад
Пользователь № 11 аудитории К-522 5faaa56f2a first commit
2 месяцев назад

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

Двоичные данные
TEMA1/10.bmp

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

После

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

Двоичные данные
TEMA1/12.bmp

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

После

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

@ -0,0 +1,6 @@
#Программа по Теме 1 <Криви Анастасия>
print('Hello')
h=input('Your name=')
exit()
import os
os.chdir('/Users/u522-11/python-labs/TEMA1')

@ -0,0 +1,111 @@
# Отчет по ТЕМЕ1
Криви Анастасия, А-02-23
## 1-2 знакомство с интерпретатором и интерактивной оболочкой IDLE
Создание необходимых для выволнения лабораторной работы материалов, папок и файлов,
с помощью программы git и использованием команд. несколько из них приведены ниже
```py
git remote add upstream http://uit.mpei.ru/git/main/python-labs.git
git fetch upstream
git stash push
git rebase upstream/main
git stash pop
```
## 3-5 Использоавние базовых команд в Python 3.4.
введение этих строк в командную стоку, а позже создание файла с командами, который выгдялит таким образом
```py
print('Hello')
Hello
h=input('Your name=')
Your name= Anastasia
exit()
```
## 6-9 Изучение устройства и изменение настроек IDLE (Python 3.Х GUI )
изучение меню. измененние шрифта и его размера, цветового решение для определенных задач и тд
![I](11.bmp)
```py
import os
os.chdir('/Users/u522-11/python-labs/TEMA1')
```
## 10-11 создание файла с программой, состоящей из введенного в командном окне
```py
#Программа по Теме 1 <Криви Анастасия>
print('Hello')
h=input('Your name=')
exit()
import os
os.chdir('/Users/u522-11/python-labs/TEMA1')
```
Запуск программы осуществлен несколькими способами:
с помощью меню «Запустить модуль (Run module)»,
с помощью ввода import Pr0 в командном окне
и нажатием F5
## 12 Текстовый файл Pr0.cpython-34
вывод выглядит следущим образом:
```
§
ѕh­ г  уn —  e d ¦ «   ed¦ « Z e¦ «  ddlZ ej d¦ «  dS )ЪHelloz
Your name=й Nz /Users/u522-11/python-labs/TEMA1)ЪprintЪinputЪexitЪosЪchdir© у ъ)C:\Users/u522-11/python-labs/TEMA1\Pr0.pyъ<module>r
 sN ра ЂЂgЃЂШЂ%€ СФЂШ ЂЃЂШ Ђ Ђ Ђ Ш ЂР +С ,Ф ,Р ,Р ,Р ,r
```
такой вид кода возникает в результате компиляции - исходный код анализируется и преобразовывается байт-код.
## 14 Раздел помощи
```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)
```
несколько вариантов обращения к опреративной помощи:
при нажатии на функциональную клавишу F1 и ввод в справочном окне по алфавиту
и с помощью предыдущих использованных нами команд.
## 15 Выполненны следующие действия.
Открыт файл prb1.py в папке Tema1.
Получили 3 открытых окна и запустили программу открытую до
Поочередно открывали и закрывали окна.
Запустили демонтрации программы, лежащей в папке Тема1, tdemo_chaos.py.
![ЧАСЫ](12.bmp)
Использование демонстации Часыиз приложенного окна меню в разделе помощь
```py
Как Вас зовут? 547568
Привет, 547568
input tdemo_chaos
SyntaxError: incomplete input
import tdemo_chaos
```
## 16 Завершили работу.

@ -0,0 +1,41 @@
# Индивидуальное контрольное задание по теме 1
Криви Анастасия, А-02-23
## вопрос
Какие способы могут использоваться для получения помощи при работе со средой Python?
## Ответ
![Помощь](10.bmp)
Раздел помощи (Help) главного меню
## Пример использования:
```py
help(print)
```
вывод:
```py
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
```
так же возможна запись такой команды через точку запятой:
```py
help(print); help(input)
```
при нажатии на функциональную клавишу F1 появляется окно справочной
подсистемы, в левой части на закладке «Указатель (Index)» находится упорядоченный
по алфавиту список терминов языка Python

@ -0,0 +1,557 @@
# Отчет по теме 2
Криви Анастасия, А-02-23
## 1 Создание протокола в IDLE
Был установлен рабочий каталог и создан протокол в среде IDLE
## 2 Изучение простых объектов и операций присваивания значения объектам-переменным
Создание обьектов, просмотренны значения созданных обьектов, просмотренны существувющие обьекты, а так же удалены обьекты
```py
f1 = 16; f2 = 3
f1, f2
(16, 3)
f1; f2
16
3
```
Изучили как просмотреть все существующие объекты среды и получили их атрибуты:
```py
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
```
```py
dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
```
Классовая принадлежность объектов и удаление их.
```py
type(f2)
<class 'int'>
f3 = 15.5
type(f3)
<class 'float'>
del f1, f2, f3
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
```
## 3 Изучение правил наименования объектов
```py
gg1 = 1.6
hh1 = 'Строка'
73sr = 3
SyntaxError: invalid decimal literal
and = 7
SyntaxError: invalid syntax
```
## 4 Изучение ключевых слов
Ввод ключевых слов в переменной kw:
```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']
kw = keyword.kwlist
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']
```
## 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', 'PythonFinalizationError', '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', '_', '_IncompleteInputError', '__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(-7007)
7007
```
Фукнция - длину объекта
```py
len("urtuitr")
7
```
Поиск максимального и минимального сответсвенно
```py
max(3, 4)
4
min(3, 4)
3
```
Возведение в степень; показывает остаток при делении на третье значение
```py
pow(2, 2)
4
pow(2, 2, 4)
0
```
Округление до значимой или до целого
```py
round(100.675, 2)
100.67
round(100.675)
100
```
Формирование последовательности по возрастанию, по алфавиту
```py
sorted([2, 3, 1])
[1, 2, 3]
sorted("cdab")
['a', 'b', 'c', 'd']
```
Вычисление суммы
```py
sum([2, 3])
5
```
Объединение по соответствию
```py
list(zip([1, 2, 3], ["a", "b", "c"]))
[(1, 'a'), (2, 'b'), (3, 'c')]
```
## 6 Использование больших и малых букв в именах объектов
Обнаружено, что переменные, именнованые одинаковыми буквами, но отличными по размеру, не являются онинаковыми.
```py
Gg1 = 45
Gg1
45
gg1
1.6
```
## 7 Изучение базовых типов обьектов
## 7.1 Логический тип
```py
bb1 = True; bb2 = False
bb1; bb2
True
False
type(bb1)
<class 'bool'>
```
## 7.2 Другие простые типы
Создание переменных классов int, float, complex.
```py
ii1 = -1234567890
ff1 = -8.9876e-12
dv1 = 0b1101010
vsm1 = 0o52765
shest1 = 0x7109af6
ccl = 2-3j
a = 3.67; b = -0.45
cc2 = complex(a,b)
```
## 7.3 Строка символов
```py
ss1='Это - строка символов'
```
Вывод:
```py
ss1
'Это - строка символов'
```
Построение сложной конструкции с помощью экранированных последовательностей
```py
ss1a = 'Это - \'строка символоов\',\n \t выводим на двух строках'
```
Вывод:
```py
print(ss1a)
Это - 'строка символоов',
выводим на двух строках
```
Создание строки по шаблону
```py
ss1b = "Меня зовут: \n Криви А.С."
```
Вывод
```py
print (ss1b)
Меня зовут:
Криви А.С.
```
Многострочные строки с помощью использования тройных ковычек.
```py
mnogo="""Нетрудно заметить , что в
mnogo = """Нетрудно заметить, что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые учавствуют в операции"""
print(mnogo)
Нетрудно заметить, что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые учавствуют в операции
```
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки.
Элементы строки с индексами (нумерация с нуля)
```py
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
```
Операции разрезания
```py
ss1[6:9]
'стр' # Символы от 6го до 8го (Символ с 9м индексом не входит)
ss1[11:]
'символ' # Часть строки от 11го индекса и до конца
ss1[11:11]
'' # Сам 11й символ
ss1[:13]
'Это - строка ' # Наоборот, с начала и до 13го символа
ss1[5:-8]
' строк' # Символы от 5го до 8го м конца
ss1[3:17:2]
' тоасм' # Символы с 3го индекса по 16й с шагом 2
ss1[14:3:-2]
'омсаот ' # Символы с 17го по 3й, при этом шаг делается в обратном направлении
ss1[-4:3:-2]
'мсаот '
ss1[-6:3:-2]
'саот '
```
Строка - неизменямый объект
```py
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
```
Воспроизведение изменений пренебрегая ошибки, замена символа
```py
ss1 = ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символ'
```
Также были самостоятельно созданы обьекты разных типов и просмотренн их класс и значение:
```py
x = 1
type(x)
<class 'int'>
y = 123743986749.4574
type(y)
<class 'float'>
r = 'рваил'
type(x3)
<class 'str'>
x4 = [1, 4, 9]
type(x4)
<class 'list'>
x5 = ['one', 'two', 'three']
type(x5)
<class 'list'>
x6 = True
type(x6)
<class 'bool'>
x7 = True, False
type(x7)
<class 'tuple'>
x
1
y
123743986749.4574
r
'рваил'
x4
[1, 4, 9]
x5
['one', 'two', 'three']
x6
True
x7
(True, False)
```
## 8 Изучение сложных типов обьектов
## 8.1 Изучение типа обьекта - список
В отличие от символьных строк, списки являются изменяемыми последовательностями, их элементы могут изменяться с помощью операций присваивания
```py
spis1=[111,'Spisok',5-9j]
stup=[0,0,1,1,1,1,1,1,1]
spis=[1,2,3,4,
5,6,7,
8,9,10]
spis1[-1]
(5-9j)
stup[-8::2]
[0, 1, 1, 1]
```
4 элемента (с 8 с конца до последнего с шагом 2) - индексы 1,3,5,7.
```py
spis1[1]='Список'
spis1
[111, 'Список', (5-9j)]
```
Сколько элементов в списке?
```py
len(spis1)
3
```
Список атрибутов
```py
dir(spis1)
['__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']
```
Описание метода с помощью следующей функции
```py
help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
```
С помощью методов объектов-списков можно добавлять и удалять элементы. В конец списка добавлен «New item»
```py
spis1.append('New item')
```
или конкатенация. Список не сохраняется
```py
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
```
Добавление в конец одного списка строку
```py
spis1+[ss1b]
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Криви А.']
```
Удаление одного элемента
```py
spis1.pop(1)
'Список'
```
Вывод
```py
spis1
[111, (5-9j), 'New item']
```
Использование и других методов:
copy - создает копию списка;
count - возвращает число, сколько раз элемент из аргумента встиречается в списке;
index - возвращает индекс первого элемента соответствующему аргументу.
```py
l = [1, 2, 4, 3]
l
[1, 2, 4, 3]
l.insert(3,2)
l
[1, 2, 4, 2, 3]
```
Удаление элемента
```py
l.remove(1)
l
[2, 4, 2, 3]
```
Добавление в конец одного списка в другой
```py
l.extend(l)
l
[2, 4, 2, 3, 2, 4, 2, 3]
```
Сортировка и переворот списка
```py
l.sort();l
[2, 2, 2, 2, 3, 3, 4, 4]
reverse(); l
[4, 4, 3, 3, 2, 2, 2, 2]
```
Создание копии
```py
l.copy(); l
[4, 4, 3, 3, 2, 2, 2, 2]
[4, 4, 3, 3, 2, 2, 2, 2]
```
Количество элементов
```py
l.count(1)
0
l.count(2)
4
```
Индекс первого элемента соответствующему аргументу
```py
l.index(4)
0
```
Очищение
```py
l.clear(); l
[]
```
Вложенный список
```py
spis2=[spis1,[4,5,6,7]] #здесь элементами являются два списка
spis2[0][1] #обращение к элементу списка spis1
(5-9j)
spis2[0][1]=78 #Убедитесь, что значение элемента заменено на 78
spis2
[[111, 78, 'New item'], [4, 5, 6, 7]]
spis1
[111, 78, 'New item']
```
Произошли изменения поскольку присваивание списка переменной (или включение списка в другой список) не копию, а ссылку. Список - изменяемый, именно поэтому происходят изменения и на другие ссылки, ук. на этот же список.
Создание разноименного списка
```py
s=[bb1, jk, ss1, bb1, l]; s
[True, 3, 'Это = строка символов', True, []]
```
## 8.2 Обьект-кортеж
Кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки.
```py
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2) #Переопределение
kort1
(222, 'Kortezh', (77+8j), 1, 2)
kort1= kort1+(ss1b,); kort1 #Добавление элемента
```
При попытке удалить элемент из кортежа возникает ошибка. Для изменения кортежа(удаления элементов из него в том числе) можно возспользоваться следущим способом.
```py
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Криви А.')
kort2=kort1[:2]+kort1[3:]; kort2
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Криви А.') #Первые два и последние три элемента кортежа
```
Методы кортежа
```py
kort1.index(2) # Будет получено значение 4
4
kort1.count(222) #Будет получено значение 1
1
kort1[2]=90 #Будет получена диагностика о невозможности изменения кортежа
```
Созданние разноименного кортежа
```py
k=(4, "kev", l, kort1); k
(4, 'kev', [], (222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Криви А.'))
```
## 8.3 Объект-словарь
Создание словаря
```py
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
```
Обращение к элементам по ключам
```py
dic1['Orel']
56
```
Добавление, Пополнение словаря
```py
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
```
Упорядоченный словарь: по ключам и по значениям
```py
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
```
Элементы словаря - любой тип
```py
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic3['statistics'][2] #Обращение к элементам словаря
'standart deviation'
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)]) #Создание сложного словаря
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b])) #Создание из двух списков - один для ключей, другой для значений
```
Объект-кортеж с 7 элементами и объект-список с 5 элементами. Создание из них словаря.
```py
ko=(1,2,3,4,5,6,7)
li=["a", "b", "c", "d", "e"]
dic4
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Криви А.'}
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Криви А.'}
dic7=dict(zip(ko, li))
dic7
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
len(dic7)
5
```
zip производит объединение элементов до момента окончание самого короткого.
Словарь с описанием состава студентов АВТИ
```py
>>>AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
>>>AVTI['Курс III'][5]
15
```
## 8.4 Объект-множество
Это неупорядоченная совокупность неповторяющихся элементов.
Эти элементы могут быть разных, но только неизменяемых типов. Автоматическое удаление повторов:
```py
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}; mnoz1
{'микропроцессор', 'двигатель', 'датчик', 'линия связи'}
```
Определение длины объекта-множества
```py
len(mnoz1)
4
```
Проверка наличия эдемента с отчетов логического типа
```py
'датчик' in mnoz1
True
```
Добавление элементаи удаление элемента
```py
mnoz1.add('реле')
mnoz1.remove('линия связи')
```
Вывод
```py
mnoz1
{'микропроцессор', 'реле', 'двигатель', 'датчик'}
```
## 9 Завершение работы.

@ -0,0 +1,58 @@
# Общее контрольное задание по теме 2
Криви Анастасия, А-02-23
## Задание
Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции
## Решение
```py
familia = 'Krivi'
```
Создать переменную со значением, совпадающим с первой буквой из familia
```py
f = 'K'
```
Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python
```py
import keyword
sp_kw = keyword.kwlist
```
Удаление из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка
```py
sp_kw.remove('nonlocal')
sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple
## Решение
```py
kort_nam = ('Анастасия', 'Михаил', 'Катерина')
type(kort_nam)
<class 'tuple'>
```
Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов
```py
kort_nam = kort_nam + ('Ксения', 'Богдан')
kort_nam
('Анастасия', 'Михаил', 'Катерина', 'Ксения', 'Богдан')
```
Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима»
```py
kort_nam.count('Дима')
0
```
Создайте словарь dict_bas, в котором ключами являются русские названия типов перемен-ных, использованных в предыдущих операторах, а значениями – ранее созданные пере-менные, соответствующие этим типам
```py
dict_bas = {'Список':'', 'Кортеж':('Анастасия', 'Михаил', 'Катерина', 'Ксения', 'Богдан'), 'Список':['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']}
```

@ -0,0 +1,652 @@
# Отчет по теме 3
Криви Анастасия, А-02-23
## 1 Запуск IDLE
## 2 Преобразование простых базовых типов объектов
Выполнение указанных инструкций:
2.1. Преобразование в логический тип с помощью функции bool(<Объект>)
```py
logiz1=bool(56); logiz1
True
logiz2=bool(0); logiz2
False
logiz2=bool(1); logiz2
True
logiz3=bool("Beta"); logiz3
True
logiz4=bool(""); logiz4
False
```
Из этих примеров делаем вывод о том, что данная функция выводит True при не пустых заначениях, не равных нулю. Значение False в обратных.
2.2. Преобразование в целое десятичное число объекта с заданной системой счисления. Эта задача существляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]).
По умолчанию система счисления принимается десятичной.
```py
tt1=int(195.4); tt1
195
tt2=int("-76"); tt2
-76
tt3=int("B",16); tt3
11
tt4=int("71",8); tt4
57
tt5=int("98.76"); tt5
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
tt5=int("98.76"); tt5
ValueError: invalid literal for int() with base 10: '98.76'
```
При попытке преобразовать строку "98.76" в целое число с помощью int() позникает ошибка. Почему? Строка содержит десятичную точку, что является недопустимым для прямого преобразования в int. функция int ожидает строку, представляющую целое число, то есть без плавающей точки.
Для того чтобы устранить ошибку, необходимо преобразовать строку "98.76" в целое число, мы должны сначала преобразовать ее в float, а затем в int:
```py
tt5 = int(float("98.76"))
98
```
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
```py
flt1=float(789);flt1
789.0
flt2=float(-6.78e2); flt2 #Потому что -6.78 * 100 = -678
-678.0
flt3=float("Infinity"); flt3 #Бесконечность
inf
flt4=float("-inf"); flt4 #Бесконечность отрицательная
-inf
```
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
strk1=str(23.6); strk1
'23.6'
strk2=str(logiz3); logiz3; strk2
True
'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}.items()); spis3 #Преобразование словаря в список ключи и значения
[('A', 1), ('B', 2), ('C', 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')
```
3.4. Удаление объектов
Очистить оперативную память от ранее созданных объектов можно с помощью инструкции del.
```py
del strk5, kort8
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'fio', 'flt1', 'flt2', 'flt3', 'flt4', 'hh', 'kort7', 'kort9', 'kortf', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'os', 'shs1', 'spis1', 'spis2', 'spis3', 'spis4', 'spisf', 'strk1', 'strk2', 'strk3', 'strk4', 'strkf', 'tt1', 'tt2', 'tt3', 'tt4', 'tt5', 'vos1']
```
Создание строки со своей фамилией и инициалами, преобразование её в список, затем список – в кортеж и, наконец, кортеж – в строку
```py
f="Криви А.С."
s=list(f); s
['К', 'р', 'и', 'в', 'и', ' ', 'А', '.', 'С', '.']
k=tuple(s); k
('К', 'р', 'и', 'в', 'и', ' ', 'А', '.', 'С', '.')
st=str(k); st
"('К', 'р', 'и', 'в', 'и', ' ', 'А', '.', 'С', '.')"
```
## 4 Арифметические операции
4.1. Сложение и вычитание
```py
12+7+90
109
5.689e-1-0.5
0.06889999999999996
25.5+4
29.5
13-51.05+11003907
11003868.95
```
4.2. Умножение
```py
-6.7*12
-80.4
```
Умножение вещественного числа на целое число
4.3. Деление
Результатом деления всегда будет вещественное число
```py
-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
type(a)
<class 'float'>
```
4.4. Деление с округлением вниз
Здесь результат может быть целым или вещественным. В нижеследующих операциях определите тип результата
```py
b=178//45 #Деление двух целых чисел
3
c=-24.6//12.1 #Деление двух вещественных чисел
-3.0
178.3434//34e-4
52453.0
```
4.5. Получение остатка от деления
```py
148%33 #Остаток от деления двух целых чисел
16
12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
12e-6%391278e-8
1.2e-05
```
4.6. Возведение в степень
```py
14**3 #Целое число возводится в целую степень
2744
e=2.7**3.6; e #Вещественное число возводится в вещественную степень
35.719843790663525
```
В результате операции над числами разных типов получается число, имеющее наиболее сложный тип из тех типов, которые участвуют в операции.
Для комплексных чисел доступны операции: +, -, *, /, **, но не // и %.
## 5 Операции с двоичными представлениями целых чисел
5.1. Двоичная инверсия (~). Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0).
~x = - (x + 1)
```py
dv1=9; dv1
9
dv2=~dv1; dv2
-10
dv1=10283
~dv1
-10284
```
5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```py
7&9 # 111 и 1001 = 0001
1
7&8 # 111 и 1000 = 0000
0
```
5.3. Двоичное «ИЛИ» (|) – побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```py
7|9 # 111 или 1001 = 1111
15
7|8 # 111 или 1000 = 1111
15
14|5 # 1110 или 0101 = 1111
15
14|14
14
0|0
0
111|1
111
```
5.4. Двоичное «исключающее ИЛИ»(^) - побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
```py
14^5 # 1110 исключающее или 0101 = 1011
11
type(c)
<class 'int'>
```
5.5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева
```py
h=14 #Двоичное представление = 1110
g=h<<2; g
56
g1=h>>1; g1 # Новое двоичное представление = 0111
7
g2=h>>2; g2 # Новое двоичное представление = 0011
3
```
Оперции с числами, двоичный код которых 7 знаков:
```py
99>>2
24
99<<50
111464090777419776
99<<0
99
99<<1
198
100<<100
126765060022822940149670320537600
bin(126765060022822940149670320537600)
'0b11001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
bin(100)
'0b1100100'
bin(99)
'0b1100011'
```
## 6 Операции при работе с последовательностями (строками, списками, кортежами)
6.1. Объединение последовательностей (конкатенация)(+)
'Система' + 'регулирования' #Соединение двух строк символов
Соединение двух списков:
```py
['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
```
Соединение двух кортежей:
```py
('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```
6.2. Повторение (*)
```py
'ля-'*5 #строки
'ля-ля-ля-ля-ля-'
['ку','-']*3 #список
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4 #кортеж
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
```
Создание списка со 100 отсчетами сигнала-ступеньки
```py
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]
```
Создание кортежа с отсчетами сигнала – импульса
```py
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; stroka #подстрока
True
'Система автоматического управления'
'ку' in ['ку','-']*3 #наличие контекста
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```
6.4.Подстановка значений в строку с помощью оператора «%»
```py
Пример 1:
stroka='Температура = %g %s %g'
stroka
'Температура = %g %s %g'
stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
```
Используя данных из словаря
```py
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 # Значение zz увеличивается на 5
-7
zz-=3; zz
-10
```
Для последовательностей операция (+=) означает конкатенацию текущего значения объекта с заданным дополнением:
```py
stroka='Система'; stroka+=' регулирования'; stroka
'Система регулирования'
```
7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
zz=-10
zz/=2
zz
-5.0
zz*=5
zz
-25.0
```
Для строк операция (*=) означает повторение текущего значения объекта заданное число раз.
```py
stroka*=2
stroka
'Система регулированияСистема регулирования'
```
7.4.Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```py
zz//=2; zz
-13.0
zz**=8; zz
815730721.0
```
7.5. Множественное присваивание
```py
w=v=10 # Переменным присваивается одно и то же значение
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
n1
11
n2
-3
n3
'all'
n1, n2, n3 = [11, -3, 'all']
n1
11
n1, n2, n3 = {'a':1, 'b':2, 'c':3}
n1
'a'
n1, n2, n3 = {'a':1, 'b':2, 'c':3}.values()
n1
1
n1, n2, n3 = {1, 2, 3}
n1
1
n1, n2, n3 = '1,2'
n1, n2, n3
('1', ',', '2')
```
## 8 Логические операции
Создание логических выражений, дающих в результате вычисления значения True или False.
8.1. Операции сравнение:
равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=)
```py
w=v=10
w==v
True
w<=10
True
v>6
True
v>=10
True
v<10
False
v!=10
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
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
(a>=b) and ('book' in mnoz1) and ('Pskov' in dic1)
False
(a>=b) and ('book' in mnoz1) or ('Pskov' in dic1)
True
```
8.4. Проверка ссылок переменных на один и тот же объект (is).
```py
w=v=10
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1
False
w1=v1
w1 is v1
True
```
При создании списков ['A', 'B'] и ['A', 'B'] Python создает два разных объекта в памяти. Хотя содержимое списков идентично, это разные объекты с разными адресами в памяти
## 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. Методы для работы со строками
Номер позиции первого вхождения указанного контекста или значение -1
```py
stroka.find('пр')
5
```
Подсчет числа вхождений строки “с” в stroka
```py
stroka.count("с")
4
```
Замена
```py
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
```
Cписок подстрок, между которыми в строке стоит заданный разделитель
```py
spis22=stroka.split(' '); spis22
['Микропроцессорная', 'система', 'управления'
```
Cтрокa со всеми заглавными буквами
```py
stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
```
Cтрокa, собранная из элементов списка
```py
stroka3=" ".join(spis22); stroka3
'Микропроцессорная система управления'
```
Cтрокa, собранная из элементов кортежа
```py
kort=tuple('74156')
s=" ".join(kort); s
'7 4 1 5 6'
type(s)
<class 'str'>
```
Kортеж с результатами поиска «с» слева
```py
stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
```
Kортеж с результатами поиска «с» справа
```py
stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```
Mетод format.
Форматирование строки осуществляется в случае, если необходимо в символьную строку подставить значения некоторых объектов, например, полученных в ходе выполнения программы. Часто такую строку затем используют для вывода результатов работы программы на экран или в файл протокола
```py
stroka3=" ".join(spis22); stroka3
'Микропроцессорная система управления'
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}' #где 0,1,2 - индексы порядка использования аргументов формата
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}' #именнованные аргументы
strk3
'Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2) #порядок аргументов не обязательно соответствует порядку вставок в строке
'Момент времени 2, значение = 89.7'
```
9.2. Методы для работы со списками
```py
spsk=['trt']*5; spsk
['trt', 'trt', 'trt', 'trt', 'trt']
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)
'trt'
spsk.append('c')
spsk
['trt', 'trt', 'trt', 'trt', 'c']
spsk.insert(2,'a')
spsk
['trt', 'trt', 'a', 'trt', 'trt', 'c']
spsk.count('a')
1
```
9.3. Kортеж и применение его методов
```py
k=('ele -')*4; k
'ele -ele -ele -ele -'
k.replace(' -', ' - ')
'ele - ele - ele - ele - '
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']
k.count('e')
8
k.index('ele')
0
```
9.4. Mетоды словарей и множеств
```py
d={'сонливость':10, 'усталость':1, 'апатия':2, 'мотивация':8}; d
{'сонливость': 10, 'усталость': 1, 'апатия': 2, 'мотивация': 8}
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']
d.values()
dict_values([10, 1, 2, 8])
d.keys()
dict_keys(['сонливость', 'усталость', 'апатия', 'мотивация'])
d.pop('усталость')
1
d['усталость'] = 100
d
{'сонливость': 10, 'апатия': 2, 'мотивация': 8, 'усталость': 100}
```
```py
m={'сонливость', 'усталость', 'апатия', 100j}
type(m)
<class 'set'>
dir(m)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
m.add(1028140+2947)
m
{'усталость', 100j, 1031087, 'апатия', 'сонливость'}
m.pop()
'усталость'
m
{100j, 1031087, 'апатия', 'сонливость'}
m.pop()
100j
m
{1031087, 'апатия', 'сонливость'}
m.issubset('b')
False
```
## 10 Завершение работы

@ -0,0 +1,60 @@
# Общее контрольное задание по теме 3
Криви Анастасия, А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций.
## Решение
Преобразовать восьмеричное значение 45 в целое число.
```py
int('45', 8)
37
```
Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
```py
k1=list(D.keys());k1; v1=list(D.values()); v1
['усиление', 'запаздывание', 'постоянная времени']
[23, 12, 78]
D1=(k1,v1); D1
(['усиление', 'запаздывание', 'постоянная времени'], [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
s=['колебат']*4;s
['колебат', 'колебат', 'колебат', 'колебат']
"аткол" in s[1] + s[2]
True
```
Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
```py
D.keys(); D.values()
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
dict_values([23, 12, 78])
```
Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
```py
sim
'Создать объект - символьную строку с текстом данного предложения'
type(sim)
<class 'str'>
spis[spis.index('-')]=','
spis.remove('данного');spis
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

@ -0,0 +1,56 @@
# Индивидуальное задание по теме 3
Криви Анастасия, А-02-23, вариант 10
## Задание
Какова роль компилятора в среде Python? Чем отличаются файлы с расширением .pyc от файлов с расширением .py?
## Решение
Кампилятор предназначен для преобразования в байт код исходного кода, написанного в рсширении .ру.
Код с расширением .ру - код, ясный для человеческого восприятия, в отличие от файла с расширением .рус(скомпилированныйбайт-код).
## Задание
Напишите инструкцию, создающую список со словами из данного предложения. Подсчитайте и отобразите на экране число слов.
## Решение
```py
sp = ['Напишите', 'инструкцию', 'создающую', 'список', 'со', 'словами', 'из','данного', 'предложения'];sp
['Напишите', 'инструкцию', 'создающую', 'список', 'со', 'словами', 'из', 'данного', 'предложения']
len(sp)
9
```
## Задание
Создайте кортеж с именами 10 любых студентов вашей группы. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
## Решение
```py
kor = ('Михаил', 'Юрий', 'Алёна', 'Катерина', 'Елена','Татьяна','Ксения','Денис','Анастасия','Андрей')
type(kor)
<class 'tuple'>
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']
```
## Задание
Превратите кортеж во множество. Подсчитайте число элементов множества и отобразите на экране с помощью формата по шаблону: "Во множестве ХХ студентов".
## Решение
```py
m = set(kor); m
{'Татьяна', 'Андрей', 'Ксения', 'Михаил', 'Алёна', 'Анастасия', 'Катерина', 'Елена', 'Денис', 'Юрий'}
l=len(m)
print('Во множестве', l, 'студентов')
Во множестве 10 студентов
```
## Задание
Напишите инструкцию, создающую строку из элементов списка из п.2. Отобразите строку на экране.
## Решение
```py
st=' '.join(sp); type(st); st
<class 'str'>
'Напишите инструкцию создающую список со словами из данного предложения'
где
sp
['Напишите', 'инструкцию', 'создающую', 'список', 'со', 'словами', 'из', 'данного', 'предложения']
```

@ -0,0 +1,368 @@
# Отчет по теме 4
Криви Анастасия, А-02-23
## 1 Запуск IDLE
Встроенные функции – это готовые к использованию функции, реализующие различные полезные операции, необходимость в которых часто возникает при решении прикладных задач. Часть из них имеется в виде стандартных функций – то есть они не требуют дополнительных усилий (готовы к употреблению сразу после запуска среды Python и относятся к классу 'builtin_function_or_method').
## 2 Стандартные функции
```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', 'PythonFinalizationError', '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', '_', '_IncompleteInputError', '__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']
```
## 2.1 Функция round
Округление числа с заданной точностью. Cправка по назначению этой функции:
```py
help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
```
Использование функции на примерах
```py
round(123.456,1)
123.5
round(123.456,0)
123.0
type(round(123.456,0)) #определение типа
<class 'float'>
type(round(123.456,1))
<class 'float'>
round(123.456)
123
type(round(123.456))
<class 'int'>
```
## 2.2 Функция range
Создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1
```py
gg=range(76,123,9)
gg
range(76, 123, 9) #«итерируемый объект» класса range. Чтобы увидеть получившуюся последовательность чисел, его надо преобразовать, например, в список, обычным способом
list(gg)
[76, 85, 94, 103, 112, 121]
```
где 76 - левая граница, 123 - правая граница, а 9 - шаг
```py
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]
```
по умолчанию отсчет от нуля с шагом 1 жо заданного 23(не включительно!)
## 2.3 Функция zip
Создание общего объекта, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей
(zip – застежка-«молния»)
Длина результирующего объекта равна длине самого короткого объекта из двух аргументов функции!
```py
qq = ['Криви','Заленкина', 'Капитонов', 'Киреев']; type(qq)
<class 'list'>
ff=zip(gg,qq)
ff
<zip object at 0x00000151590F1740>
tuple(ff)
((76, 'Криви'), (85, 'Заленкина'), (94, 'Капитонов'), (103, 'Киреев'))
ff[1] # нельзя обратиться по индексу
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
## 2.4 Функция eval
Вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки
```py
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=1
dan
-151.0
type(dan)
<class 'float'>
```
## 2.5 Функция exec
Чтение и выполнение объекта-аргумента функции. Этот объект должен представлять собой строку символов с совокупностью инструкций на языке Python
```py
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
gg
221.456
```
## 2.6 Функции abs, pow, max, min, sum, divmod, len, map
```py
abs(-10) # Модуль числа
10
pow(2, 2) # Возведение числа в степень
4
max(1426, 54312, 335, 140)
54312
min(0, 346, 3531, 1450)
0
sum([1, 12, 0, 6])
19
divmod(10,2) # Кортеж с двумя элементами: результатами целочисленного деления и остатком
(5, 0)
len([261, 25426, 23])
3
list(map(abs,[-12038, -231974]))
[12038, 231974]
```
## 3 Функции из стандартного модуля math.
Cовокупность разнообразных математических функций
```py
import math
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', '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.log10(1)
0.0
math.acos(1)
0.0
math.degrees(100) #из радиан в градусы
5729.5779513082325
math.radians(1029) #из градусов в радианы
17.959438003021653
math.log(0.321846)
-1.1336821087105013
math.sqrt(90)
9.486832980505138
math.ceil(10.1) #округление вверх
11
math.floor(10.9) #округление вниз
10
```
Вычисление значения функции:
![I](ris/f1.png)
```py
math.sin((2*math.pi)/7 + math.exp(0.23))
0.8334902641414562
```
## 4 Функции из модуля cmath
Cовокупность функций для работы с комплексными числами.
```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
Cовокупность функций для выполнения операций с псевдослу-чайными числами и выборками
```py
import random
dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', '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() #равномерно распределенное случайное число
0.07336031762583761
random.uniform(1,2) #равномерно распределенное случайное число
1.137488979303296
random.randint(1,10) #случайное целое число
9
random.gauss() #нормально распределенное случайное число
0.014238556699878042
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([10,104,2,23]) #случайный выбор элемента из совокупности
10
s = ['12','212','kjd','134nh']
random.shuffle(s) #перемешивание элементов списка
s
['kjd', '212', '12', '134nh']
random.sample(s,2) #получение выборки заданной размерности из совокупности
['134nh', '12']
random.betavariate(1, 232) #cлучайное число с бета-распределением
0.003122288899067793
random.gammavariate(1, 21) #cлучайное число с гамма-распределением
30.78691787356758
```
Создание списка с 4 случайными значениями, подчиняющимися равномерному, нормальному, бета и гамма - рапределениям соответственно
```py
s=[random.random(), random.gauss(), random.betavariate(1,10), random.gammavariate(1,10)]; s
[0.10166127692065208, -0.9624978096753845, 0.00956693409670233, 3.1161536544662676]
```
## 6 Функции из модуля time
Работа с календарем и со временем
```py
c1=time.time() #время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г
c1
1760880089.5032163
c2=time.time()-c1 #временной интервал в секундах, со времени ввода предыдущей инструкции
c2
15.655876636505127
```
с помощью этой функции можно измерять временные промежутки в секундах
Функция, возвращающая объект класса struct_time, содержащий полную информацию о текущем времени: год (tm_year), месяц (tm_mon), день (tm_mday).
```py
dat=time.gmtime()
dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=9, tm_sec=24, tm_wday=6, tm_yday=292, tm_isdst=0) #Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC). Москов-ское время MSK опережает UTC на 3 часа
dat.tm_mon
10
dat.tm_hour
14
dat.tm_year
2025
dat=time.localtime(); dat #получение «местного» времени
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=13, tm_sec=35, tm_wday=6, tm_yday=292, tm_isdst=0)
l=time.localtime()
time.asctime(l)
'Sun Oct 19 17:20:49 2025' #преобразование представления времени из кортежа в строку
time.ctime() #преобразование времени в секундах, прошедшего с начала эпохи, в строку
'Sun Oct 19 17:15:49 2025'
t=time.asctime();type(t)
<class 'str'>
t1=time.ctime(); type(t1)
<class 'str'>
time.sleep(3) #прерывание работы программы на заданное время
time.mktime(l) #из кортежа в секунды с начала эпохи
1760883649.0
time.localtime(c1) #обратное преобразование из секунд в местное время осуществляется той же функцией
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=16, tm_min=21, tm_sec=29, tm_wday=6, tm_yday=292, tm_isdst=0)
```
## 7 Графические функции
В развернутой версии Python должны быть установлены модули пакета matplotlib, в состав которого входит модуль pylab, содержащий ряд полезных вычислительных функций и графических возможностей.
Импорт модуля инструкции
```py
import matplotlib
import pylab
x=list(range(-3,55,4))
t=list(range(15))
pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x000001BC059DA5D0>]
pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
pylab.xlabel('время')
Text(0.5, 0, 'время')
pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
pylab.show()
```
![2](ris/ris1.png)
```py
X1=[12,6,8,10,7]; X2=[5,7,9,11,13]
pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x000001BC05A8D590>]
pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x000001BC05A8D6D0>]
pylab.show()
```
![3](ris/ris2.png)
```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()
```
![4](ris/ris3.png)
```py
c1 = [10,1,1000,843,2837, 34,34,65]; c2 = [10,51046,54,46,1, 1535, 7, 12435]
plt.bar(c1, c2)
<BarContainer object of 8 artists>
pylab.show()
```
![5](ris/ris4.png)
```py
x1 = ['f', 'c', 'y']
x2 = [12, 4, 24]
plt.bar(x1, x2)
<BarContainer object of 3 artists>
pylab.show()
```
![6](ris/ris5.png)
## 8. Статистический модуль statistics
```py
dir(s)
['Counter', 'Decimal', 'Fraction', 'NormalDist', 'StatisticsError', '__all__',
'__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', '_coerce', '_convert', '_exact_ratio', '_fail_neg',
'_find_lteq', '_find_rteq', '_isfinite', '_normal_dist_inv_cdf', '_ss', '_sum',
'bisect_left', 'bisect_right', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean',
'groupby', 'harmonic_mean', 'hypot', 'itemgetter', 'log', 'math', 'mean', 'median',
'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'numbers', 'pstdev',
'pvariance', 'quantiles', 'random', 'sqrt', 'stdev', 'tau', 'variance']
data = [10, 20, 30, 40, 50]
s.mean(data)
30
s.median(data)
30
s.stdev(data)
15.811388300841896
s.variance(data)
250
data = [10, 56, 73, 7, 20, 30, 40, 50, 56, 77, 3]
s.quantiles(data)
[10.0, 40.0, 56.0]
```
## 9. Завершили сеанс работы

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,53 @@
# Общее контрольное задание по теме 4
Криви Анастасия А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
1. Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
2. Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
3. Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
4. Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
5. Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
6. Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
1. Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления
```py
import cmath
divmod(round(cmath.phase(0.2+0.8j),2)*20,3)
(8.0, 2.6000000000000014)
```
2. Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
```py
t = time.gmtime(time.time() + 3 * 60*60);t
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=20, tm_hour=10, tm_min=29, tm_sec=40, tm_wday=0, tm_yday=293, tm_isdst=0)
st = t.tm_hour, t.tm_min; st = str(c.tm_hour)+"час"+str(c.tm_min)+"минут "
st
'11час16минут '
```
3. Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
```
D = ['ПН', 'ВТ', 'СР','ЧТ', 'ПТ', 'СБ', 'ВС']
random.sample(D,3)
['СБ', 'ПТ', 'ЧТ']
```
4. Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
```py
random.choice(range(14, 33, 3))
20
```
5. Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
```py
N = math.floor(random.gauss(15, 4)); N
15
l=random.sample(string.ascii_letters, N); l
['P', 'H', 'X', 'B', 's', 'T', 'z', 'N', 'E', 'l', 'I', 'w', 'o', 'u', 'C']
```
6.Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
```py
t = round(time.time() - time.mktime(localTime))
t // 60
6 minutes
```

@ -0,0 +1,27 @@
# Индивидуальное контрольное задание по теме 4
Криви Анастасия А-02-23
## Задание
Создайте список1 с 5 элементами – целыми случайными числами из интервала от 10 до 50. На основе этого списка создайте список2 с 3 случайно отобранными из первого списка элементами. Рассчитайте среднее значение элементов списка2
## Решение
Создание списка1 с пятью элементами, целыми случайными числами из интервала(10;50)
```py
import random
spis1=[random.randint(10,50), random.randint(10,50),random.randint(10,50),random.randint(10,50),random.randint(10,50)]; spis1
[45, 38, 35, 26, 49]
```
Создание списка2 с тремя элементами, случайными элементами из списка1
```py
spis2 = random.sample(spis1,3); spis2
[38, 45, 26]
```
Вычисление среднего значения списка2, используя statistics.
```py
import statistics
statistics.mean(spis2)
36.333333333333336
```
## Завершение.

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

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

После

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

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

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

После

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

@ -0,0 +1,351 @@
# Отчет по теме 5
Криви Анастасия, А-02-23
## 1. Настроили рабочий каталог
## 2. Ветвление по условию – управляющая инструкция if
Выполняется первое условие:
```py
porog=10
rashod1=11
rashod2=10
if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
dohod
12
```
Ни одно из условий не выполняется, значение переменной остаетсяя постоянным:
```py
if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
dohod
12
```
Ни одно из условий не выполняется, следовательно выполняется последний блок инструкций:
```py
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 5:
dohod = 3
else:
dohod = 0
dohod
0
```
Запись условных инструкций в одну строку:
```py
dohod = 2 if porog >=4 else 0
dohod
2
```
Несколько функций подряд
```py
if porog >= 5: rashod1 = 6; rashod2 = 0
rashod1
6
rashod2
0
```
## 3. Цикл по перечислению – управляющая инструкция for
### 3.1 Простой цикл
```py
temperatura = 2
for i in range(3, 18, 3): # от 3 до 18 с шагом 3, значит всего будет 5 (3, 6, 9, 12, 15)
temperatura += i
temperatura
47
```
### 3.2 Более сложный цикл
```py
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]
```
Если длина sps меньше 10, то в конец списка добавляется его первый элемент. Если длина sps больше 10, цикл прерывается.
При этом k пробегается по всем даже новым элементам списка и поэтому может делать это бесконечно, так как список постоянно увеличивается. Для каждого элемента списка цикл прибаляет первый элемент в конец, и для k появляется новое значение, которое оно может принять.
```py
sps = [2, 15, 14, 8]
for k in sps[:]:
if len(sps) <= 10: sps.append(sps[0])
else: break
sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
В этом случае длина sps не сможет достигнуть 10, Так как у нас есть заданное количество выполнений цикла(4).
Срез sps по сути создает новый объект, постоянный в отличии от изменяемого в цикле объекта списка. k проходится только по 4 элементам, так как срез не изменяется.
### 3.3 Список с помощью цикла
```py
import random as rn
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else: #здесь else относится не к if, а к for
print(ss)
374
sps5
[51, 28, 29, 41, 51, 29, 60, 44, 29, 12]
```
Программа работает исправно. ss не превысело значение равное 500, поэтому цикл завершился после 10 значения i.
```py
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
ss
519
sps5
[51, 28, 29, 41, 51, 29, 60, 44, 29, 12, 76, 69]
```
ss превысело значение равное 500, поэтому вывода суммы не произошло
### 3.4 Пример с символьной строкой
Прибаляется пробел и один элемент из строки (ss проходит по каждому элементу stroka)
```py
stroka = 'Это автоматизированная система'
stroka1 = '' # Сначала пустая
for ss in stroka:
stroka1 += ' ' + ss
stroka1
' Э т о а в т о м а т и з и р о в а н н а я с и с т е м а'
```
### 3.5 Запись цикла в строке
Создание списка с синусоидальным сигналом
```py
import math
sps2 = [math.sin(i*math.pi/5 + 2) for i in range(100)]
sps2
[0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965]
```
Создадим график:
```py
import pylab
pylab.plot(sps2)
[<matplotlib.lines.Line2D object at 0x000001A7E1879090>]
pylab.title('Синусоидальный сигнал')
pylab.show()
```
![График](pic/F1.png)
## 4. Цикл «пока истинно условие» – управляющая инструкция while
### 4.1 Цикл со счетчиком.
```py
rashod = 300
while rashod:
print('Расход = ', rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
```
Цикл работал пока rashod == True, соответсвенно выход из цикла произошел по значению rashod == False.
### 4.2 Пример с символьной строкой
```py
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 # Прибавляется один до тех пор, пока i не превышает длину строки. Тогда выходим из цикла по значению False
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
Значение в момент 4 = 0.197375320224904
...
Значение в момент 38 = 0.9562374581277391
```
График
```py
pylab.plot(sps2)
[<matplotlib.lines.Line2D object at 0x00000276105D8A50>]
pylab.title('График выходного сигнала')
pylab.show()
```
![График выходного сигнала](pic/F2.png)
### 4.3 Определение, является ли число простым
```py
chislo = 267
kandidat = chislo // 2 # Для значений chislo > 1. Oкруг. в меньшую сторону
while kandidat > 1:
if chislo%kandidat == 0: # Остаток от деления
print(chislo, 'имеет множитель', kandidat)
break # else выполняться не будет
kandidat -= 1
else: # При завершении цикла без break
print(chislo, 'является простым!')
```
267 имеет множитель 89
С помощью цикла проверяем все числа от kandidat до 1. Иначе простое число.
```py
chislo = 7
kandidat = chislo // 2
while kandidat > 1:
if chislo%kandidat == 0:
print(chislo, 'имеет множитель', kandidat)
break
kandidat -= 1
else:
print(chislo, 'является простым!')
7 является простым!
```
Выявление всех простых чисел от 250 до 300:
```py
for i in range(250, 301):
chislo = i
kandidat = chislo // 2
while kandidat > 1:
if chislo%kandidat == 0:
print(chislo, 'имеет множитель', kandidat)
break
kandidat -= 1
else:
print(chislo, 'является простым!')
```
Вывод:
```py
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
```
### 4.4 Инструкция continue
Эта инструкция не вызывает завершение цикла, но завершает его текущий виток и обеспечивает переход к следующему витку.
```py
l=0
for i in range(1, 10):
if i == 5:
continue # Пропускаем значение i равное 4, переходим к следующему
else: l +=i
print(l)
1
3
6
10
16
23
31
40
```
## 5. Завершение работы.

@ -0,0 +1,74 @@
# Общее контрольное задание по теме 5
Для заданной символьной строки с англоязычным текстом определите порядковый номер каждой буквы в английском алфавите.
## Решение
```py
alphabet = 'abcdefghijklmnopqrstxvwxyz'
stroka = 'That is all'
for i in range(len(stroka)):
str1 = stroka.lower()
letters = str1[i]
if not letters in alphabet:
continue
else:
print('Буква ', letters, 'соответствует ', alphabet.index(letters) + 1, 'номеру в алфавите')
Буква t соответствует 20 номеру в алфавите
Буква h соответствует 8 номеру в алфавите
Буква a соответствует 1 номеру в алфавите
Буква t соответствует 20 номеру в алфавите
Буква i соответствует 9 номеру в алфавите
Буква s соответствует 19 номеру в алфавите
Буква a соответствует 1 номеру в алфавите
Буква l соответствует 12 номеру в алфавите
Буква l соответствует 12 номеру в алфавите
```
Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
## Решение
```py
stroka = 'Создайте список со словами из задания данного пункта Для этого списка определите есть ли в нем некоторое заданное значение и выведите соответствующее сообщение либо о нахождении элемента либо о его отсутствии в списке'
spis = stroka.split()
spis
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке']
znach = 'в'
for slovo in spis:
if slovo == znach:
print('Найдено!')
break
else: print('Не найдено!')
Найдено!
znach = 'пригород'
for slovo in spis:
if slovo == znach:
print('Найдено!')
break
else: print('Не найдено!')
Заданное слово не найдено!
```
## Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
name = ['Криви', 'Шинкаренко', 'Зеленкина', 'Кузьменко']
balll = [4.45, 4.9, 4.6, 4.8]
name1 = ['Криви', 'Кузьменко', 'Шинкаренко', 'Зеленкина']
ballz = [4.1, 4.6, 4.9, 4.0]
stud = input('Укажите фамилию студента: ')
Укажите фамилию студента: Криви
if stud in name and stud in name1:
print('Средний балл на летней сессии: ', balll[name.index(stud)], '\nСредний балл на зимней сессии: ', ballz[name1.index(stud)])
Средний балл на летней сессии: 4.45
Средний балл на зимней сессии: 4.1
```

@ -0,0 +1,98 @@
# Индивидуальное контрольное задание по теме 5
# Задание. Вариант 10
Создайте список со 100 случайными целыми числами в интервале значений от -40 до +100. Рассчитайте сумму значений по тем числам, которые нацело делятся на 3.
## Решение
Создание списка со 100 случайными целыми числами в интервале от -40 до 100:
```py
import random
while len(spis) < 100:
spis.append(random.randint(-40,100))
```
Полученный список
```py
spis
[70, 19, 9, 46, -6, -40, 8, 91, -17, 91, -37, 10, -20, 70, 52, 0, 21, 73, 52, -38, 55, 48, 74, -32, 51, 70, 50, 16, 89, 11, 11, 79, -40, -32, 38, 13, -16, 66, 4, -36, 32, 89, 17, 16, 100, 65, 92, 70, 95, 7, 20, -7, -1, 48, 70, 43, 86, -29, 39, 76, 78, 46, 82, 5, 85, 18, 90, 98, 28, -12, 99, 90, 29, 24, 13, 17, 33, 26, -28, -12, 65, -35, 54, 59, 68, -14, 43, -20, 99, 24, 16, 71, -28, 92, -40, -6, -33, 66, -39, 39]
```
Расчет суммы значений по числам кратным трём.
```py
for i in range(100):
if spis[i]%3==0:
s+=spis[i]
print("Итоговая сумма равна", s)
Итоговая сумма равна 852
```
Расчет суммы значений по числам кратным трём со следованием каждого кратного и проверкой работоспособности программы:
```py
s=0
for i in range(100):
if spis[i]%3==0:
s+=spis[i]
print("Значение кратное 3 номер",i, "=", spis[i])
print("Сумма равна", s)
```
Вывод каждого кратного и суммы
```py
Значение кратное 3 номер 2 = 9
Сумма равна 9
Значение кратное 3 номер 4 = -6
Сумма равна 3
Значение кратное 3 номер 15 = 0
Сумма равна 3
Значение кратное 3 номер 16 = 21
Сумма равна 24
Значение кратное 3 номер 21 = 48
Сумма равна 72
Значение кратное 3 номер 24 = 51
Сумма равна 123
Значение кратное 3 номер 37 = 66
Сумма равна 189
Значение кратное 3 номер 39 = -36
Сумма равна 153
Значение кратное 3 номер 53 = 48
Сумма равна 201
Значение кратное 3 номер 58 = 39
Сумма равна 240
Значение кратное 3 номер 60 = 78
Сумма равна 318
Значение кратное 3 номер 65 = 18
Сумма равна 336
Значение кратное 3 номер 66 = 90
Сумма равна 426
Значение кратное 3 номер 69 = -12
Сумма равна 414
Значение кратное 3 номер 70 = 99
Сумма равна 513
Значение кратное 3 номер 71 = 90
Сумма равна 603
Значение кратное 3 номер 73 = 24
Сумма равна 627
Значение кратное 3 номер 76 = 33
Сумма равна 660
Значение кратное 3 номер 79 = -12
Сумма равна 648
Значение кратное 3 номер 82 = 54
Сумма равна 702
Значение кратное 3 номер 88 = 99
Сумма равна 801
Значение кратное 3 номер 89 = 24
Сумма равна 825
Значение кратное 3 номер 95 = -6
Сумма равна 819
Значение кратное 3 номер 96 = -33
Сумма равна 786
Значение кратное 3 номер 97 = 66
Сумма равна 852
Значение кратное 3 номер 98 = -39
Сумма равна 813
Значение кратное 3 номер 99 = 39
Сумма равна 852
```
Загрузка…
Отмена
Сохранить