# Отчет по теме 3 ***Цель темы: изучение способов использования объектов разных типов.*** Терехов Фёдор Валерьевич, А-01-23 ## 1. Цель темы: изучение способов использования объектов разных типов. ### 1.1. Преобразование в логический тип с помощью функции bool(<Объект>). ```python logiz1=bool(56) print(f"{logiz1}\n") logiz2=bool(0) print(f"{logiz2}\n") logiz3=bool("Beta") print(f"{logiz3}\n") logiz4=bool("") print(f"{logiz4}\n") ``` Ответ программы: ```shell True False True False ``` ### 1.2. Преобразование в целое десятичное число объекта с заданной системой счисления. *Преобразование в целое десятичное число объекта с заданной системой счисления осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.* ```python tt1=int(198.6) #Отбрасывается дробная часть print(f"{tt1}\n") tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная print(f"{tt2}\n") tt3=int("B",16) print(f"{tt3}\n") tt4=int("71",8) print(f"{tt4}\n") tt5=int("98.76") print(f"{tt5}\n") ``` Ответ программы: ```shell 198 -76 11 57 Traceback (most recent call last): File "/home/user/Desktop/VUZ/3CURSE/POAS_labs/python-labs/TEMA3/task1.py", line 26, in tt5=int("98.76") ^^^^^^^^^^^^ ValueError: invalid literal for int() with base 10: '98.76' ``` *Объясните, почему при выполнении последней инструкции выдано диагностическое сообщение.* "98.76" - это строка. Функция int принимает либо строку с целым числом, либо число с точкой, но не строку с числом с точкой. Вариант решения - использовать функцию float(), которая преобразует строку в вещественное число, а затем функцию int() для преобразование в целое: ```python tt5=int(float("98.76")) print(f"{tt5}\n") ``` Ответ программы: ```shell 98 ``` *Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).* ```python flt1=float(789) print(f"{flt1}\n") flt2=float(-6.78e2) print(f"{flt2}\n") flt3=float("Infinity") print(f"{flt3}\n") flt4=float("-inf") print(f"{flt4}\n") ``` Ответ программы: ```shell 789.0 -678.0 inf -inf ``` ### 1.3. Преобразование десятичных чисел в другие системы счисления. ```python hh=123 dv1=bin(hh) #Преобразование в строку с двоичным представлением print(f"{dv1}\n") vos1=oct(hh) # Преобразование в строку с восьмеричным представлением print(f"{vos1}\n") shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением print(f"{shs1}\n") ``` Ответ программы: ```shell 0b1111011 0o173 0x7b ``` *Для проверки выполним обратные преобразования объектов dv1, vos1, shs1 по образцу int(dv1,2):* ```python print(f"{int(dv1, 2)}\n") print(f"{int(vos1, 8)}\n") print(f"{int(shs1, 16)}\n") ``` Ответ программы: ```shell 123 123 123 ``` ## 2. Преобразование более сложных базовых типов объектов. ### 2.1. Преобразование в строку символов с помощью функции str(<Объект>). ```python strk1=str(23.6) print(f"{strk1}\n") strk2=str(logiz3) print(f"{strk2}\n") strk3=str(["A","B","C"]) #Преобразуем список print(f"{strk3}\n") strk4=str(("A","B","C")) #Преобразуем кортеж print(f"{strk4}\n") strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь print(f"{strk5}\n") ``` Ответ программы: ```shell 23.6 True ['A', 'B', 'C'] ('A', 'B', 'C') {'A': 1, 'B': 2, 'C': 9} ``` ### 2.2. Преобразование элементов объекта в список с помощью функции list(<Объект>). ```python spis1=list("Строка символов") #Заданная строка разделяется на символы print(f"{spis1}\n") spis2=list((124,236,-15,908)) #Кортеж превращается в список print(f"{spis2}\n") spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список print(f"{spis3}\n") ``` Ответ программы: ```shell ['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в'] [124, 236, -15, 908] ['A', 'B', 'C'] ``` *Обратите внимание на то, что из словаря попало в созданный список. Придумайте инструкцию, обеспечивающую создание из того же словаря списка с другими его частями.* list(словарь) берёт только ключи словаря. **.items()** — это метод словаря, который даёт представление (view) пар (ключ, значение). Возвращает не список, а объект-«вид» (dict_items). Он живой: если словарь меняется, меняется и этот вид. ```python spis3=list({"A":1,"B":2,"C":9}.items()) #Преобразование словаря в список print(f"{spis3}\n") ``` Ответ программы: ```shell [('A', 1), ('B', 2), ('C', 9)] ``` ### 2.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>). ```python kort7=tuple('Строка символов') #Преобразование строки символов в кортеж8 print(f"{kort7}\n") kort8=tuple(spis2) #Преобразование списка в кортеж print(f"{kort8}\n") kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж print(f"{kort9}\n") ``` Ответ программы: ```shell ('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в') (124, 236, -15, 908) ('A', 'B', 'C') ``` ### 2.4. Удаление объектов. *Очистить оперативную память от ранее созданных объектов можно с помощью инструкции del.* ```python print(f"Объекты в пространстве до удаления:\n{dir()}\n") del strk5, kort8 print(f"Объекты в пространстве после удаления:\n{dir()}\n") ``` Ответ программы: ```shell Объекты в пространстве до удаления: ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'kort7', 'kort8', 'kort9', 'logiz3', 'spis1', 'spis2', 'spis3', 'strk1', 'strk2', 'strk3', 'strk4', 'strk5'] Объекты в пространстве после удаления: ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'kort7', 'kort9', 'logiz3', 'spis1', 'spis2', 'spis3', 'strk1', 'strk2', 'strk3', 'strk4'] ``` ### Задание. *Создайте строку со своей фамилией и инициалами, преобразуйте её в список, затем список – в кортеж и, наконец, кортеж – в строку.* ```python name="TerekhovFV" print(f"{name}\n{type(name)}\n") list_name=list(name) print(f"{list_name}\n{type(list_name)}\n") tuple_name=tuple(list_name) print(f"{tuple_name}\n{type(tuple_name)}\n") string_name=str(tuple_name) print(f"{string_name}\n{type(string_name)}\n") ``` Ответ программы: ```shell TerekhovFV ['T', 'e', 'r', 'e', 'k', 'h', 'o', 'v', 'F', 'V'] ('T', 'e', 'r', 'e', 'k', 'h', 'o', 'v', 'F', 'V') ('T', 'e', 'r', 'e', 'k', 'h', 'o', 'v', 'F', 'V') ``` ## 3. Арифметические операции. ### 3.1. Сложение и вычитание (+ и -). ```python print(12+7+90) # Сложение целых чисел print(5.689e-1 - 0.456) #Вычитание вещественных чисел print(23.6+54) #Сложение вещественного и целого чисел print(14-56.7+89) # Сложение и вычитание целых и вещественных чисел ``` Ответ программы: ```shell 109 0.11289999999999994 77.6 46.3 ``` ### 3.2. Умножение (*). ```python print(-6.7*12) #Умножение вещественного числа на целое число ``` Ответ программы: ```shell -80.4 ``` ### 3.3. Деление (/). ```python print(-234.5/6) #Деление вещественного числа на целое a=178/45 #Деление двух целых чисел print(f"a={a}\n{type(a)}\n") ``` Ответ программы: ```shell -39.083333333333336 a=3.9555555555555557 ``` ### 3.4. Деление с округлением вниз (//). *Здесь результат может быть целым или вещественным.* ```python b=178//45 #Деление двух целых чисел print(f"b={b}\n{type(b)}\n") c=-24.6//12.1 #Деление двух вещественных чисел print(f"c={c}\n{type(c)}\n") ``` Ответ программы: ```shell b=3 c=-3.0 ``` *Самостоятельно попробуйте смешанные комбинации типов чисел в этой операции.* ```python b=b//c print(f"b={b}\n{type(b)}\n") c=c//int(b) print(f"c={c}\n{type(c)}\n") ``` Ответ программы: ```shell b=-1.0 c=3.0 ``` **Значит если хотя бы одно из чисел вещественное, то ответ будет вещественным.** ### 3.5. Получение остатка от деления (%). ```python print(148%33) #Остаток от деления двух целых чисел print(12.6%3.8) #Остаток от деления двух вещественных чисел ``` Ответ программы: ```shell 16 1.2000000000000002 ``` *Самостоятельно попробуйте смешанные комбинации типов чисел в этой операции.* ```python print(1%0.3) print(3.0%1) ``` Ответ программы: ```shell 0.10000000000000003 0.0 ``` **Значит если хотя бы одно из чисел вещественное, то ответ будет вещественным.** ### 3.6. Возведение в степень (**). ```python print(14**3) #Целое число возводится в целую степень e=2.7**3.6 #Вещественное число возводится в вещественную степень print(e) ``` Ответ программы: ```shell 2744 35.719843790663525 ``` *Самостоятельно попробуйте смешанные комбинации типов чисел в этой операции.* ```python print(4**2.5) print(4.0**2) ``` Ответ программы: ```shell 32.0 16.0 ``` **Значит если хотя бы одно из чисел вещественное, то ответ будет вещественным.** ### Задание. *Попробуйте операции с участием комплексных чисел. Какие из приведенных выше операций можно применять к комплексным числам, а какие – нет?* * Классические сложение, вычитание, умножение, деление: ```python print((5-9j)+(2+5j)) print((5-9j)-(2+5j)) print((5-9j)*(2+5j)) print((5-9j)/(2+5j)) ``` Ответ программы: ```shell (7-4j) (3-14j) (55+7j) (-1.206896551724138-1.4827586206896552j) ``` * Остаток от деления: ```python print((5-9j)%(2+5j)) ``` Ответ программы: ```shell Traceback (most recent call last): File "/home/user/Desktop/VUZ/3CURSE/POAS_labs/python-labs/TEMA3/task3.py", line 46, in print((5-9j)%(2+5j)) ~~~~~~^^~~~~~ TypeError: unsupported operand type(s) for %: 'complex' and 'complex' ``` **Нельзя получить остаток от деления компексных чисел.** * Деление с округлением в меньшую сторону: ```python print((5-9j)//(2+5j)) ``` Ответ программы: ```shell Traceback (most recent call last): File "/home/user/Desktop/VUZ/3CURSE/POAS_labs/python-labs/TEMA3/task3.py", line 47, in print((5-9j)//(2+5j)) ~~~~~~^^~~~~~~ TypeError: unsupported operand type(s) for //: 'complex' and 'complex' ``` * Возведение в степень: ```python print((5-9j)**(2+5j)) ``` Ответ программы: ```shell (-21509.595911266613-2297.8216985074932j) ``` **Можно комплексное число возвести в комплексную степень.** ***Нетрудно заметить, что в результате операции над числами разных типов получается число, имеющее наиболее сложный тип из тех типов, которые участвуют в операции.***