### Отчёт по теме 3
Лазарев Данил, А-01-23
### 1.Запуск оболочки IDLE и установка рабочего каталога.
```
import os
os.chdir('C:\\Users\\Dannyan\\OneDrive\\Рабочий стол\\python-labs\\TEMA3\\')
```
### 2.Преобразование простых базовых типов объектов.
## 2.1. Преобразование в логический тип
```
logiz1 = bool(56)
logiz1
True
logiz2 = bool(0)
logiz2
False
logiz3 = bool("Beta")
logiz3
True
logiz4 = bool("")
logiz4
False
```
### 2.2. Преобразование объектов различных типов объектов в объект типа int/float
```
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#18>", line 1, in <module>
    tt5 = int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
flt1 = float(789)
flt1
789.0
flt2 =float(-6.78e2)
flt2
-678.0
flt3 = float("Infinity")
flt3
inf
flt4 = float("-inf")
flt4
-inf
```
В данном случае операция int("98.76") не выполнилась, так как при попытке преобразования заданного числа типа 'строка' предполагается целочисленность выражения, в данном же случае присутствует аргумент с плавающей точкой.
### 2.3. Преобразование десятичных чисел в другие системы счисления(двоичную,восьмеричную, и шестнадцатеричную), а также обратные преобразования
```
hh = 123
dv1 = bin(hh)
dv1
'0b1111011'
vos1 = oct(hh)
vos1
'0o173'
dhs1 = hex(hh)
shs1 = hex(hh)
shs1
'0x7b'
int(dv1,2)
123
int(vos1,8)
123
int(shs1,16)
123
```
### 3. Преобразование сложных типов обьектов в другие типы
### 3.1. Преобразование элементов в строку символов
```
strk1 = str(23.6)
strk1
'23.6'
strk2 = str(logiz3)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    strk2 = str(logiz3)
NameError: name 'logiz3' is not defined
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
```
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']
```
### 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple
```
kort7=tuple('Строка символов')
kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
kort8=tuple(spis2)
kort8
(124, 236, -15, 908)
kort9=tuple({"A":1,"B":2,"C":9})
kort9
('A', 'B', 'C')
```
### 3.4. Удаление объектов
```
del strk5, kort8
strk5
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
kort8
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Создадим строку в соответствии с заданием. Проведем над ней изложенные операции:
```
f = "LazarevDV"
m = list(f)
m
['L', 'a', 'z', 'a', 'r', 'e', 'v', 'D', 'V']
v = tuple(m)
v
('L', 'a', 'z', 'a', 'r', 'e', 'v', 'D', 'V')
w = str(f)
w
"('L', 'a', 'z', 'a', 'r', 'e', 'v', 'D', 'V')"
```
### 4. Арифметические операции
### 4.1. Изучены операции сложения и вычитания
```
12+7+90
109
5.689e-1 - 0.456
0.11289999999999994
23.6+54
77.6
14-56.7+89
46.3
```
### 4.2. Изучена операция умножения
```
-6.7*12
-80.4
```
### 4.3. Изучение операции деления 
```
-234.5/6
-39.083333333333336
a=178/4
a
44.5
type(a)
<class 'float'>
```
Результатом всегда будет вещественное число
### 4.4. Изучение операции деления с округлением вниз
```
b=178//45
b
3
type(b)
<class 'int'>
c=-24.6//12.1
c
-3.0
type(c)
<class 'float'>
d = 27.1// 4
d
6.0
type(d)
<class 'float'>
p = -7 // 32
p
-1
type(p)
<class 'int'>
```
### 4.5. Изучение операции получения остатка от деления
```
148%33
16
12.6%3.8
1.2000000000000002
21.3%3
0.3000000000000007
```
### 4.6. Изучение операции возведения в степень
Возведение в степень целых и вещественных чисел
```
14**3
2744
e=2.7**3.6
e
35.719843790663525
32.1** 2
1030.41
2**3.11
8.633825892035416
```
Рассмотрим приведенные выше операции над комплексными числами
```
k1 = 2+2j
k2 = 1 +9j
k1+k2
(3+11j)
k1 -k2
(1-7j)
k1*k2
(-16+20j)
k1 / k2
(0.24390243902439027-0.1951219512195122j)
k1 // k2
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    k1 // k2
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
k1//2
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    k1//2
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
k1%k2
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    k1%k2
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
k2 % 2
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    k2 % 2
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
k1**4
(-64+0j)
k1**k2
(-0.001813524614321925-0.0015845209011050843j)
```
Заметим, что из всех операций не выполняются операции деления с остатком и округления вниз
### 5.Операции с двоичными представлениями целых чисел
### 5.1. Двоичная инверсия
```
dv1=9
dv2=~dv1
dv2
-10
```
### 5.2. Двоичное «И» (&) – побитовое совпадение
```
7 & 8 # 111 и 1000 = 0000
0
```
### 5.3. Двоичное «ИЛИ»
```
7|9     # 111 или 1001 = 1111 
15
7|8     # 111 или 1000 = 1111
15
14|5   # 1110 или 0101 = 1111
15
```
### 5.4. Двоичное «исключающее ИЛИ»
```
14^5 # 1110 исключающее или 0101 = 1011
11
```
### 5.5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева
```
h=14
h
14
bin(h)
'0b1110'
g=h<<2
g
56
bin(g)
'0b111000'
g1 = h>>1
bin(g1)
'0b111'
g1
7
g2 = h>>2
g2
3
bin(g2)
'0b11'
l = 832
l << 2
3328
bin(3328)
'0b110100000000'
l
832
bin(l)
'0b1101000000'
bin(l<<7)
'0b11010000000000000'
bin(l>>7)
'0b110'
```
### 6. Операции при работе с последовательностями (строками, списками, кортежами)
### 6.1. Объединение последовательностей (конкатенация)
```
'Система '+'регулирования' #Соединение двух строк
'Система регулирования'
['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2. Повторение элементов обьекта различных типов
```
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*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) 
```
stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
True
'ку' in ['ку','-']*3 #Наличие контекста в списке
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
``` 
### 6.4. Подстановка значений в строку с помощью оператора «%» 
```
stroka='Температура = %g %s  %g'
stroka % (16,' меньше ',25)
'Температура = 16  меньше   25'
stroka='Температура = %(zn1)g %(sravn)s  %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16  меньше   25'
```
### 7.Оператор присваивания
### 7.1. Обычное присваивание значения переменной
```
zz=-12
zz
-12
```
### 7.2. Увеличение значения переменной на заданную величину  (+=) или уменьшение (-=)
```
zz+=5
zz
-7
zz-=3
zz
-10
stroka='Система'
stroka+=' регулирования'
stroka
'Система регулирования'
```
### 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=) 
```
zz/=2
zz
-5.0
zz*=5
zz
-25.0
stroka *= 3
stroka
'Система регулированияСистема регулированияСистема регулирования'
```
### 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=)
```
p=27.3
p //= 2
p
13.0
p %= 3
p
1.0
p +=2
p**=2
p
9.0
```
### 7.5. Множественное присваивание 
```
w=v=10
w,v
(10, 10)
n1,n2,n3=(11,-3,'all')
n1,n2,n3
(11, -3, 'all')

b1,b2,b3 = {"A":1,"B":2,"C":9}
b1,b2,b3
('A', 'B', 'C')

b1,b2,b3 = {"A","B","C"}
b1,b2,b3
('A', 'B', 'C')

b1,b2,b3= '123'
b1,b2,b3
('1', '2', '3')
```
### 8. Изучение логических операций
### 8.1. Операции сравнения
```
w=v=10
w==v
True
w != v
False
w >v
False
w <= v
True
w >= v
True
```
### 8.2. Проверка наличия заданного элемента в последовательности или во множестве, а также  проверка наличия ключа в словаре (in)
```
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
True
'cap' in mnoz1
False
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UII' in dct1['Depart']
True
dct1['Depart'][1] == 'MM'
False
```
### 8.3. Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not)
```
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
(a<b) or ('book' in mnoz1)
True
(a != b) and ( a>b) and (a == 17)
True
```
### 8.4. Проверка ссылок переменных на один и тот же объект (is)
```
w=v=10 #переменные ссылаются на один и тот же объект в оперативной памяти
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1 В данном случае эти переменные не записаны в один адрес памяти, питон создает для списков два разных обьекта
False
```
### 9.Операции с объектами, выполняемые с помощью методов. 
Создание строки и вывод её атрибутов
```
stroka='Микропроцессорная система управления'
dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
### 9.1. Методы работы со строками
```
stroka.find('пр')  #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит  заданный разделитель
spis22
['Микропроцессорная', 'система', 'управления']
stroka.upper()  #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
stroka3
'Микропроцессорная система управления'
stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
```
Метод format
```
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}'
strk3
'Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2. Методы работы со списками
```
spisok = [1, 'book', 32.2, [21,32], 'sss']
dir(spisok)
['__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']
spisok
[1, 'book', 32.2, [21, 32], 'sss']
spisok.pop(2) # Удаление элемента из списка
32.2
spisok
[1, 'book', [21, 32], 'sss']
spisok.append('j') # добавление элемента j в конец списка
spisok
[1, 'book', [21, 32], 'sss', 'j']
spisok.insert(2,'i') #Добавление в список элемента i с индексом 2
spisok
[1, 'book', 'i', [21, 32], 'sss', 'c']
spisok.count('i') #Подсчёт числа элементов i, входящих в список
1
```
### 9.3. Методы работы с кортежами
```
kort1 = (1,3,'a',[2,1])
dir(kort1)
['__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']
kort1.index('a') #Нахождение индекса элемента в кортеже
2
kort1.count(1) #Подсчёт числа элементов 1, входящих в кортеж
1
```
### 9.4. Методы для работы со словарями
```
dd = {'A':19,'B':20,'C':21}
dir(dd)
['__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']
dd.keys() #Отображение ключей словаря
dict_keys(['A', 'B', 'C'])
dd.values() #Отображение значений словаря
dict_values([19, 20, 21])
dd.pop('A') #Удаление элемента словаря по ключу
19
dd
{'B': 20, 'C': 21}
```
### 9.5. Методы работы с множествами
```
mnoz = {"A","B","C",2,1}
dir(mnoz)
['__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']
mnoz.remove("A")
mnoz
{1, 2, 'C', 'B'}
```
### Завершение работы в среде IDLE