Методичка. Методические указания по ПО АС_очники. Методические указания к проведению занятий по дисциплине " Программное обеспечение автоматизированных систем" Москва 2018
Скачать 0.59 Mb.
|
Тема 2. Базовые типы объектовЦель темы: изучение применения простых конструкций языка Python в операциях с данными. Запустите оболочку IDLE. Установите рабочий каталог. Откройте окно текстового редактора. В первой строке напишите комментарий с текстом: « Протокол по Теме 2 <ФИО студента>». Сохраните содержимое окна редактора в своем рабочем каталоге с именем файла протокола, требуемым по Регламенту выполнения заданий. В ходе выполнения дальнейшей работы все корректно выполненные инструкции и результаты их выполнения записывайте в этот текстовый файл. Все переменные являются объектами. Объект характеризуется именем, типом (классом) и набором атрибутов. Базовые типы не требуют сложного определения, они определяются в момент создания объекта в зависимости от присваиваемого им значения. Существуют ещё пользовательские типы объектов, которые будут изучены в теме 9. Сначала изучите простые объекты. Рассмотрите операции присваивания значения объектам-переменным f1=16; f2=3 Для того, чтобы узнать, какое значение имеет переменная, достаточно перечислить их имена в строке, разделяя их знаком «,» (запятая) или «;» (точка с запятой) : f1,f2 f1;f2 Для того, чтобы узнать, какие объекты уже существуют в данный момент в среде Python (в пространстве имен), используйте функцию dir без аргументов: dir() Для получения списка атрибутов любого объекта используйте ту же функцию dir, с аргументами – именами интересующих объектов, например, dir(f1) Для определения классовой принадлежности любого объекта следует использовать функцию type: type(f2) Для удаления объекта или его части из оперативной памяти используйте инструкцию del, например, del f1,f2 Проверьте, остались ли эти объекты в памяти. Изучите правила именования объектов в Python. Правила именования: имена должны состоять из латинских букв, цифр и символов подчеркивания; имена должны начинаться с латинской буквы (иногда могут начинаться с символа подчеркивания, но это – особый вид переменных); имена не должны совпадать с ключевыми словами и встроенными идентификаторами языка Python; большие и малые буквы в именах различаются (имена – чувствительные к регистру)! С учетом этих правил в командном окне IDLE выполните следующие операции (если после ввода инструкции не появляется диагностическое сообщение, убедитесь, что переменная получила введенное значение): gg1=1.6 #значение в виде вещественного числа hh1='Строка' #значение в виде символьной строки 73sr=3 #неправильное имя – начинается с цифры - будет диагностика! and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика! Выведите список ключевых слов с помощью инструкции import keyword keyword.kwlist Просмотрите список, сохраните его в переменной с некоторым именем. Выведите список встроенных идентификаторов с помощью инструкций import builtins dir(builtins) Обратите внимание на имена встроенных функций в выведенном списке. Можно отметить, что в нем присутствуют уже использованные функции type и dir. Изучите назначение функций: abs, len, max, min, next, pow, round, sorted, sum, zip. Для этого получите помощь по функциям и попробуйте их применить. Убедитесь, что малые и большие буквы в именах объектов различаются. Для этого присвойте значение Gg1=45 и выведите значения переменных gg1 и Gg1. Изучите простые базовые типы объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str). При этом используйте следующие инструкции Логический тип. bb1=True; bb2=False bb1;bb2 type(bb1) #функция, показывающая тип (класс) объекта <class 'bool'> Другие простые типы Аналогичным образом изучите другие типы: ii1=-1234567890 ff1=-8.9876e-12 #экспоненциальная форма записи вещественного числа dv1=0b1101010 #Это – двоичное число. В объекте какого класса оно сохранено? vsm1=0o52765 #Это – восьмеричное число shest1=0x7109af6 #Это – шестнадцатеричное число cc1=2-3j a=3.67; b=-0.45 cc2=complex(a,b) #Создается комплексное число Строка символов ss1='Это - строка символов' Строки можно заключать в апострофы или в двойные кавычки: ss1="Это - строка символов" Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \\, \', \", \t, \n и другие. Пример: ss1a="Это - \" строка символов \", \n \t выводимая на двух строках" print(ss1a) Создайте строку по шаблону: ss1b= 'Меня зовут: \n <сюда вставьте свою фамилию и инициалы>' Выведите получившуюся строку на экран. Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например, mnogo="""Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые участвуют в операции.""" print(mnogo) Нетрудно заметить , что в результате операции над числами разных типов получается число, имеющее более сложный тип из тех, которые участвуют в операции. При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки. Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например, ss1[0] #Это – символ «Э» ss1[8] #А это – символ «р» ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки) Операция «разрезания» или «создания среза», создающая новый объект: ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!) ss1[13:] #Это часть строки – с 13-го индекса и до конца ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2 Обратите внимание на то, что в срезе указываются на позиции элементов, а их индексы и что указываемая правая граница в срез не включается. Самостоятельно посмотрите, что получится при отрицательном значении шага: ss1[17:3:-2] Проверьте, можно ли здесь 17 заменить на -4 и получить такой же результат? Строка является неизменяемым объектом. Попробуйте, например, инструкцию ss1[4]='=' # Будет диагностика! Однако, можно это сделать по-другому, переопределив строку: ss1=ss1[:4]+'='+ss1[5:] С использованием ранее созданной строки ss1b попробуйте создать объекты с разными срезами исходной строки. Самостоятельно придумайте значения и создайте объекты разных типов. После этого отобразите типы и значения созданных объектов. В языке Python имеются также типы объектов bytes и bytearray, которые здесь рассматриваться не будут. Изучите более сложные типы объектов: списки (list), кортежи (tuple), словари (dict), множества (set). Список – это последовательность: упорядоченная по местоположению коллекция объектов произвольных типов, размер которых практически не ограничен. В отличие от символьных строк, списки являются изменяемыми последовательностями, т.е. их элементы могут изменяться с помощью операций присваивания. Пример списка с 3 элементами разных типов: spis1=[111,'Spisok',5-9j] Еще пример: список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»: stup=[0,0,1,1,1,1,1,1,1] Список можно вводить на нескольких строках. При этом список будет считаться незавершенным, пока не будет введена закрывающая квадратная скобка, например, spis=[1,2,3,4, 5,6,7, 8,9,10] При работе с элементами списка можно использовать индексы точно так же, как это делали с элементами символьной строки, например, ссылка на последний элемент списка: spis1[-1] Проверьте возможность изменения списка, например, spis1[1]='Список' Отобразите объект spis1 и убедитесь, что он изменился. Текущее число элементов в списке можно узнать с помощью функции len: len(spis1) Методы объекта находятся в списке его атрибутов, который выводится с помощью уже известной функции dir. Описание метода можно вывести с помощью функции help по образцу help(spis1.append) С помощью методов объектов-списков можно добавлять и удалять элементы: spis1.append('New item') # В конец списка добавлен элемент «New item» Или по-другому (конкатенация): spis1+[New item] Добавьте в конец списка строку ss1b и отобразите список. Удаление элемента: spis1.pop(1) #Из списка удален элемент с индексом 1 Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index – изучите их самостоятельно. Списки могут быть вложенными: spis2=[spis1,[4,5,6,7]] #здесь элементами являются два списка Обращение к элементам вложенного списка spis2[0][1] #обращение к элементу (5-9j) списка spis1 Изменение элемента вложенного списка: spis2[0][1]=78 #Убедитесь, что значение (5-9j) заменено на 78 Теперь выведите на экран объект spis1. Объясните, почему он отличается от изначально заданного. Придумайте и создайте свой объект-список, элементами которого будут объекты разных типов: число, строка, логическое значение, список. Объект-кортеж похож на список, но его нельзя изменить – кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. В отличие от списка литерал кортежа заключается в круглые, а не в квадратные скобки. Кортежи также поддерживают включение в них объектов различных типов и операции, типичные для последовательностей. Примеры операций с кортежами: создание кортежа kort1=(222,Kortezh,77+8j) Добавление в конец кортежа (конкатенация): kort1+(1,2) #Это – не изменение кортежа, а создание нового кортежа из двух Изменить кортеж нельзя, но можно его переопределить: kort1= kort1+(1,2) Если надо добавить один элемент в кортеж: kort1= kort1+(ss1b,) Теперь переопределите кортеж с удалением элемента - символьной строки: kort1=kort1[:1]+kort1[2:] Два важных метода кортежа (они есть также и у списков): Определение порядкового номера заданного элемента: kort1.index(77+8j) # Будет получено значение 1 Подсчет числа вхождений заданного элемента в кортеже: kort1.count(222) #Будет получено значение 1 Методов append и pop у кортежей нет, т.к. они являются неизменяемыми. Попробуйте операцию замены элемента кортежа: kort1[2]=90 #Будет получена диагностика о невозможности изменения кортежа Создайте объект-кортеж с элементами разных типов: число, строка, список, кортеж. Объект-словарь похож на ассоциативные массивы в других языках программирования. Его содержанием является совокупность пар: «ключ (key)»:«значение (value)». В качестве ключей могут использоваться неизменяемые типы объектов. Значениями могут быть объекты любого типа. Ссылка на ключ обеспечивает быстрый доступ к связанному с ним значению. В отличие от списков и кортежей совокупность элементов словаря не является упорядоченной (последовательностью). Его элементы могут изменяться с помощью операции присваивания значений. Пример создания словаря: dic1={'Saratov':145, 'Orel':56, 'Vologda':45} Обращение к элементам словаря не по индексам, а по ключам: dic1['Orel'] 56 Пополнение словаря (добавление элемента, изменение словаря): dic1['Pskov']=78 dic1 {'Saratov': 120, 'Vologda': 45, 'Pskov': 78, 'Orel': 56} Обратите внимание на то, что в силу неупорядоченности словаря при его выводе элементы могут располагаться не в том порядке, в каком они задавались при его формировании. Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря. Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям: sorted(dic1.keys()) sorted(dic1.values()) Элементы словаря могут быть любого типа, в том числе и словарями. Например, создайте словарь dic2={1:'mean',2:'standart deviation',3:'correlation'} Затем создайте еще один словарь dic3={'statistics':dic2,'POAS':['base','elementary','programming']} Обратиться к элементу вложенного словаря можно, например, так dic3['statistics'][2] Создайте более сложный словарь из списка с элементами-кортежами с использованием функции dict: dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)]) Затем создайте еще один словарь из двух списков: один для ключей и другой – для значений, с помощью функций dict и zip: dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b])) Самостоятельно придумайте объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. Сколько элементов в получившемся словаре? Объясните это число. Пример словаря с параметрами звеньев в системе регулирования: systema={'инерционное звено':[12.4,0.12],'колебательное звено':[2.1,1.3,3.45]} Обращение к параметрам: systema['инерционное звено'][1] Объект-множество – это неупорядоченная совокупность неповторяющихся элементов. Эти элементы могут быть разных, но только неизменяемых типов (числа, строки, кортежи). Пример создания множества: mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'} Отобразите получившийся объект и убедитесь,, что в созданном множестве дубликаты элементов были автоматически удалены. Некоторые операции со множеством: - определение числа элементов len(mnoz1) - проверка наличия элемента во множестве 'датчик' in mnoz1 - добавление элемента mnoz1.add('реле') - удаление элемента mnoz1.remove('линия связи') Самостоятельно придумайте объект-множество с элементами разных типов и попробуйте с ним выполнить разные операции. Сохраните созданный текстовый файл в своем рабочем каталоге. Закончите сеанс работы с IDLE. Общее контрольное задание Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия: Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции. Создать переменную со значением, совпадающим с первой буквой из familia. Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python. Удалите из списка sp_kw значение ‘nonlocal’. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка. Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple. Добавьте в kort_nam имена еще двух студентов. Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима». Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам. Индивидуальные контрольные задания к защите по теме 1. Пусть предполагается выполнить инструкции >>> u=[1,2,3,4,5] >>> v=['a',u,'v',[11,12]] >>> print(v[1][3]) Какое значение будет выведено на экран? 2. Пусть определен объект с помощью инструкции >>> b={} Какого типа (класса) будет объект b? Подтвердите ответ в среде Python и определите список атрибутов этого объекта. 3. Пусть созданы два объекта с помощью инструкций: >>> b1={'d':23,'f':11,'k':45} >>> b2={'u':6,'v':67} К какому классу относятся эти объекты? Как создать объект того же класса со всеми 5 элементами? 4. Пусть создан объект >>> dd=[11,2,-4,23,12,56] К какому классу относится этот объект? Как расположить его элементы в порядке возрастания? 5. Пусть создан объект >>> gg=(11,2,-4,23,12,56) К какому классу относится этот объект? Подсчитайте сумму его элементов, расположенных на нечетных позициях. 6. Пусть создан объект >>> hh=-12.2758 Напишите инструкцию вывода на экран значения этого объекта, округленного до двух знаков после точки. 7. Напишите инструкцию создания множества с 5 русскоязычными названиями фруктов. Напишите инструкцию проверки вхождения фрукта «яблоко» в составе множества. 8. Напишите инструкцию создания множества с названиями стран: «Россия», «Казахстан», «Киргизия», «Армения». Напишите инструкцию добавления в это множество страны «Белоруссия». 9. Создайте два объекта >>> u=[1,2,3,4,5] >>> v=[11,22,33,44,55] К какому классу относятся эти объекты? Напишите инструкцию создания нового объекта z с элементами из u и v. 10. Создайте два объекта >>> x=(1,2,3,4,5) >>> y=(11,22,33,44,55) К какому классу относятся эти объекты? Напишите инструкцию расчета суммы элементов, находящихся на 4,6,8… позициях. 11. Предполагается выполнить следующие инструкции >>> s=(1,2,3,4,5) >>> d=[11,22,33,44,55] >>> sd=(s,d) Объекты каких классов будут созданы в результате их выполнения? Какое значение будет выведено по инструкции >>> print(sd[1][3]) 12. Предполагается выполнить инструкцию >>> fg={'a':23,'b':45,'c':-12} К какому классу будет относиться созданный объект? Напишите инструкцию расчета суммы значений первого и третьего элементов. 13. Создайте объект >>> strk=' А роза упала на лапу азора ' К какому классу относится этот объект? Напишите инструкцию вывода этого объекта «задом -наперед». 14. Создайте объект >>> fg={'b':23,'c':45,'a':-12} К какому классу относится этот объект? Напишите инструкцию, создающую словарь, у которого упорядоченным по алфавиту ключам объекта fg соответствуют упорядоченные по величине значения этого объекта. 15. Создайте объект >>> nm=(12,23,34,14,-7,-34) К какому классу относится этот объект? Напишите инструкцию, обеспечивающую расчет разности сумм первых трех элементов и последних трех. 16. Введите инструкцию >>> tov={'капуста','помидоры','огурцы','яблоки'} Определите, к какому классу относится этот объект и какими атрибутами он обладает. Отобразите элементы объекта в командном окне. Замените элемент «яблоки» на «свекла». 17. Создайте два списка: один – с фамилиями 3-х студентов вашей группы, другой – с 5 числами: 11,12,13,14,15. Напишите инструкцию создания словаря, в котором фамилии студентов были бы ключами, а числа – значениями. Отобразите получившийся словарь. Отобразите его ключи с упорядочением по фамилиям студентов. 18. Создайте объект-строку с текстом данного задания. Определите класс объекта, его атрибуты. Напишите инструкцию, обеспечивающую расчет числа символов в объекте и вывод этого числа в виде: «Число символов = ХХХ». Создайте новый объект-строку, в который включите только четные элементы из первой строки. 19. Создайте два списка: один – с фамилиями 4-х студентов вашей группы, другой – с 5 числами: 111,112,113,114,115. Напишите инструкцию создания кортежа, у которого списки были бе двумя элементами. Отобразите кортеж. Напишите инструкцию вывода на экран с использованием функции print и ссылок на элементы кортежа так, чтобы получилось сообщение вида: <ФИО студента>=114. 20. Создайте объект-строку символов с текстом: «Строка символов», а также список с элементами: «текст», «сноска», «символ», «документ». Определите число символов в строке. Напишите инструкции проверки вхождения элементов списка в строку символов. 21. Создайте кортеж с элементами – названиями цветов: розы, гвоздики, лилии, сирень, хризантемы, анютины глазки. Напишите инструкцию формального определения числа элементов в кортеже. Напишите инструкции, позволяющие создать новый кортеж, отличающийся от первого тем, что в нем вместо роз будут представлены колокольчики. 22. Создайте объект-строку символов с текстом: «Новая строка символов кириллицы». Определите число символов в строке. Напишите инструкцию, приводящую к удалению из строки слова «символов». Отобразите строку. 23. Введите инструкции >>> dct5={'орел':15,'ласточка':0.7,'дрозд':1.5} >>> dct6={'воробей':0.5,'аист':2.5} Определите классы созданных объектов и набор их атрибутов. Напишите инструкцию, обеспечивающую объединение этих двух объектов в один. Формально определите число элементов в итоговом объекте. 24. Введите инструкцию >>> dct5={'орел':15,'ласточка':0.7,'дрозд':1.5,'воробей':0.7} Определите класс созданного объекта и набор его атрибутов. Напишите инструкции, обеспечивающие замену элемента с ключом «воробей» на элемент «цапля»:3. Отобразите получившийся объект и формально определите сумму значений всех его элементов. 25. Создайте список с элементами 'Проверка', 'действия', 'инструкции', 'удаления', 'части', 'строки'. Формально определите число элементов в списке. Одной инструкцией удалите второе и третье слова. Отобразите список. Упорядочьте его элементы по алфавиту. Объясните полученный результат. 26. Создайте объект-множество с элементами: «трамвай», «троллейбус», «автобус», «метро», «маршрутка», «такси». Напишите инструкцию, обеспечивающую подсчет числа элементов в этом множестве. Напишите инструкцию, добавляющую в это множество элемент «электричка». Удалите из множества элемент «троллейбус». Определите класс получившегося объекта и выведите список его атрибутов. |