Тема 3. Операции с объектами Цель темы: изучение способов использования объектов разных типов.
Запустите интерактивную оболочку IDLE. Откройте окно текстового редактора. В первой строке напишите комментарий с текстом: « Тема 3 <ФИО>». Сохраните содержимое окна редактора в своем рабочем каталоге с именем файла протокола. В ходе выполнения дальнейшей работы все корректно выполненные инструкции и результаты их выполнения записывайте в этот текстовый файл – файл протокола.
Операции с объектами позволяют выполнять различные манипуляции с объектами, например, создавать, изменять, удалять объекты разных типов.
Преобразование простых базовых типов объектов.
Выполните следующие инструкции и после каждой из них проверьте получившееся значение объекта и его тип:
Преобразование в логический тип с помощью функции bool(<Объект>).
Примеры использования:
logiz1=bool(56)
logiz2=bool(0)
logiz3=bool("Beta")
logiz4=bool("")
Преобразование в целое десятичное число объекта с заданной системой счисления осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.
Примеры использования:
tt1=int(198.6) #Отбрасывается дробная часть
tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
tt3=int("B",16)
tt4=int("71",8)
tt5=int("98.76") #Будет диагностика ошибки – объясните почему?
Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
Примеры преобразований:
flt1=float(789)
flt2=float(-6.78e2)
flt3=float("Infinity")
flt4=float("-inf")
Преобразование десятичных чисел в другие системы счисления:
hh=123
dv1=bin(hh) #Преобразование в строку с двоичным представлением
vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
Для проверки выполните обратные преобразования объектов dv1, vos1, shs1 по образцу
int(dv1,2)
Изучите преобразования более сложных базовых типов объектов.
Преобразование в строку символов с помощью функции str(<Объект>).
Примеры использования:
strk1=str(23.6)
strk2=str(logiz3)
strk3=str(["A","B","C"]) #Преобразуем список
strk4=str(("A","B","C")) #Преобразуем кортеж
strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
Преобразование элементов объекта в список с помощью функции list(<Объект>).
Примеры преобразований:
spis1=list("Строка символов") #Заданная строка разделяется на символы
spis2=list((124,236,-15,908)) #Кортеж превращается в список
spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
Обратите внимание на то, что из словаря попало в созданный список. Придумайте инструкцию, обеспечивающую создание из того же словаря списка с другими его частями.
Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
Примеры преобразований
kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
kort8=tuple(spis2) #Преобразование списка в кортеж
kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
Удаление объектов.
Очистить оперативную память от ранее созданных объектов можно с помощью инструкции del.
Пример:
del strk5, kort8
Формально проверьте, остались ли после этой операции указанные объекты в оперативной памяти.
Создайте строку со своей фамилией и инициалами, преобразуйте её в список, затем список – в кортеж и, наконец, кортеж – в строку. Будет ли совпадать конечная строка с исходной? Попробуйте выполнить последнюю операцию с помощью метода join.
Арифметические операции.
Сложение и вычитание (+ и -)
12+7+90 # Сложение целых чисел
5.689e-1 - 0.456 #Вычитание вещественных чисел
23.6+54 #Сложение вещественного и целого чисел
14-56.7+89 # Сложение и вычитание целых и вещественных чисел
Умножение (*)
-6.7*12 #Умножение вещественного числа на целое число
Деление (/). Результатом деления всегда будет вещественное число!
-234.5/6 #Деление вещественного числа на целое
a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
Деление с округлением вниз (//). Здесь результат может быть целым или вещественным. В нижеследующих операциях определите тип результата.
b=178//45 #Деление двух целых чисел
c=-24.6//12.1 #Деление двух вещественных чисел
Самостоятельно попробуйте смешанные комбинации типов чисел.
Получение остатка от деления (%).
148%33 #Остаток от деления двух целых чисел
12.6%3.8 #Остаток от деления двух вещественных чисел
Самостоятельно попробуйте смешанные комбинации типов чисел.
Возведение в степень (**).
14**3 #Целое число возводится в целую степень
e=2.7**3.6 #Вещественное число возводится в вещественную степень
Самостоятельно попробуйте смешанные комбинации типов чисел.
Попробуйте операции с участием комплексных чисел. Какие из приведенных выше операций можно применять к комплексным числам, а какие – нет?
Нетрудно заметить, что в результате операции над числами разных типов получается число, имеющее наиболее сложный тип из тех типов, которые участвуют в операции.
Операции с двоичными представлениями целых чисел.
Двоичная инверсия ( ). Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0). dv1=9
dv2=dv1
Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
7&9 # 111 и 1001 = 0001
7&8 # 111 и 1000 = 0000
Двоичное «ИЛИ» (|) – побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
7|9 # 111 или 1001 = 1111
7|8 # 111 или 1000 = 1111
14|5 # 1110 или 0101 = 1111
Двоичное «исключающее ИЛИ»(^) - побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
14^5 # 1110 исключающее или 0101 = 1011
Какое получилось значение в десятичном представлении?
Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
h=14 #Двоичное представление = 1110
g=h<<2 # Новое двоичное представление = 111000
g1=h>>1 # Новое двоичное представление = 0111
g2=h>>2 # Новое двоичное представление = 0011
При сдвиге отрицательного числа вправо разряды слева заполняются единицами.
h=-17
hn=h>>2
Отобразите и объясните полученное значение.
Придумайте два двоичных числа, не менее чем с 7 знаками, и попробуйте выполнить с ними разные операции.
Операции при работе с последовательностями (строками, списками, кортежами).
Объединение последовательностей (конкатенация)(+)
'Система '+'регулирования' #Соединение двух строк символов
['abc','de','fg']+['hi','jkl'] # Объединение двух списков
('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
Повторение (*)
'ля-'*5 #Повторение строки 5 раз
['ку','-']*3 #Повторение списка 3 раза
('кис','-')*4 #Повторение кортежа 4 раза
Пример. Создание списка со 100 отсчетами сигнала-ступеньки:
signal1=[0]*3+[1]*99
Создание кортежа с отсчетами сигнала – импульса:
signal2=(0,)*3+(1,)*5+(0,)*7
Проверка наличия заданного элемента в последовательности (in)
stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
'ку' in ['ку','-']*3 #Наличие контекста в списке
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
Подстановка значений в строку с помощью оператора «%»
Пример 1.
stroka='Температура = %g %s %g'
stroka % (16,' меньше ',25)
Пример 2. Вставка с использованием данных из словаря.
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
Оператор присваивания
Обычное присваивание значения переменной (=)
zz=-12
Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
zz+=5 # Значение zz увеличивается на 5
zz-=3 # Значение уменьшается на 3
Для последовательностей операция (+=) означает конкатенацию текущего значения объекта с заданным дополнением.
stroka='Система'
stroka+=' регулирования'
Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
zz/=2
zz*=5
Для строк операция (*=) означает повторение текущего значения объекта заданное число раз. Попробуйте эту операцию самостоятельно.
Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=) изучите самостоятельно. Множественное присваивание
w=v=10 # Переменным присваивается одно и то же значение
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
Самостоятельно проверьте, можно ли вместо кортежа справа использовать строку, список, словарь, множество?
Логические операции – при создании логических выражений, дающих в результате вычисления значения True или False.
Операции сравнение: равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=) – придумайте примеры этих операций. Сравните ранее созданные переменные w и v. Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
Операции со множеством
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
'cap' in mnoz1
Операции со словарем
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
'Vologda' in dic1
'Pskov' in dic1
56 in dic1.values()
Ещё пример работы со словарем:
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UII' in dct1['Depart']
dct1['Depart'][1] == 'MM'
Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
Придумайте самостоятельно еще 2-3 примера сложных логических выражений.
Проверка ссылок переменных на один и тот же объект (is).
w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
w is v
w1=['A','B']
v1=['A','B']
Здесь значения в операциях присваивания справа – одинаковые. Теперь проверьте:
w1 is v1
Объясните результат.
Операции с объектами, выполняемые с помощью методов.
Полный список всех атрибутов любого объекта можно получить с использованием функции dir, например,
stroka='Микропроцессорная система управления'
dir(stroka)
Методы для работы со строками. Рассмотрите несколько примеров таких методов:
stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
stroka.replace(' у',' автоматического у')
spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
stroka.upper() #Возвращает строку со всеми заглавными буквами
stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа Изучите метод format. Форматирование строки осуществляется в случае, если необходимо в символьную строку подставить значения некоторых объектов, например, полученных в ходе выполнения программы. Часто такую строку затем используют для вывода результатов работы программы на экран или в файл протокола.
Например, создайте строку:
strk1='Момент времени {}, значение = {}'
Вместо фигурных скобок вставьте значения:
strk1.format(1,89.7)
Отобразите полученную строку.
Теперь создайте строку
strk2='Момент времени {1}, значение = {0}:{2}'
Здесь цифры в фигурных скобках – это индексы, определяющие порядок использования аргументов формата. Поэтому такой способ называют основанным на позиционных аргументах. Например,
strk2.format(36.7,2,'норма!')
Отобразите строку и изучите, в каком порядке вставлены аргументы.
Теперь задайте следующую строку:
strk3='Момент времени {num}, значение = {znch}'
Здесь в скобках указаны имена аргументов – вставок. Поэтому такой способ основан на именованных аргументах.
С помощью метода format вставьте в строку значения:
strk3.format(znch=89.7,num=2)
Обратите внимание на то, что в этом варианте порядок аргументов не обязательно соответствует порядку вставок в строке.
Методы для работы со списками.
Создайте произвольный список spsk, не менее чем с 5 элементами. Отобразите его атрибуты.
Последовательно обратитесь к методам этого списка с отображением каждый раз полученного списка:
spsk.pop(2)
spsk.append('c')
spsk.insert(2,'a')
spsk.count('a')
Проанализируйте смысл операций, выполненных с помощью этих методов.
Самостоятельно создайте кортеж и изучите применение его методов. Также самостоятельно изучите методы словарей и множеств.
Сохраните созданный текстовый файл протокола в своем рабочем каталоге. Закончите сеанс работы с IDLE.
Общее контрольное задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
Преобразовать восьмеричное значение 45 в целое число. Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка? Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4. Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево. Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка. Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов. Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
Индивидуальные контрольные задания к защите по теме
Напишите инструкцию преобразования числа C3F9 в десятичное число и после этого – определения остатка от деления его нацело на 14. Определить значение, получаемое в результате операции «исключающее ИЛИ», примененной к числам 234 и 178. Для проверки вывести двоичные представления этих чисел. Создайте словарь с ключами: МатАн, Физика, СМИИ, ИТ и со значениями, соответственно: 4, 5, 4, 3. Создайте список со значениями ключей словаря. Замените значение для ключа ИТ на 4. Создайте кортеж с элементами: 'kom',14,[67,-5],{1,2,3}. Напишите инструкцию определения числа элементов в кортеже. Напишите инструкцию деления первого по счету значения в третьем по порядку элементе кортежа нацело на число 15. Создайте строку для вывода с использованием оператора подстановки значения по шаблону: «Значение отклика объекта = 23.45». Примените эту строку для вывода значения 75.9. Создайте символьную строку из двух подстрок: ‘kul’ и ‘kur’. Создайте новую символьную строку, состоящую из ранее созданной строки, повторенной 5 раз. Определите, сколько раз в эту строку входит подстрока ‘kurkul’. Создайте множество, состоящее из названий 6 фруктов. Проверьте, входит ли в него яблоко. Если входит – удалите его из множества, а если нет – добавьте его туда. Создайте кортеж с элементами: 'kom',14,[67,-5],{1,2,3}. Напишите инструкцию проверки наличия значения 2 в четвертом по порядку элементе кортежа. Создайте словарь с ключами: ‘aaa’,’qqq’,’uuu’ и соответствующими им значениями: 67, -45, 34. С помощью спецификации формата создайте строку по шаблону: «Значение элемента словаря = 34». Создайте кортеж с элементами: 11,-3,8, 23,11, 2, 8. Превратите его в список. Вставьте в список на 4-е место значение 2. Превратите список во множество. Подсчитайте число элементов во множестве. Создайте словарь с ключами: ‘aaa’,’qqq’,’uuu’ и соответствующими им значениями: 67, -45, 34. Определите сумму значений элементов. Создайте список со значениями ключей. Создайте множество с элементами: 4,-2,7,5,1. Добавьте к этому множеству элемент:11. Превратите множество в список. Определите число элементов в списке. Создайте строку с текстом: « Контрольный вопрос по теме 1.2 ». Напишите инструкцию удаления начальных и конечных пробелов из этой строки. Создайте список с элементами – отдельными словами из этой строки. Подсчитайте число элементов в получившемся списке. Создайте список с элементами-словами: «Контрольный», «вопрос», «по», «теме», «1.3». Превратите список в строку, в которой слова разделены одним пробелом. Определите, сколько раз в этой строке встречается буква «о». Создайте кортеж с двумя элементами: 'А','Б'. Создайте символьную строку для вывода элементов кортежа по шаблону «Сказав <место для вывода первого элемента>, скажи и <место для вывода второго элемента>». С помощью операции подстановки выведите строку с подставленными в нее элементами кортежа. Напишите инструкцию преобразования числа 0o563 в шестнадцатеричное представление. Одной инструкцией создайте кортеж с пятью такими одинаковыми числами. Преобразуйте исходное число в целое десятичное число. Используя формат, выведите это число в виде строки: «Результат = ХХХ». Напишите инструкцию преобразования числа 0o563 в десятичное представление. Напишите инструкцию подсчета суммы цифр десятичного представления этого числа. Отобразите результат в виде: «Число = ХХХ, сумма цифр=ХХ». Создайте объект-символьную строку с текстом
«%Символьная%строка%с%текстом%для%разборки».
Напишите инструкцию, заменяющую знаки процента на пробелы. Обеспечьте подсчет числа слов в тексте. С использованием формата выведите результат в виде: «В строке ХХ слов».
Напишите инструкцию создания объекта-словаря с двумя элементами с ключами: «ФИО» и «Премия», значениями – списками с 3 элементами (придумать самостоятельно). Напишите инструкцию расчета средней премии для указанных сотрудников. Обеспечить вывод результата в виде «Средняя премия = ХХХ» (выводимый результат округлить до двух знаков после запятой). Создайте множество из 10 чисел. Преобразуйте это множество в список. Рассчитайте разность наибольшего и наименьшего чисел в списке (размах), а также среднее значение чисел в списке. Отобразите результаты на экране в виде строки «Размах=ХХ, среднее значение = ХХ». Создайте два простых объекта со значениями 267.9 и 123.4. Разделите каждый объект нацело на 6. Отобразите двоичные представления полученных результатов в виде строки вида «Первое число = ХbХХХХ, второе число = ХbХХХХ». Выполните побитовое сравнение результатов деления и отобразите полученное число в двоичном виде. Создайте символьную строку с текстом данного задания. Напишите инструкцию создания списка, в котором элементами являются слова из строки. Обеспечьте подсчет числа полученных слов. Напишите инструкцию, позволяющую рассчитать число вхождений подстроки «инстр» в строке. С помощью функции print выведите результат в виде: «Число вхождений подстроки = ХХ». Создайте символьную строку с текстом данного задания. Напишите инструкцию определения индекса первого вхождения в эту строку подстроки «Раздел». Разделите исходную строку на две: первая строка от начала до найденного индекса, вторая – остаток строки. Подсчитайте числа символов в получившихся строках. Выведите результаты на экран в виде: «В первой строке ХХ символов, во второй – ХХ символов». Напишите инструкцию создания списка с 5 произвольно выбранными целочисленными элементами. Напишите инструкцию, позволяющую заменить в списке третье число на 122. Напишите инструкции, позволяющие получить новый список с элементами из первого списка, упорядоченными в порядке убывания значений. Подсчитайте сумму элементов списка и отобразите на экране в виде «Сумма элементов=ХХХ». Создайте множество с 7 произвольными целочисленными элементами. Напишите инструкцию преобразования множества в список. Упорядочьте элементы списка по возрастанию значений элементов. По всем элементам списка, кроме первого и последнего, рассчитайте среднее значение. С использованием формата отобразите результат на экране в виде строки вида: «Среднее значение = ХХХ» с округлением результата до целого значения. Создайте список с 10 элементами – числами: 12, 17, 22,… . Напишите инструкцию преобразования этого списка с символьную строку. Уберите из строки символы – открывающую и закрывающую квадратные скобки. Формально подсчитайте, сколько раз в строке встречается цифра 2. Отобразите результат на экране в виде: «Цифра 2 встречается ХХ раз». По ранее созданному списку рассчитайте сумму четных элементов и отобразите ее в виде «Сумма = ХХХ».
2> |