# Отчет по теме 3 Ефремов Станислав, А-02-23 ## 1. Запуск. ### 1.1 Запуск оболочки IDLE и установка рабочего каталога. ```py import os os.chdir('C:\Program Files (x86)\учёха 3 курс\pythonsky\python-labs\TEMA3') ``` ## 2. Преобразование простых базовых типов объектов. ### 2.1 Логический тип. ```py logiz2 = bool(0) logiz1 = bool(56) logiz3=bool("Beta") logiz4=bool("") ``` ### 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' ``` Значение tt5 не может быть преобразовано командой вида int(), т.к. хоть и представлено в виде строки, но всё равно относится к вещественным числам. #### Преобразование с помощью функции float ```py >>> flt1=float(789) >>> flt1 789.0 >>> flt2=float(-6.78e2) >>> flt2 -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 Преобразование в строку символов ```py >>>strk1=str(23.6) >>>strk1 '23.6' >>>strk2=str(logiz3) >>>strk2 'True' >>>strk3=str(["A","B","C"]) - #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'] >>> spis3=list({"A":1,"B":2,"C":9}.values()) #вывод значений списка >>> spis3 [1, 2, 9] >>> spis3=list({"A":1,"B":2,"C":9}.items()) #вывод ключей-значений >>> spis3 ``` ### 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 Очистка оперативной памяти ```py >>> del kort8 >>> kort8 Traceback (most recent call last): File "", line 1, in kort8 NameError: name 'kort8' is not defined. Did you mean: 'kort7'? ``` ```py >>> fam = ('Efremov S.I') >>> spisfam = spis(fam) >>> spisfam = list(fam) >>> kortfam = tuple(spisfam) >>> strfam = str(kortfam) >>> strfam "('E', 'f', 'r', 'e', 'm', 'o', 'v', ' ', 'S', '.', 'I')" >>> type(strfam) ``` ## 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) ``` Тип полученной переменной является вещественным. ### 4.4. Округление вниз(//). ```py >>> b=178//45 >>> c=-24.6//12.1 >>> type(b) >>> type(c) >>> b 3 >>> c -3.0 d = 24.6//3 type(d) d = 24//3.6 type(d) ``` Переменная приобретает вещественный тип, если при операции деления есть хотя бы одно вещественное значение. ### 4.5. Остаток от деления: ```py >>> 148%33 16 >>> 12.6%3.8 1.2000000000000002 >>> 148.3%33 16.30000000000001 >>> 148%33.3 14.800000000000011 ``` ### 4.6. Возведение в степень: ```py >>> 14**3 2744 >>> e=2.7**3.6 >>> e 35.719843790663525 ``` #### Повторим предложенные операции, но уже с комплексными числами: ```py >>> po = 10 + 10j >>> ac = 20 + 20j >>> po + ac (30+30j) >>> po - ac (-10-10j) >>> po * ac 400j po / ac (0.5+0j) po//ac Traceback (most recent call last): File "", line 1, in po//ac TypeError: unsupported operand type(s) for //: 'complex' and 'complex' po%ac Traceback (most recent call last): File "", line 1, in po%ac TypeError: unsupported operand type(s) for %: 'complex' and 'complex' po**ac (1.4066000837528672e+16-6347426866104395j) ``` Важно заметить, что операции деления с округлением вниз и определения остатка провести нельзя! ## 5. Двоичное представление чисел. ### 5.1. Двойная инверсия ```py >>>dv1=9 >>>dv2=~dv1 >>>dv2 -10 ``` ### 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 #десятичное >>> bin(11) '0b1011' #двоичное ``` ### 5.5 Сдвиг двоичного представления влево и вправо. ```py >>>h=14 >>>g=h<<2 >>>g 56 >>>g1=h>>1 >>>g1 7 >>>g2=h>>2 >>>g2 3 ``` ### 5.6. Действия с двумя двоичными числами ```py a = 0b10110101 b = 0b01101011 c=~a bin(c) '-0b10110110' bin(a&b) '0b100001' bin(a|b) '0b11111111' bin(a^b) '0b11011110' d=a<<2 bin(d) '0b1011010100' e=b>>2 bin(e) '0b11010' ``` ## 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 #Повторение строки 5 раз 'ля-ля-ля-ля-ля-' >>>['ку','-']*3 #Повторение списка 3 раза ['ку', '-', 'ку', '-', 'ку', '-'] >>>('кис','-')*4 #Повторение кортежа 4 раза ('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-') >>>signal1=[0]*3+[1]*99 >>>signal2=(0,)*3+(1,)*5+(0,)*7 >>>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, 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' >>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g' >>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25} 'Температура = 16 меньше 25' ``` ## 7. Изучение оператора присваивания. ### 7.1 - 7.3. Обычное присваивание, увеличение, умножение и деление соответственно. ```py >>> zz=-12 >>> zz+=5 >>> zz -7 >>> zz-=3 >>> zz -10 >>> stroka='Система' >>> stroka+=' регулирования' >>> stroka 'Система регулирования' >>> zz/=2 #деление на текущую величину >>> zz*=5 >>> zz -25.0 >>> zzz = 12 >>> zzz *=12 #повторение >>> zzz 144 ``` ### 7.4. Деление с округлением вниз, остаток от деления и возведение в степень. ```py >>> chislo = 10 >>> chislo //=5 >>> chislo 2 >>> chislo = 10 >>> chislo %=3 >>> chislo 1 >>> chislo = 10 >>> chislo **=2 >>> chislo 100 ``` ### 7.5 Присваивание ```py >>> w=v=10 >>> n1,n2,n3=(11,-3,'all') >>> n1 11 >>> n2 -3 >>> n3 'all' >>> w, v (10, 10) n1,n2,n3="all" #из строки n1 'a' n2 'l' n3 'l' n1,n2,n3=[11,-3,'all'] #из списка n1 11 n2 -3 n3 'all' n1,n2,n3 = {"a": 11, "b": -3, "c": "all"} #из словаря (ключи) n1 'a' n2 'b' n3 'c' r = {"a": 11, "b": -3, "c": "all"} #из словаря (значения) n1,n2,n3 = r.values() n1 11 n2 -3 n3 'all' n1,n2,n3 = {11, -3, 'all'} #из множества(порядок не гарантирован) n1 11 n2 -3 n3 'all' ``` ## 8. Логические операции. ### 8.1. Операции сравнения: ```py >>> w==v #равенство True >>> w!=v #неравенство False >>> 9<10 #меньше True >>> 9>10 #больше 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 not (a==b) and not ('Moscow' in dic1) and not ('iPhone' in mnoz1) False not (a==b) and not ('Moscow' in dic1) and not ('XIAOMI' in mnoz1) True ``` ### 8.4. Ссылки переменных. ```py >>> w=v=10 >>> w is v True >>> v is w True >>> w1=['A','B'];v1=['A','B'] >>> w1, v1 (['A', 'B'], ['A', 'B']) >>> w1 is v1 False >>> v1 is w1 False ``` А всё потому что оператор is проверяет, являются ли переменные одним и тем же объектом в памяти, а не то, одинаковые ли у них значения. Пример ниже: ```py >>> v1 = w1 >>> v1 is w1 True >>> w1=['A','B'];v1=['A','B'] >>> w1==v1 True >>> w1 is v1 False ``` ## 9. Методы. Просмотрим список всех атрибутов объекта: ```py >>> stroka='Микропроцессорная система управления';dir(stroka) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] ``` ### 9.1. Методы в строках. ```py >>> stroka.find('пр') 5 >>> stroka.count("с") 4 >>> stroka.replace(' у',' автоматического у') 'Микропроцессорная система автоматического управления' >>> spis22=stroka.split(' ') >>> spis22 ['Микропроцессорная', 'система', 'управления'] >>> stroka.upper() 'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ' >>> stroka3=" ".join(spis22) >>> stroka3.partition("с") ('Микропроце', 'с', 'сорная система управления') stroka3.partition("с") ('Микропроце', 'с', 'сорная система управления') stroka3.rpartition("с") ('Микропроцессорная си', 'с', 'тема управления') ``` #### Метод format. ```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 = ['kfc','mcdonalds','burgerking','teremok',20] >>> type(spsk) >>> 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) #удаление элемента из списка 'burgerking' >>> spsk ['kfc', 'mcdonalds', 'teremok', 20] >>> spsk.append('c') #добавление нового элемента в конец списка >>> spsk ['kfc', 'mcdonalds', 'teremok', 20, 'c'] >>> spsk.insert(2,'a') #добавление элемента на место под определенным индексом >>> spsk ['kfc', 'mcdonalds', 'a', 'teremok', 20, 'c'] >>> spsk.count('a') #пересчёт элементов 'a' в списке 1 ``` ### 9.3. Методы кортежа. ```py >>> kortezh = (1, 2, 3, 4) >>> type(kortezh) >>> dir(kortezh) ['__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'] >>> kortezh.count(1) #подсчёт элемента '1' 1 >>> kortezh.index(4) #выводит индекс заданного элемента 3 ``` ### 9.4 Методы словаря и кортежа. #### Словарь. ```py >>> slovar = {'A':1, 'B':2, 'C':3} >>> type(slovar) d >>> dir(slovar) ['__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'] >>> slovar.pop('A') #удаление элемента 1 >>> slovar {'B': 2, 'C': 3} >>> slovar.items() dict_items([('B', 2), ('C', 3)]) >>> slovar.keys() dict_keys(['B', 'C']) >>> slovar.values() dict_values([2, 3]) #### Множество. ```py >>> mno = {1, 2, 3, 4} >>> type(mno) >>> dir(mno) ['__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'] >>> mno.add(5) #добавление >>> mno {1, 2, 3, 4, 5} >>> mno.remove(5) #удаление >>> mno {1, 2, 3, 4} >>> mno.clear() #очищение >>> mno set() ``` ## 10. Конец сеанса работы с IDLE.