# Отчёт по теме 3 Ходюк Максим Романович, А-01-23 # 2. Преобразование простых базовых типов объектов ## 2.1. Преобразование в логический тип с помощью функции bool(<Объект>). Создал 4 переменные логического типа из объектов других типов: ``` logiz1=bool(56) logiz2=bool(0) logiz3=bool("Beta") logiz4=bool("") ``` Результат: ``` logiz1 True logiz2 False logiz3 True logiz4 False ``` ## 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). Попробовал применить примеры использования данной функции: ``` 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 при передавании в неё строки ожидает увидеть там целое число, а "98.76" содержит десятичную точку, из-за чего функция int не может её преобразовать Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>). Примеры: 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. Преобразование десятичных чисел в другие системы счисления ``` hh=123 dv1=bin(hh) #Преобразование в строку с двоичным представлением dv1 '0b1111011' vos1=oct(hh) #Преобразование в строку с восьмеричным представлением vos1 '0o173' shs1=hex(hh) ) #Преобразование в строку с шестнадцатеричным представлением shs1 '0x7b' ``` Проверил правильность преобразования путём обратного преобразования числа в десятичную систему счисления ``` int(dv1,2) 123 int(vos1,8) 123 int(shs1,16) 123 ``` # 3. Изучите преобразования более сложных базовых типов объектов ## 3.1. Преобразование в строку символов с помощью функции str(<Объект>). ``` 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}" ``` ## Преобразование элементов объекта в список с помощью функции 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'] ``` В последней инструкции из словаря в список попали ключи, чтобы создать список значений, применил следующую инструкцию ``` spis3=list({"A":1,"B":2,"C":9}.values()) spis3 [1, 2, 9] ``` ## 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>). Примеры преобразований: ``` kort7=tuple('Строка символов') kort7 ('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в') kort8=tuple(spis2) kort8 (23, 12, 78) kort9=tuple({"A":1,"B":2,"C":9}) kort9 ('A', 'B', 'C') ``` ## 3.4. Удаление объектов. Удалил объекты и убедился в их отсутствии в оперативной памяти ``` del strk5, kort8 strk5 Traceback (most recent call last): File "", line 1, in strk5 NameError: name 'strk5' is not defined. Did you mean: 'strk1'? kort8 Traceback (most recent call last): File "", line 1, in kort8 NameError: name 'kort8' is not defined. Did you mean: 'kort7'? ``` Создал строку со своей фамилией и инициалами, преобразовал её в список,затем в кортёж, а затем в строку: ``` strr="KhoduykMR" lstrr=list(strr) lstrr ['K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R'] klstrr=tuple(lstrr) klstrr ('K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R') strr2=str(klstrr) strr2 "('K', 'h', 'o', 'd', 'u', 'y', 'k', 'M', 'R')" ``` # 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/45 ``` Проверил тип объекта а ``` type(a) ``` ## 4.4. Деление с округлением вниз (//). ``` b=178//45 b 3 c=-24.6//12.1 c -3.0 ``` Попробовал смешанные комбинации типов чисел в этой операции ``` 178//12.1 14.0 -24.6//15 -2.0 ``` ## 4.5. Получение остатка от деления (%). ``` 148%33 16 12.6%3.8 1.2000000000000002 ``` Попробовал применить в этой операции смешанные типы чисел ``` 148%3.8 3.6000000000000068 12.6%33 12.6 12.6%3 0.5999999999999996 ``` ## 4.6. Возведение в степень (**). ``` 14**3 2744 e=2.7**3.6 e 35.719843790663525 ``` Попробовал смешанные типы чисел и в операции возведения в степень ``` 14**3.6 13367.830445904418 2.7**3 19.683000000000003 ``` Попробовал применить операции, представленные в пункте 4, с участием комплексных чисел ``` 14**(3+8j) (-1751.1118980727824+2112.6152324614004j) (3+8j)*14 (42+112j) (3+8j)/(15+883j) (0.009115107563141576-0.0032426652169341747j) (3+8j)//(15+883j) Traceback (most recent call last): File "", line 1, in (3+8j)//(15+883j) TypeError: unsupported operand type(s) for //: 'complex' and 'complex' (3+8j)%(15+883j) Traceback (most recent call last): File "", line 1, in (3+8j)%(15+883j) TypeError: unsupported operand type(s) for %: 'complex' and 'complex' ``` К комплексным числам можно применить все действия, кроме деления с округлением и получения остатка от деления # 5. Операции с двоичными представлениями целых чисел. ## 5.1. Двоичная инверсия (~). При применении двоичной инверсии значение каждого бита в представлении числа меняется на противоположное: ``` dv1=9 dv2=~dv1 dv2 -10 ``` ## 5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел При применении данной команды результат - это число в десятичной системе счисления, которое в двоичной системе счисления представляется как результат побитового совпадения разрядов(то есть 1 в разряде получится только если в этом разряде у обоих сравниваемых чисел стоит 1) ``` 7&9 #111 и 1001 = 0001 1 7&8 #111 и 1000 = 0000 0 ``` ## 5.3. Двоичное «ИЛИ» (|) – побитовое сравнение двоичных представлений чисел Результат также как в предыдущем случае десятичное число, но на этот раз в двоичном представлении у числа будет 0 только если у обоих сравниваемых чисел в этом разряде 0 ``` 7|9 15 7|8 15 14|5 15 ``` ## 5.4. Двоичное «исключающее ИЛИ»(^) - побитовое сравнение двоичных представлений чисел В данной операции получаем 0, если оба сравниваемых разряда имеют одинаковые значения ``` 14^5 11 ``` ## 5.5 Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева. Применение: ``` h=14 g=h<<2 g1=h>>1 g2=h>>2 g 56 g1 7 g2 3 ``` Создал двоичное число с 11 знаками и попробовал к нему применить различные операции ``` hh=1924 #11110000100 gg=hh<<5 gg 61568 gg1=hh>>6 gg1 30 ``` # 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 ('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-') ``` Применил примеры: Создание списка со 100 отсчётами сигнала-ступеньки ``` 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='Система автоматического управления' stroka 'Система автоматического управления' 'автомат' in stroka True 'ку' in ['ку','-']*3 True 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') False ``` ## 6.4. Подстановка значений в строку с помощью оператора «%» Применил пример 1: ``` stroka='Температура = %g %s %g' stroka 'Температура = %g %s %g' stroka % (16,' меньше ',25) 'Температура = 16 меньше 25' ``` Применил пример 2: ``` stroka='Температура = %(zn1)g %(sravn)s %(zn2)g' 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+=' регулирования' stroka 'Система регулирования' ``` Для строк эта операция означает конкатенацию текущего значения с заданным дополнением ## 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=) ``` zz/=2 zz -5.0 zz*=5 zz -25.0 ``` Попробовал данную операцию на строке: она означает повторение текущего значения заданное количество раз ``` stroka*=2 stroka 'Система регулированияСистема регулирования' ``` ## 7.4. Самостоятельное изучение операций (//=), (%=), (**=) ``` zz//=2 zz -13.0 zz%=3 zz 2.0 zz**=4 zz 16.0 ``` ## 7.5. Множественное присваивание ``` w=v=10 w;v 10 10 n1,n2,n3=(11,-3,'all') n1;n2;n3 11 -3 'all' ``` Самостоятельно проверил,можно ли вместо кортежа справа в последней инструкции использовать строку, список, словарь, множество Список: ``` k1,k2,k3=[11,-3,'gfgdg'] k1;k2;k3 11 -3 'gfgdg' ``` Строка: ``` s1,s2,s3='123' s1;s2;s3 '1' '2' '3' ``` Словарь: ``` d1,d2,d3={'Saratov':145, 'Orel':56, 'Vologda':45} d1;d2;d3 'Saratov' 'Orel' 'Vologda' ``` Множество: ``` m1,m2,m3={'двигатель','датчик','линия связи'} m1;m2;m3 'двигатель' 'линия связи' 'датчик' ``` # 8. Логические операции ## 8.1. Операции сравнение Придумал примеры использования операций сравнения и сравнил ранее созданные переменные w и v ``` w==v True w>v False w>=v True 12>2 True 1<7 True w!=v False ``` ## Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in). Применил операции со множеством: ``` mnoz1={'pen','book','pen','iPhone','table','book'} '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 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). Использовал приведённый в методичке пример сложного логического выражения и придумал 2 своих ``` a=17 b=-6 (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1) ((w==v) or (18>234)) and ('pen' in mnoz1) and not (123<1) and (('M' in 'Messi') or ('M' in 'Nicolay')) True not (dct1['Depart'][1] == 'MM') and not (163.5>163.6) and ('Vologda' in dic1) True ``` ## 8.4. Проверка ссылок переменных на один и тот же объект (is). Проверил, что при одновременном присваивании переменные ссылаются на один и тот же объект ``` w=v=10 w is v True ``` После присвоил переменным одинаковые значения, но не одновременным присваиванием,поэтому переменные просто содержат одинаковые значения, но не ссылаются на одну и ту же "ячейку" в опертивной памяти ``` w1=['A','B'] w1 ['A', 'B'] v1=['A','B'] w1 is v1 False ``` # 9.Операции с объектами, выполняемые с помощью методов. Применил функцию dir() для получения списка атрибутов объекта ``` 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 если он не встречается: ``` stroka.find('пр') 5 ``` Подстчет числа вхождений подстрки в строку ``` stroka.count("с") 4 ``` Замена первого вхождения указанной подстроки на вторую подстроку ``` stroka.replace(' у',' автоматического у') 'Микропроцессорная система автоматического управления' ``` Возвращение списка подстрок с заданным разделителем: ``` spis22=stroka.split(' ') ``` Возвращение строки со всеми заглавными буквами: ``` stroka.upper() 'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ' ``` Создание строки, собранной из элементов списка: ``` stroka3=" ".join(spis22) ``` Создание кортежей с результатами поиска "с" слева и "с" справа: ``` stroka3.partition("с") ('Микропроце', 'с', 'сорная система управления') stroka3.rpartition("с") ('Микропроцессорная си', 'с', 'тема управления') ``` Изучение метода format Создал строку и вместо фигурных скобок вставил значения с помощью метода 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.format(znch=89.7,num=2) ``` ## 9.2. Методы для работы со списками. Создал список spsk с 5 элементами, применил к нему следующие методы: ``` spsk=[1,2,'ggwp', 'ss', 'Roman'] spsk [1, 2, 'ggwp', 'ss', 'Roman'] spsk.pop(2) 'ggwp' spsk.append('c') spsk [1, 2, 'ss', 'Roman', 'c'] spsk.insert(2,'a') spsk [1, 2, 'a', 'ss', 'Roman', 'c'] spsk.count('a') 1 ``` Метод pop() удаляет из списка элемент с заданным индексом, метод append() добавляет новый элемент в конец списка insert() вставляет в список перед заданным индексом заданный элемент, а count() подсчитывает число вхождений элемента в список ## 9.3 Методы для работы с кортежами Применил к ранее созданному кортежу методы index и count, первый возвращает индекс первого вхождения элемента в кортёж, а второй подсчитывает число вхождений элемента в кортёж ``` kort1.index(222) 0 kort1.count(222) 1 ``` Методов pop, append и insert у кортежей нет, так как это неизменяемые объекты ## 9.4. Методы словарей и множеств Применил методы для добавления и удаления элементов из множеств: ``` mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'} mnoz1.add('реле') mnoz1 {'датчик', 'линия связи', 'микропроцессор', 'реле', 'двигатель'} mnoz1.remove('линия связи') mnoz1 {'датчик', 'микропроцессор', 'реле', 'двигатель'} ``` Создал словарь и применил к нему методы для: получения списка ключей, получения списка значений, и получения списка из пар ключ/значение ``` student = { "name": "Анна", "age": 20, "course": "Информатика", "grades": [4, 5, 4, 3], "city": "Москва" } student.keys() dict_keys(['name', 'age', 'course', 'grades', 'city']) student.values() dict_values(['Анна', 20, 'Информатика', [4, 5, 4, 3], 'Москва']) student.items() dict_items([('name', 'Анна'), ('age', 20), ('course', 'Информатика'), ('grades', [4, 5, 4, 3]), ('city', 'Москва')]) removed_city = student.pop("city") removed_city 'Москва' ``` # 10. Сохранил отчёт работы и закончил сеанс работы с IDLE