# Отчёт по теме 2 (Базовые типы объектов) Киреев Юрий, А-02-23 ## 1. Подготовка к работе Запустил оболочку IDLE. Установил рабочий каталог. ```py >>> import os >>> os.chdir ("c:\\Users\\user\\Desktop\\ПОАС\\python-labs\\TEMA2\\") ``` Вместо создания файла отчёта через текстовый редактор IDLE, использую этот файл формата .md ## 2. Изучение простых объектов Рассмотрим операции присваивания переменным: ```py >>> f1=16;f2=3 >>> f1,f2 (16, 3) >>> f1;f2 16 3 ``` Для того, чтобы узнать, какие объекты уже существуют в данный момент в среде Python (в пространстве имен), использовал функцию dir без аргументов: ```py >>> dir() ``` Результат: ```py ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os'] ``` Можно получить список атрибутов любого объекта, на примере f1: ![Использование функции dir](figure0.png) Для определения классовой принадлежности любого объекта использовал функцию type(): ```py >>> type(f2) ``` Результат: ```py ``` Удалим объекты f1, f2 из оперативной памяти: ```py >>> del f1,f2 ``` Проверим: ```py >>> dir() ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os'] ``` ## 3. Правила именования объектов в Python Правила именования: ```py - имена должны состоять из латинских букв, цифр и символов подчеркивания; - имена должны начинаться с латинской буквы (иногда могут начинаться с символа подчеркивания, но это – особый вид переменных); - имена не должны совпадать с ключевыми словами и встроенными идентификаторами языка Python; - большие и малые буквы в именах различаются (имена – чувствительные к регистру)! ``` Попробовал несколько примеров именования объектов: ![Примеры именования объектов](figure1.png) Переменные ggl и hhl названы по правилам именования, остальные же получили диагностическое сообщение. 73sr - недопустимо, т.к. начинается с цифры. and - недопустимо, т.к. совпадает с ключевым словом 'and' ## 4. Список ключевых слов Вывел список ключевых слов: ```py >>> import keyword >>> keyword.kwlist ``` Результат: ```py ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] ``` Сохранил этот список в переменной spisok ```py >>> spisok=keyword.kwlist >>> spisok ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] ``` ## 5. Встроенные идентификаторы Вывел список встроенных идентификаторов: ![Список встроенных идентификаторов](figure2.png) Изучил назначение некоторых функций из списка и попробовал их применить: ![Часть 1](figure31.png) ![Часть 2](figure32.png) ![Часть 3](figure33.png) ## 6. Регистр Малые и большие буквы в именах объектов различаются. Это видно на проделанном примере: ```py >>> Ggl=45 >>> ggl, Ggl (1.6, 45) ``` ## 7. Базовые типы объектов ### 7.1. Логический Зададим логические переменные: ```py >>> bb1=True; bb2=False >>> bb1;bb2 True False ``` Проверим тип объекта: ```py >>> type(bb1) ``` Результат: ```py ``` ### 7.2. Другие простые типы Аналогичным способом изучил другие типы: ![Другие типы](figure4.png) Как мы видим, двоичное число имеет тип integer. ### 7.3. Строка символов Строки можно заключать в апострофы или в двойные кавычки: ```py >>> ss1= 'Это - строка символов' >>> ss1 'Это - строка символов' >>> ss1= "Это - строка символов" >>> ss1 'Это - строка символов' ``` Используем внутри строки экранированные последовательности: ```py >>> ss1a= "Это -\" строка символов\", \n \t выводимая на двух строках" >>> print(ss1a) ``` Результат: ```py Это -" строка символов", выводимая на двух строках ``` Создадим строку по шаблону: ```py >>> ss1b = 'Меня зовут: \n Киреев Ю.П.' >>> ss1b 'Меня зовут: \n Киреев Ю.П.' >>> print(ss1b) Меня зовут: Киреев Ю.П. ``` Зададим многострочную строку с использованием тройных кавычек: ```py >>> mnogo = """Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые участвуют в операции.""" >>> print(mnogo) ``` Результат: ```py Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые участвуют в операции. ``` Обратимся к частям строки символов с использованием индексов по их порядку в строке: ```py >>> ss1[0] 'Э' >>> ss1[8] 'р' >>> ss1[-2] 'о' ``` Применим разрез: ```py >>> ss1[6:9] 'стр' >>> ss1[13:] 'символов' >>> ss1[:13] 'Это - строка ' >>> ss1[5:-8] ' строка ' >>> ss1[3:17:2] ' тоасм' >>> ss1[17:3:-2] 'омсаот ' >>> ss1[-4:3:-2] 'омсаот ' ``` Попробуем поменять символ в строке: ```py >>> ss1[4]='=' Traceback (most recent call last): File "", line 1, in ss1[4]='=' TypeError: 'str' object does not support item assignment ``` Попробуем по-другому: ```py >>> ss1=ss1[:4]+'='+ss1[5:] >>> ss1 'Это = строка символов' ``` Тирэ сменилось на знак равенства. Самостоятельно совершил некоторые действия со строкой ss1b и создал несколько новых объектов: ![Самостоятельные действия](figure5.png) ## 8. Сложные типы объектов ### 8.1. Список Список – это последовательность: упорядоченная по местоположению коллекция объектов произвольных типов, размер которых практически не ограничен. В отличие от символьных строк, списки являются изменяемыми последовательностями, т.е. их элементы могут изменяться с помощью операций присваивания. Приведу пример списка с 3 элементами разных типов: ```py >>> spis1=[111, 'Spisok',5-9j] >>> spis1 [111, 'Spisok', (5-9j)] ``` Cоздадим список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»: ```py >>> stup=[0,0,1,1,1,1,1,1,1] >>> stup [0, 0, 1, 1, 1, 1, 1, 1, 1] ``` Введём список на нескольких строках: ```py >>> spis=[1,2,3,4, 5,6,7, 8,9,10] >>> spis [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ``` Индексы в списках можно использовать также, как и в строках. Покажем на примерах: ```py >>> spis1[-1] (5-9j) >>> stup[-8::2] [0, 1, 1, 1] ``` Проверим возможность изменения списка: ```py >>> spis1[1]='Список' ``` Результат: ```py >>> spis1 [111, 'Список', (5-9j)] ``` Список изменился. Длина списка: ```py >>> len(spis1) 3 ``` Найдём описание метода объекта с помощью функции help() ```py >>> help(spis1.append) Help on built-in function append: append(object, /) method of builtins.list instance Append object to the end of the list. ``` Добавим в конец списка элемент "New item" ```py >>> spis1.append('New item') >>> spis1 [111, 'Список', (5-9j), 'New item'] ``` Попробуем использовать конкатенацию: ```py >>> spis1+['New item'] [111, 'Список', (5-9j), 'New item', 'New item'] >>> spis1 [111, 'Список', (5-9j), 'New item'] ``` Видим, что в этой инструкции новый список только отображается, но не сохраняется. Добавим в конец списка spis1 строку ss1b и отобразим список. ```py >>> spis1.append(ss1b) >>> spis1 [111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Киреев Ю.П.'] ``` Удалим элемент из списка: ```py >>> spis1.pop(1) 'Список' >>> spis1 [111, (5-9j), 'New item', 'Меня зовут: \n Киреев Ю.П.'] ``` Воспользуемся иными различными методами: ![Методы со списками](figure6.png) Попробуем создать вложенный список: ```py >>> spis2=[spis1,[4,5,6,7]] >>> spis2 [[(5-9j), 52, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]] ``` Обратимся к элементу списка spis1 ```py >>> spis2[0][1] 52 ``` Изменим элемент вложенного списка: ```py >>> spis2[0][1]=78 >>> spis2 [[(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]] ``` Объект spis1 также изменился. Элементы вложенного списка меняются сами по себе, если изменять их во вложенном списке. Придумал собственный объект-список: ```py >>> spisxxx = [boolobj, spis2, ggl, ss1] >>> spisxxx [True, [[(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10'], [4, 5, 6, 7]], 1.6, 'Это = строка символов'] ``` ### 8.2. Кортеж Объект-кортеж похож на список, но его нельзя изменить – кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. В отличие от списка литерал кортежа заключается в круглые, а не в квадратные скобки. Кортежи также поддерживают включение в них объектов различных типов и операции, типичные для последовательностей. Создадим кортеж: ```py >>> kort1=(222,'Kortezh',77+8j) >>> kort1 (222, 'Kortezh', (77+8j)) ``` Проведём несколько операций с кортежем и попробуем 2 важных метода: ![Операции с кортежами](figure7.png) Попробуем операцию замены элемента кортежа: ```py >>> kort1[2]=90 Traceback (most recent call last): File "", line 1, in kort1[2]=90 TypeError: 'tuple' object does not support item assignment ``` Создадим собственный кортеж: ```py >>> kortxxx=(kort1, ggl, ss1, spis1) >>> kortxxx ((222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Киреев Ю.П.'), 1.6, 'Это = строка символов', [(5-9j), 78, 'New item', 'Меня зовут: \n Киреев Ю.П.', 5252, 525252, '52*10']) ``` ### 8.3. Объект-словарь Объект-словарь похож на ассоциативные массивы в других языках программирования. Его содержанием является совокупность пар: «ключ (key)»:«значение (value)». В качестве ключей могут использоваться неизменяемые типы объектов. Значениями могут быть объекты любого типа. Ссылка на ключ обеспечивает быстрый доступ к связанному с ним значению. В отличие от списков и кортежей совокупность элементов словаря не является упорядоченной (последовательностью). Его элементы могут изменяться с помощью операции присваивания значений. Создадим словарь: ```py >>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45} >>> dic1 {'Saratov': 145, 'Orel': 56, 'Vologda': 45} ``` Пример обращения по ключам: ```py >>> dic1['Orel'] 56 ``` Пополним словарь: ```py dic1['Pskov']=78 dic1 {'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78} ``` Отсортируем словарь по ключам и по значениям и выведем их: ```py >>> sorted(dic1.keys()) ['Orel', 'Pskov', 'Saratov', 'Vologda'] >>> sorted(dic1.values()) [45, 56, 78, 145] ``` Покажем что элементы словаря могут сами быть словарями и к ним можно обращаться: ```py >>> dic2={1:'mean',2:'standart deviation',3:'correlation'} >>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']} >>> dic3['statistics'][2] 'standart deviation' ``` Создадим более сложные словари: ```py >>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)]) >>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b])) ``` Придумываем объект-кортеж по заданию: ```py >>> keys_tuple = ('name', 'age', 'city', 'country', 'language', 'hobby', 'skill') >>> values_list = ['Anna', 25, 'Moscow', 'Python', 'reading'] >>> result_dict = dict(zip(keys_tuple, values_list)) >>> result_dict {'name': 'Anna', 'age': 25, 'city': 'Moscow', 'country': 'Python', 'language': 'reading'} ``` Мы видим в получившемся словаре 5 элементов, а не 7. Это случилось потому, что число элементов у кортежа и списка не совпадает, соответственно у получившегося кортежа будет число элементов, равное минимальному числу элементов его составляющих. Пример словаря с описанием состава студентов: ```py >>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]} >>> AVTI['Курс III'][5] 15 ``` ### 8.4. Объект-множество Объект-множество – это неупорядоченная совокупность неповторяющихся элементов. Эти эле-менты могут быть разных, но только неизменяемых типов (числа, строки, кортежи). Создадим множество: ```py >>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'} >>> mnoz1 {'микропроцессор', 'линия связи', 'датчик', 'двигатель'} ``` Лишние дубликаты были автоматически удалены. Проведем некоторые операции с множеством: ```py >>> len(mnoz1) 4 >>> 'датчик' in mnoz1 True >>> mnoz1.add('реле') >>> mnoz1.remove('линия связи') >>> mnoz1 {'микропроцессор', 'датчик', 'двигатель', 'реле'} ``` Придумал объект-множество: ```py >>> mnozhestvo = {42, "hello", 3.14, True, (1, 2, 3)} >>> mnozhestvo.add("new 52") >>> mnozhestvo.remove(3.14) >>> mnozhestvo {True, 'new 52', 42, (1, 2, 3), 'hello'} >>> True in mnozhestvo True ``` ## 9. Сохранил файл отчёта и закончил сеанс работы с IDLE.