diff --git a/TEMA3/report.md b/TEMA3/report.md index e69de29..b2c665f 100644 --- a/TEMA3/report.md +++ b/TEMA3/report.md @@ -0,0 +1,791 @@ +# Протокол по Теме 2 + +Марков Никита Сергеевич, А-03-23 + +## 1. Начало работы + +Запуск IDLE, установление рабочего каталога + +## 2. Преобразование простых базовых типов объектов + +### 2.1 Преобразование в логический тип с помощью функции bool + +```py + +>>> logiz1=bool(56) +>>> type(logiz1) + +>>> logiz1 +True +>>> logiz2=bool(0) +>>> logiz2 +False +>>> type(logiz2) + +>>> logiz3=bool("Beta") +>>> logiz3 +True +>>> type(logiz3) + +>>> logiz4=bool("") +>>> logiz4 +False +>>> type(logiz4) + +``` + +### 2.2 Преобразование в целое десятичное число / в вещественное число +```py +>>> tt1=int(198.6) +>>> tt1 +198 +>>> tt2=int("-76") +>>> tt2 +-76 +>>> tt3=int("B",16) +>>> tt3 +11 +>>> tt4=int("71",8) +>>> tt4 +57 +>>> tt5=int("98.76") +Traceback (most recent call last): + File "", line 1, in + tt5=int("98.76") +ValueError: invalid literal for int() with base 10: '98.76' +``` +Объяснение: + +int() ожидает увидеть целочисленное значение в строке, решение проблемы - int(float("98.76")) + + +```py + +>>> flt1=float(789) +>>> flt2=float(-6.78e2) +>>> flt3=float("Infinity") +>>> flt4=float("-inf") +>>> flt1 +789.0 +>>> flt2 +-678.0 +>>> flt3 +inf +>>> flt4 +-inf + +``` + +### 2.3 Преобразование десятичных чисел в другие системы счисления + +```py + +>>> hh=123 +>>> dv1=bin(hh) # двоичная сс +>>> vos1=oct(hh) # 8-ричная сс +>>> shs1=hex(hh) # 16-ричная сс +>>> dv1 +'0b1111011' +>>> vos1 +'0o173' +>>> shs1 +'0x7b' + +>>> int(dv1, 2) +123 +>>> int(vos1, 8) +123 +>>> int(shs1, 16) +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 Преобразование эл-ов объекта в список с помощью list() + +```py + +>>> spis1=list("Строка символов") +>>> spis1 +['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в'] +>>> spis2=list((124,236,-15,908)) +>>> spis2 +[124, 236, -15, 908] +>>> spis3=list({"A":1,"B":2,"C":9}) +>>> spis3 +['A', 'B', 'C'] + +``` + +Решение задания: + +```py + +>>> spis3=list({"A":1,"B":2,"C":9}.values()) +>>> spis3 +[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 +>>> strk5 +Traceback (most recent call last): + File "", line 1, in + strk5 +NameError: name 'strk5' is not defined +>>> kort8 +Traceback (most recent call last): + File "", line 1, in + kort8 +NameError: name 'kort8' is not defined + +``` + +Решение задания: + +```py + +>>> fio = 'Markov N.S.' +>>> listfio=list(fio) +>>> listfio +['M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.'] +>>> cortfio = tuple(listfio) +>>> cortfio +('M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.') +>>> strfio = str(cortfio) +>>> strfio +"('M', 'a', 'r', 'k', 'o', 'v', ' ', 'N', '.', 'S', '.')" + +``` + +## 4. Арифметические операции + +### 4.1 Сложение и вычитание + +```py + +>>> 12+7+90 +109 +>>> 5.689e-1 - 0.456 +0.11289999999999994 +>>> 23.6+54 +77.6 +>>> 14-56.7+89 +46.3 + +``` + +### 4.2 Умножение + +```py + +>>> -6.7*12 +-80.4 + +``` + +### 4.3 Деление + +Результатом деления всегда будет вещественное число + +```py + +>>> -234.5/6 +-39.083333333333336 +>>> a=178/45 +>>> a +3.9555555555555557 +>>> type(a) + + +``` + +### 4.4 Деление с округлением вниз (целочисленное деление) + +```py + +>>> b=178//45 +>>> b +3 +>>> c=-24.6//12.1 +>>> c +-3.0 +>>> type(b) + +>>> type(c) + + +``` +Если в целочисленном делении используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый + +```py + +>>> asas= 123.4 // 3 +>>> asas +41.0 +>>> type(asas) + + +``` + +### 4.5 Получение остатка от деления + +```py + +>>> 148%33 +16 +>>> 12.6%3.8 +1.2000000000000002 + +>>> 1245.4 % 4 +1.400000000000091 + +``` +Если в остатке от деления используется хотя бы один объект вещественного типа - результат будет вещественным, если оба целых объекта - результат целый + +### 4.6 Возведение в степень + +```py + +>>> 14**3 +2744 +>>> e=2.7**3.6 +>>> e +35.719843790663525 +>>> 3**2.3 +12.513502532843182 + +``` + +К комплексным числам можно применять следующие операции: + +сложение +вычитание +умножение +деление +возведение в степень + +и нельзя следующие: + +целочисленное деление +остаток от деления + +## 5. Операции с двоичными представлениями целых чисел + +### 5.1 Двоичная инверсия (~) + +```py + +>>> dv1=9 +>>> dv2=~dv1 +>>> dv2 +-10 + +``` + +~x = -x - 1 + +### 5.2 Двоичное "И" + +```py + +>>> 7&9 +1 +>>> 7&8 +0 + +``` + +### 5.3 Двоичное "Или" + +```py + +>>> 7|9 +15 +>>> 7|8 +15 +>>> 14|5 +15 + +``` + +### 5.4 Двоичное исключающее "Или" + +```py + +>>> 14^5 +11 + +``` + +### 5.5 Двоичное исключающее "Или" (Влево или вправо) + +```py + +>>> h=14 +>>> g=h<<2 +>>> g +56 +>>> g1=h>>1 +>>> g1 +7 +>>> g2=h>>2 +>>> g2 +3 + +``` + +Решение задания + +```py + +>>> a = 197 +>>> b = 154 +>>> bin(a)[2:] +'11000101' +>>> bin(b)[2:] +'10011010' +>>> a & b +128 +>>> a | b +223 +>>> a ^ b +95 + +``` + +## 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 % (16,' меньше ',25) +'Температура = 16 меньше 25' + +``` + +%g - placeholder для чисел + +%s - placeholder для строк + +```py + +>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g' +>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25} +'Температура = 16 меньше 25' + +``` + +## 7. Оператор присваивания + +### 7.1 Обычное присваивание значения переменной + +```py + +>>> zz=-12 +>>> zz +-12 + +``` + +### 7.2 Увеличение/уменьшение значения переменной на заданную величину + +```py + +>>> zz+=5 +>>> zz-=3 +>>> stroka='Система' +>>> stroka+=' регулирования' +>>> zz +-10 +>>> stroka +'Система регулирования' + +``` + +### 7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=) + +```py + +>>> qw = 8 +>>> qw *= 3 +>>> qw +24 +>>> qw /= 4 +>>> qw +6.0 + +``` + +### 7.4 Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=) + +```py + +>>> qw +6.0 +>>> qw //=2 +>>> qw +3.0 +>>> qw = 8 +>>> qw%=2 +>>> qw +0 +>>> qw=4 +>>> qw **= 3 +>>> qw +64 + +``` + +### 7.5. Множественное присваивание + +```py + +>>> w=v=10 +>>> w,v +(10, 10) +>>> n1,n2,n3=(11,-3,'all') +>>> n1,n2,n3 +(11, -3, 'all') + +``` + +Решение задания: + +Со списком работает поэлементно, со строками посимвольно, с множествами работает, но не в той очередности присваивания, со словарем работает, но нужно знать что присваивать - ключи либо значения + +## 8. Логические операции + +### 8.1. Операции сравнения + +```py + +>>> w == v +True +>>> w != v +False +>>> w < v +False +>>> w > v +False +>>> w <= v +True +>>> w >= v +True + +``` + +### 8.2 Проверка наличия заданного элемента в последовательности или во множестве + +```py + +>>> 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 Создание больших логических выражений с использованием соединительных слов + +```py + +>>> a=17 +>>> b=-6 +>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1) +True + +``` + +Решение задания: + +```py + +>>> (a == b) and ('Orel' in dic1) or ('Pskov' in dic1) +False +>>> (a > b) or 'pen' in mnoz1 +True +>>> 'cap' in mnoz1 or a == b +False + +``` + +### 8.4. Проверка ссылок переменных на один и тот же объект + +```py + +>>> w=v=10 +>>> w is v +True +>>> w1=['A','B'] +>>> v1=['A','B'] +>>> w1 is v1 +False + +``` + +В начале присваивания двум переменным w и v значения 10 мы храним обе переменные в одной ячейке памяти, затем мы по отдельности присвоили двум этим переменным списки, они хоть и одинаковые, но всё равно переменные по отдельности претерпели изменения -> хранятся в разных ячейках памяти + +## 9. Операции с объектами, выполняемые с помощью методов + +```py + +>>> 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.partition("с") +('Микропроце', 'с', 'сорная система управления') +>>> stroka3.rpartition("с") +('Микропроцессорная си', 'с', 'тема управления') + +``` + +```py + +>>> strk1='Момент времени {}, значение = {}' +>>> strk1.format(1,89.7) +'Момент времени 1, значение = 89.7' +>>> strk2='Момент времени {1}, значение = {0}:{2}' +>>> strk2.format(36.7,2,'норма!') +'Момент времени 2, значение = 36.7:норма!' +>>> strk3='Момент времени {num}, значение = {znch}' +>>> strk3.format(znch=89.7,num=2) +'Момент времени 2, значение = 89.7' + +``` + +### 9.2. Методы для работы со списками. + +```py + +>>> spsk = [1, 'blablabla', 7.0, (1, 2, 3), True] +>>> dir(spsk) +['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__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) +7.0 +>>> spsk.append('c') +>>> spsk +[1, 'blablabla', (1, 2, 3), True, 'c'] +>>> spsk.insert(2,'a') +>>> spsk +[1, 'blablabla', 'a', (1, 2, 3), True, 'c'] +>>> spsk.count('a') +1 + +``` + +1.методом pop() удалили 2-ой эл-т списка (2-ой начиная с нуля) +2.добавили 'c' в конец списка (метод append() всегда добавляет элемент в конец списка) +3.методом insert() на позицию 2 (также начиная с нуля) вставили строку 'a' +4.методом count() посчитали количество вхождений элемента 'a' в список + +### 9.3. Самостоятельно создайте кортеж и изучите применение его методов. + +```py + +>>> mytuple = ('abc', 23, (1, 2, 3), True) +>>> mytuple.count(23) +1 +>>> mytuple.index(23) +1 + +``` + +### 9.4.Cамостоятельно изучите методы словарей и множеств. + +Словари + +```py + +>>> student = { + "name": "Nikita", + "age": 19, + "city": "Moscow", + "courses": ["Math", "Physics"], + "gpa": 2.74 +} +>>> student +{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 2.74} +>>> student.get("name") +'Nikita' +>>> student.keys() +dict_keys(['name', 'age', 'city', 'courses', 'gpa']) +>>> student.values() +dict_values(['Nikita', 19, 'Moscow', ['Math', 'Physics'], 2.74]) +>>> student.update({"gpa": 4.5, "lazy": True}) +>>> student +{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5, 'lazy': True} +>>> student.pop("lazy") +True +>>> student +{'name': 'Nikita', 'age': 19, 'city': 'Moscow', 'courses': ['Math', 'Physics'], 'gpa': 4.5} +>>> student.clear() +>>> student +{} + +``` + +Множества + +```py + +>>> A = {1, 2, 3, 4, 5} +>>> A.add(6) +>>> A +{1, 2, 3, 4, 5, 6} +>>> A.remove(4) +>>> A +{1, 2, 3, 5, 6} +>>> A.pop() +1 +>>> A +{2, 3, 5, 6} +>>> A.clear() +>>> A +set() + +``` + + + + + + + + + + + + + + + + + + + +