Модуль 7.11 Декораторы функций.
Объявите функцию с именем get_sq, которая вычисляет площадь прямоугольника по двум параметрам: width и height — ширина и высота прямоугольника. И возвращает результат (сама ничего на экран не выводит). То есть, функция имеет сигнатуру:
def get_sq(width, height): …
Определите декоратор func_show для этой функции, который отображает результат на экране в виде строки (без кавычек):
«Площадь прямоугольника: <значение>»
Вызывать функцию и декоратор не нужно, только объявить. Применять декоратор к функции также не нужно.
def func_show(func): # Сюда передаём функцию которую нужно декорировать def wrapper(*args): # Сюда передаём аргументы декорированной функции func(*args) # вызываем функцию print(f'Площадь прямоугольника: {func(*args)}') # выводим задекорированный ответ return wrapper # возвращаем результат def get_sq(width, height): # функция, которую будем декорировать s = width * height # в переменной храним площадь прямоугольника return s # возвращаем площадь
На вход программы поступает строка с названиями пунктов меню, записанные в одну строчку через пробел. Необходимо задать функцию с именем get_menu, которая преобразует эту строку в список из слов и возвращает этот список. Сигнатура функции, следующая:
def get_menu(s): …
Определите декоратор для этой функции с именем show_menu, который отображает список на экран в формате:
1. Пункт_1
2. Пункт_1
…
N. Пункт_NПримените декоратор show_menu к функции get_menu, используя оператор @. Более ничего в программе делать не нужно. Сами функции не вызывать.
def show_menu(func): def wrapper(*args): # функция, которая выполняет блок команд menu = func(*args) # запускаем оборачиваемую функцию [print(f"{i+1}. {j}") for i, j in enumerate(menu)] # выводим результат согласно задания return wrapper # возвращаем результат блока команд (запускаем) @show_menu # применяем декоратор def get_menu(s): # объявляем функцию return s.split() # превращаем в список
На вход программы поступает строка из целых чисел, записанных через пробел. Напишите функцию get_list, которая преобразовывает эту строку в список из целых чисел и возвращает его. Определите декоратор для этой функции, который сортирует список чисел по возрастанию. Результат сортировки должен возвращаться при вызове декоратора.
Вызовите декорированную функцию get_list и отобразите полученный отсортированный список lst командой:
print(*lst)
# определяем декоратор sort_decorator, который принимает на вход функцию func def sort_decorator(func): # Определяем внутреннюю функцию-обертку wrapper, которая принимает на вход произвольное число позиционных и именованных аргументов. def wrapper(*args, **kwargs): # Выполняем функцию func с переданными аргументами и сохраняем результат в переменную result. result = func(*args, **kwargs) # Возвращаем отсортированный результат. return sorted(result) # Возвращаем функцию-обертку. return wrapper # Декорируем функцию get_list декоратором sort_decorator, чтобы отсортировать список чисел по возрастанию. @sort_decorator # Определяем функцию get_list, которая принимает на вход строку s. def get_list(s): # Преобразуем строку в список целых чисел и возвращаем его. return list(map(int, s.split())) s = input() # Вызываем функцию get_list, чтобы преобразовать строку в список целых чисел. lst = get_list(s) # Выводим отсортированный список на экран с помощью команды print(*lst), которая распаковывает список в отдельные аргументы для функции print. print(*lst)
Вводятся две строки из слов (слова записаны через пробел). Объявите функцию, которая преобразовывает эти две строки в два списка слов и возвращает эти списки.
Определите декоратор для этой функции, который из двух списков формирует словарь, в котором ключами являются слова из первого списка, а значениями — соответствующие элементы из второго списка. Полученный словарь должен возвращаться при вызове декоратора.
Примените декоратор к первой функции и вызовите ее для введенных строк. Результат (словарь d) отобразите на экране командой:
print(*sorted(d.items()))
# Определяем декоратор dict_decorator, который принимает на вход функцию func. def dict_decorator(func): # Определяем внутреннюю функцию-обертку wrapper, которая принимает на вход произвольное число позиционных и именованных аргументов. def wrapper(*args, **kwargs): # Выполняем функцию func с переданными аргументами и сохраняем результат в переменную result. result = func(*args, **kwargs) # Преобразуем два списка result[0] и result[1] в словарь, где ключами являются элементы первого списка, а значениями - соответствующие элементы второго списка. Возвращаем полученный словарь. return dict(zip(result[0], result[1])) # Возвращаем функцию-обертку. return wrapper # Декорируем функцию get_lists декоратором dict_decorator, чтобы из двух списков формировать словарь. @dict_decorator # Определяем функцию get_lists, которая принимает на вход две строки s1 и s2. def get_lists(s1, s2): # Преобразуем строки в два списка слов и возвращаем их. return [s1.split(), s2.split()] # Получаем первую строку. s1 = input() # Получаем вторую строку. s2 = input() # Вызываем функцию get_lists, чтобы преобразовать две строки в два списка слов и объединить их в словарь. d = get_lists(s1, s2) # Выводим отсортированный словарь на экран с помощью команды print(*sorted(d.items())), которая распаковывает словарь в отдельные аргументы для функции print и сортирует его по ключам. print(*sorted(d.items()))
Объявите функцию, которая принимает строку на кириллице и преобразовывает ее в латиницу, используя следующий словарь для замены русских букв на соответствующее латинское написание:
t = {'ё': 'yo', 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya'}Функция должна возвращать преобразованную строку. Замены делать без учета регистра (исходную строку перевести в нижний регистр — малые буквы). Все небуквенные символы «: ;.,_» превращать в символ ‘-‘ (дефиса).
Определите декоратор для этой функции, который несколько подряд идущих дефисов, превращает в один дефис. Полученная строка должна возвращаться при вызове декоратора. (Сам декоратор на экран ничего выводить не должен).
Примените декоратор к первой функции и вызовите ее для введенной строки s на кириллице:
s = input()
Результат работы декорированной функции отобразите на экране.
t = {'ё': 'yo', 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya'} # Декоратор для объединения нескольких дефисов в один def remove(func): def wrapper(stroka): # Удаляем лишние дефисы, разбиваем на список и снова объединяем в строку с дефисами ls = func(stroka).replace('-', ' ').split() return '-'.join(ls) return wrapper # Функция для конвертации строки на русском языке в строку на латинице @remove def cyrillic_to_latin(strings): # Для каждого символа строки применяем функцию get() словаря t. # Если символа нет в словаре, то возвращаем сам символ # Если символ является небуквенным, то заменяем на дефис lst = [t.get(i, i) if i not in [":", ";", '.', ',', ' '] else '-' for i in strings.lower()] # Соединяем полученные символы в одну строку return ''.join(lst) # Вводим строку с помощью функции input() s = input() # Вызываем функцию convert() с аргументом s и выводим результат на экран print(cyrillic_to_latin(s))
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы