# Отчёт по Теме 3

Кузьменко Елена, А-02-23

## 1. Запустили интерактивную оболочку IDLE.

## 2. Преобразование простых базовых типов объектов.

### 2.1. Логический тип.

```py
>>> logiz1=bool(56); logiz1
True
>>> logiz2=bool(0); logiz2
False
>>> logiz3=bool("Beta");logiz3
True
>>> logiz4=bool("");logiz4
False
```

### 2.2. Целое десятичное число с заданной системой счисления.

```py
>>> tt1=int(198.6);tt1 #Отбрасывает дробную часть
198
>>> tt2=int("-76");tt2
-76
>>> tt3=int("B",16);tt3
11
>>> tt4=int("71",8);tt4
57
>>> tt5=int("98.76");tt5 #Читает строку как целое число(ошибка)
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    tt5=int("98.76");tt5
ValueError: invalid literal for int() with base 10: '98.76'
```

Нельзя напрямую преобразовать строку с дробным числом в целое число, так как int() не принимает строки с точкой.

```py
>>> tt5=int(float("98.76"));tt5
98
```

### 2.3. Другие системы счисления.

```py
>>> hh=123
>>> dv1=bin(hh);dv1
'0b1111011'
>>> vos1=oct(hh);vos1
'0o173'
>>> shs1=hex(hh);shs1
'0x7b'
>>> pr_dv1=int(dv1);pr_dv1
```

Проверка:

```py
>>> pr_dv1=int(dv1,2);pr_dv1
123
>>> pr_vos1=int(vos1,8);pr_vos1
123
>>> pr_shs1=int(shs1,16);pr_shs1
123
```

## 3. Преобразование более сложных базовых типов объектов.

### 3.1. Строка символов

```py
>>> strk1=str(23.6);strk1
'23.6'
>>> strk2=str(logiz3);strk2
'True'
>>> strk3=str(["A","B","C"]);strk3
"['A', 'B', 'C']"
>>> strk4=str(("A","B","C"));strk4
"('A', 'B', 'C')"
>>> strk5=str({"A":1,"B":2,"C":9});strk5
"{'A': 1, 'B': 2, 'C': 9}"
```

### 3.2. Элементы объекта в список

```py
>>> spis1=list("Строка символов");spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
>>> spis2=list((124,236,-15,908));spis2
[124, 236, -15, 908]
>>> spis3=list({"A":1,"B":2,"C":9});spis3
['A', 'B', 'C']
```

В список попали только ключи словаря. Сделаем список со значениями:

```py
>>> spis4=list({"A":1,"B":2,"C":9}.values());spis4
[1, 2, 9]
```

### 3.3 Элементы в кортеж

```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 Удаление объекта

```py
>>> del strk5,kort8
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'hh', 'kort7', 'kort9', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'pr_dv1', 'pr_shs1', 'pr_vos1', 'shs1', 'spis1', 'spis2', 'spis3', 'spis4', 'strk1', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'tt5', 'vos1']
>>> dir(strk5)
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    dir(strk5)
NameError: name 'strk5' is not defined
>>> dir(kort8)
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    dir(kort8)
NameError: name 'kort8' is not defined
```

```py
>>> name="Kuzmenko E.A.";name
'Kuzmenko E.A.'
>>> name_list=list(name);name_list
['K', 'u', 'z', 'm', 'e', 'n', 'k', 'o', ' ', 'E', '.', 'A', '.']
>>> name_kort=tuple(name_list);name_kort
('K', 'u', 'z', 'm', 'e', 'n', 'k', 'o', ' ', 'E', '.', 'A', '.')
>>> name_str=str(name_kort);name_str
"('K', 'u', 'z', 'm', 'e', 'n', 'k', 'o', ' ', 'E', '.', 'A', '.')"
>>> print(name_str)
('K', 'u', 'z', 'm', 'e', 'n', 'k', 'o', ' ', 'E', '.', 'A', '.')
```

## 4. Работа с арифметическими операциями

### 4.1. Сложение и вычитание

```py
>>> 12+7+90
109
>>> 5.689e-1 - 0.456
0.11289999999999994
>>> 23.6+54
77.6
>>> 14-56.7+89
46.3
```

### 4.2. Умножение

```py
>>> -6.7*12
-80.4
```

### 4.3. Деление

```py
>>> -234.5/6
-39.083333333333336
>>> a=178/45;type(a)
<class 'float'>
>>> a
3.9555555555555557
```

### 4.4. Деление с округлением

```py
>>> b=178//45;b;type(b)
3
<class 'int'>
>>> c=-24.6//12.1;c;type(c)
-3.0
<class 'float'>
>>> b1=178//12.1;b1;type(b1)
14.0 #без округления 14.710743801652892
<class 'float'>
>>> c1=-24.6//45;c1;type(c1)
-1.0 #без округления -0.5466666666666667
<class 'float'>
>>> c2=-24.6/45;c2
-0.5466666666666667
```

### 4.5. Остаток от деления

```py
>>> A=148/33;A1=148%33;A,A1;type(A),type(A1)
(4.484848484848484, 16)
(<class 'float'>, <class 'int'>)
>>> B=12.6/3.8;B1=12.6%3.8;B;B1;type(B);type(B1)
3.3157894736842106
1.2000000000000002
<class 'float'>
<class 'float'>
>>> C=148/3.8;C1=148%3.8;C;C1;type(C);type(C1)
38.94736842105263
3.6000000000000068
<class 'float'>
<class 'float'>
>>> D=12.6/33;D1=12.6%33;D;D1;type(D);type(D1)
0.38181818181818183
12.6
<class 'float'>
<class 'float'>
```

### 4.6. Степень числа

```py
>>> 14**3
2744
>>> e=2.7**3.6;e;type(e)
35.719843790663525
<class 'float'>
>>> 14**3.6
13367.830445904418
>>> e1=2.7**3;e1;type(e1)
19.683000000000003
<class 'float'>
```

Операции с комплексными числами:

```py
>>> z=12+13j;z1=9-3j;z;z1;type(z);type(z1)
(12+13j)
(9-3j)
<class 'complex'>
<class 'complex'>
>>> z+z1
(21+10j)
>>> z-z1
(3+16j)
>>> z*z1
(147+81j)
>>> z/z1
(0.7666666666666667+1.7j)
>>> z//z1
Traceback (most recent call last):
  File "<pyshell#80>", line 1, in <module>
    z//z1
TypeError: can't take floor of complex number.
>>> z%z1
Traceback (most recent call last):
  File "<pyshell#81>", line 1, in <module>
    z%z1
TypeError: can't mod complex numbers.
>>> z**z1
(748985013590.2666-1875851778010.0532j)
```

Комплексные числа не поддерживают операции // и % потому что они не упорядочены, то есть у них нет понятия больше или меньше, необходимого для округления и вычисления остатка.

## 5. Двоичные представления целых чисел

### 5.1. Инверсия

```py
>>> dv1=9;dv1
9
>>> dv2=~dv1;dv2
-10
>>> dv11=3;dv22=~dv11;dv22
-4
```

### 5.2. "И"

```py
>>> 7&9 #111 и 1001 = 0001
1
>>> 7&8 #111 и 1000 = 0000
0
>>> 3&7 #0011(бинарное) и 0111(бинарное) = 0011, то есть 3(десятичное)
3
```

### 5.3. "ИЛИ"

```py
>>> 7|9 #0111 или 1001
15 #1111
>>> 7|8 #111 или 1000
15 #1111
>>> 14|5 #1110 или 0101
15 #1111
```

### 5.4. Исключающее "ИЛИ"

1 если биты разные, 0 если одинаковые:

```py
>>> 14^5 #1110 искл.или 0101
11 #1011
```

### 5.5. Сдвиг двоичного числа

```py
>>> h=14;h;g=h<<2;bin(h);g;bin(g)
14
'0b1110'
56
'0b111000'
>>> g1=h>>1;g1;bin(g1)
7
'0b111'
>>> g2=h>>2;g2;bin(g2)
3
'0b11'
>>> h1=75;h1;bin(75)
75
'0b1001011'
>>> j1=h1>>4;j1;bin(j1)
4
'0b100'
>>> j2=h1<<3;j2;bin(j2)
600
'0b1001011000'
```

## 6. Работа с последовательностями

### 6.1. Объединение

```py
>>> 'Система '+'регулирования'
'Система регулирования'
>>> ['abc','de','fg']+['hi','jkl']
['abc', 'de', 'fg', 'hi', 'jkl']
>>> ('abc','de','fg')+('hi','jkl')
('abc', 'de', 'fg', 'hi', 'jkl')
```

### 6.2. Повторение

```py
>>> 'ля-'*5
'ля-ля-ля-ля-ля-'
>>> ['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
>>> ('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
>>> signal1=[0]*3+[1]*99; signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> signal2=(0,)*3+(1,)*5+(0,)*7;signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```

### 6.3. Наличие заданного подстроки и контекста

```py
>>> stroka='Система автоматического управления'
>>> 'автомат' in stroka
True
>>> 'ку' in ['ку','-']*3
True
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
```

### 6.4. Подстановка значений

```py
>>> stroka='Температура = %g %s  %g';stroka
'Температура = %g %s  %g'
>>> stroka % (16,' меньше ',25);stroka
'Температура = 16  меньше   25'
'Температура = %g %s  %g'
>>> stroka1='Температура = %(zn1)g %(sravn)s  %(zn2)g';stroka1
'Температура = %(zn1)g %(sravn)s  %(zn2)g'
>>> stroka1 % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16  меньше   25'
```

## 7. Присваивание

### 7.1. Обычное

```py
>>> zz=-12;zz
-12
```

### 7.2 Увеличение и уменьшение значения

```py
>>> zz=-12;zz
-12
>>> zz+=5;zz
-7
>>> zz-=3;zz
-10
>>> stroka2='Система'; stroka2
'Система'
>>> stroka2+=' регулирования';stroka2
'Система регулирования'
```
### 7.3. Умножение и деление значения

```py
>>> zz;zz/=2;zz
-10
-5.0
>>> zz*=5;zz
-25.0
>>> stroka2*=3;stroka2
'Система регулированияСистема регулированияСистема регулирования'
```

### 7.4. Деление с округлением, остаток, степень

```py
>>> zz;zz//=4;zz
-25.0
-7.0
>>> zz**=2;zz
49.0
>>> zz%=5;zz
4.0
```

### 7.5. Множественное присваивание

```py
>>> n1,n2,v3=(11,-3,'all');n1;n2;n3
11
-3
'all'
>>> n1,n2,n3="11","-3","all";n1;n2;n3
'11'
'-3'
'all'
>>> n1,n2,n3=[11,-3,'all'];n1;n2;n3
11
-3
'all'
>>> n1,n2,n3={11:1,-3:2,'all':3};n1;n2;n3
11
-3
'all'
>>> n1,n2,n3={11,-3,'all',-3,11};n1;n2;n3
11
'all'
-3
```

## 8. Логические операции

### 8.1. Сравнение

```py
>>> w=15;v=-10;w;v
15
-10
>>> w==v
False
>>> w!=v
True
>>> w<v
False
>>> w>v
True
>>> w>=v
True
>>> w<=v
False
>>> w1='abcd';v1='aloaloalo'
>>> w1==v1
False
>>> w1>v1
False
>>> w1<v1
True
```

### 8.2. Наличие элемента

```py
>>> mnoz1={'pen','book','pen','iPhone','table','book'};mnoz1
{'iPhone', 'pen', 'book', 'table'}
>>> 'book' in mnoz1
True
>>> 'cap' in mnoz1
False
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45};dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
>>> 'Vologda' in dic1
True
>>> 'Pskov' in dic1
False
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']};dct1
{'Institut': ['AVTI', 'IEE', 'IBB'], 'Depart': ['UII', 'PM', 'VMSS', 'MM'], 'gruppa': ['A-01-15', 'A-02-15']}
>>> 'UII' in dct1['Depart']
True
>>> dct1['Depart'][1] == 'MM'
False
```

### 8.3. Логические выражения

```py
>>> a=17;b=-6
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
>>> not (a==b) or ('pen' in mnoz1) and ('Depart' in dct1)
True
>>> not ('pen' in mnoz1) or not (a<b) and ('Depart' in dct1)
True
```

### 8.4. Ссылки переменных на тот же объект

```py
>>> w=v=10
>>> w;v
10
10
>>> w is v
True
>>> w1=['A','B'];v1=['A','B']
>>> w1 is v1
False
```

В первом случае w и v ссылаются на один и тот же объект, поэтому проверка выдаёт True. Для второго случая создаётся два разных списка, каждый из которых занимают свою ячейку памяти(по отдельности друг от друга и без ссылок), поэтому как "разные объекты" результат - False.

## 9. Методы для операций с объектами

```py
>>> stroka='Микропроцессорная система управления';stroka
'Микропроцессорная система управления'
>>> dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```

### 9.1. Работа со строками

```py
>>> stroka.find('пр')
5
>>> stroka.count('с')
4
>>> stroka.replace('у','автоматического у')
'Микропроцессорная система автоматического управления'
>>> spis22=stroka.split(' ');spis22
['Микропроцессорная', 'система', 'управления']
>>> stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
>>> stroka3=" ".join(spis22);stroka3
'Микропроцессорная система управления'
>>> stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
>>> stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
```

Метод format:

```py
>>> strk1='Момент времени {}, значение = {}';strk1
'Момент времени {}, значение = {}'
>>> strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
>>> strk2='Момент времени {1}, значение = {0}:{2}';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. Работа со списками

```py
>>> spsk=[123,'lala',False,'abc','12'];spsk
[123, 'lala', False, 'abc', '12']
>>> 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);spsk
False
[123, 'lala', 'abc', '12']
>>> spsk.append('c');spsk
[123, 'lala', 'abc', '12', 'c']
>>> spsk.insert(2,'a');spsk
[123, 'lala', 'a', 'abc', '12', 'c']
>>> spsk.count('a');spsk
1
[123, 'lala', 'a', 'abc', '12', 'c']
```

### 9.3. Кортеж

```py
>>> k=(3+3j,'oo',1,'324','hello');k
((3+3j), 'oo', 1, '324', 'hello')
>>> 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(3)
0
>>> k.count(1)
1
>>> k.index(1)
2
>>> len(k)
5
>>> k[0]
(3+3j)
```

### 9.4. Словарь и множество

Словарь

```py
>>> sl={'a':1,'b':2,'c':3,'d':4,'e':5};sl
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
>>> dir(sl)
['__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']
>>> sl.keys()
dict_keys(['a', 'b', 'c', 'd', 'e'])
>>> sl.values()
dict_values([1, 2, 3, 4, 5])
>>> sl.get('a')
1
>>> sl.update({'e':150});sl
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 150}
>>> sl.pop('b');sl
2
{'a': 1, 'c': 3, 'd': 4, 'e': 150}
>>> sl.clear();sl
{}
```
Множество 

```py
>>> mn={1,11,'lo',11,'mnoz','123','mnoz'};mn
>>> dir(mn)
['__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']
{'123', 1, 'mnoz', 11, 'lo'}
>>> mn.add(2);mn
{'123', 1, 2, 'mnoz', 11, 'lo'}
>>> mn.remove(1);mn
{'123', 2, 'mnoz', 11, 'lo'}
>>> mn.pop();mn #удаляет случайный элемент
'123'
{2, 'mnoz', 11, 'lo'}
>>> mn.clear();mn
set()
```
## 10. Сеанс работы с IDLE закончен