Практическая работа. Множества. Решение def to set(element) st set(element) return st, len(st) # Тесты print(to set('я обычная строка'))
Скачать 19.79 Kb.
|
Практическая работа. Множества Рассмотреть приведенные примеры Пример 1 На входе функция to_set() получает строку или список чисел. Преобразуйте их в множество. На выходе должно получиться множество и его мощность. Список чисел или строка преобразуются в множество без возможных ошибок. Нужно просто обернуть их в конструктор и воспользоваться методом len() для получения ответа. Решение: def to_set(element): st = set(element) return st, len(st) # Тесты print(to_set('я обычная строка')) print(to_set([4, 5, 4, 6, 2, 9, 11, 3, 4, 2])) Пример 2 Имеется список с произвольными данными. Поставлена задача преобразовать его в множество. Если какие-то элементы нельзя хешировать, то пропускаем их. Функция list_to_set() выводит на печать получившееся множество. При решении придется проверять каждый элемент списка на хешируемость. Для этого воспользуемся классом Hashable из модуля collections. Решение: from collections.abc import Hashable def list_to_set(lst): st = {item for item in lst if isinstance(item, Hashable)} print(st) # Тесты list_to_set([1, [2]]) list_to_set([1, [2], 55, 55, {1, 2, 3}, (2, 2), 'string', 5.11]) Пример 3 На основании 3 исходных множеств (передаются в качестве аргументов функции diff()) требуется написать функцию, которая будет возвращать либо симметричную разность, либо просто разность (если дополнительный аргумент функции symmetric имеет значение False) приведенных объектов в порядке: 1-ое множество, 2-ое множество, 3-е множество. Решение: Разность двух множеств показывает уникальные элементы первого, которых нет во втором. Симметричная разность выводит уникальные компоненты обоих контейнеров, исключая общие для них. Решение можно провести как с помощью операторов, так и методов. Вариант 1. При помощи операторов def diff(set_1, set_2, set_3, symmetric=True): if symmetric: return set_1 ^ set_2 ^ set_3 return set_1 - set_2 - set_3 Вариант 2. При помощи методов def diff(set_1, set_2, set_3, symmetric=True): if symmetric: return set_1.symmetric_difference(set_2).symmetric_difference(set_3) return set_1.difference(set_2, set_3) # Тесты set_1 = {3, 4, 5, 6, 20} set_2 = {4, 6, 7, 8, 9} set_3 = {5, 3, 8, 1} print(diff(set_1, set_2, set_3)) print(diff(set_1, set_2, set_3, asymmetric=False)) Пример 4 Напишите функцию superset(), которая принимает 2 множества. Результат работы функции: вывод в консоль одного из сообщений в зависимости от ситуации: 1 - «Супермножество не обнаружено» 2 – «Объект {X} является чистым супермножеством» 3 – «Множества равны» Для написания функции необходимо выявить подчиненность множеств, наличие чистого супермножества. При помощи print() вывести ответ по результатам оценки. Решение: def superset(set_1, set_2): if set_1 > set_2: print(f'Объект {set_1} является чистым супермножеством') elif set_1 == set_2: print(f'Множества равны') elif set_1 < set_2: print(f'Объект {set_2} является чистым супермножеством') else: print('Супермножество не обнаружено') # Тесты set_1 = {1, 8, 3, 5} set_2 = {3, 5} set_3 = {5, 3, 8, 1} set_4 = {90, 100} superset(set_1, set_2) superset(set_1, set_3) superset(set_2, set_3) superset(set_4, set_2) Самостоятельная работа Задание 1. Получить множества С [1..13] и D [5..20]. А) Найти пересечение множеств d и c. Ответом должно быть множество [5..13] Б) Найти отрицание множеств d и c. Ответом должно быть множество … С) Найти отрицание множеств c и d. Ответом должно быть множество … (Ответы в 3 и 4 пунктах не совпали?) Д) Найти объединение этих множеств. Ответом должно быть множество … Задание 2. Подсчитать общее количество цифр и знаков '+', '-', и '*', входящих в строку s. Полезные ссылки https://all-python.ru/osnovy/mnozhestva.html |