Модуль 7.12 Передача аргументов декораторам.
Вводится строка целых чисел через пробел. Напишите функцию, которая преобразовывает эту строку в список чисел и возвращает их сумму.
Определите декоратор для этой функции, который имеет один параметр start — начальное значение суммы.
Примените декоратор со значением start=5 к функции и вызовите декорированную функцию для введенной строки s:
s = input()
Результат отобразите на экране.
# Определяем декоратор start_sum, который принимает начальное значение суммы start def start_sum(start): # Определяем декоратор decorator, который принимает функцию func def decorator(func): # Определяем функцию-обертку wrapper, которая принимает строку s def wrapper(s): # Преобразуем строку s в список чисел lst lst = list(map(int, s.split())) # Возвращаем сумму lst с добавлением значения start return sum(lst) + start return wrapper return decorator # Применяем декоратор start_sum со значением start=5 к функции sum_string @start_sum(start=5) def sum_string(s): # Преобразуем строку s в список чисел lst lst = list(map(int, s.split())) # Возвращаем сумму lst return sum(lst) # Считываем строку s с клавиатуры s = input() # Вызываем функцию sum_string с аргументом s и выводим результат на экран print(sum_string(s))
Объявите функцию, которая возвращает переданную ей строку в нижнем регистре (с малыми буквами).
Определите декоратор для этой функции, который имеет один параметр tag, определяющий строку с названием тега и начальным значением «h1». Этот декоратор должен заключать возвращенную функцией строку в тег tag и возвращать результат.Пример заключения строки «python» в тег h1: <h1>python</h1>
Примените декоратор со значением tag=»div» к функции и вызовите декорированную функцию для введенной строки s:
s = input()
Результат отобразите на экране.
# Объявление функции to_lower_case(), которая принимает строку s и возвращает ее в нижнем регистре. def to_lower_case(s): return s.lower() # Объявление функции-декоратора tag_decorator(), которая принимает строку tag и возвращает другую функцию wrapper(). # Функция wrapper() принимает функцию func и возвращает функцию inner_func(), которая принимает строку s, применяет к ней функцию func() и заключает результат в тег с названием, заданным аргументом tag. def tag_decorator(tag): def wrapper(func): def inner_func(s): return f"<{tag}>{func(s)}</{tag}>" return inner_func return wrapper # Применение декоратора tag_decorator() к функции to_lower_case(). Результатом будет функция, которая применяет функцию to_lower_case() к переданной ей строке, заключает результат в тег <div> и возвращает строку. @tag_decorator("div") def to_lower_case(s): return s.lower() s = input() # Вызов функции to_lower_case() с переданной строкой s. Декоратор, примененный к функции, приведет к тому, что результатом будет строка, заключенная в тег <div> и приведенная к нижнему регистру. result = to_lower_case(s) print(result)
Объявите функцию, которая принимает строку на кириллице и преобразовывает ее в латиницу, используя следующий словарь для замены русских букв на соответствующее латинское написание:
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'}Функция должна возвращать преобразованную строку. Замены делать без учета регистра (исходную строку перевести в нижний регистр — малые буквы).
Определите декоратор с параметром chars и начальным значением » !?», который данные символы преобразует в символ «-» и, кроме того, все подряд идущие дефисы (например, «—» или «—«) приводит к одному дефису. Полученный результат должен возвращаться в виде строки.
Примените декоратор с аргументом chars=»?!:;,. » к функции и вызовите декорированную функцию для введенной строки 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 latinize(s): # Приводим строку к нижнему регистру s = s.lower() # Инициализируем пустую строку для результата result = '' # Итерируем по символам строки for c in s: # Если символ есть в словаре t, добавляем его латинский аналог в результат if c in t: result += t[c] # Иначе добавляем символ как есть else: result += c # Возвращаем преобразованную строку return result # Декоратор для замены символов на дефисы def replace_chars(chars): # Объявляем сам декоратор def decorator(func): # Объявляем обертку def wrapper(s): # Вызываем функцию, переданную декоратору, чтобы получить результат s = func(s) # Заменяем указанные символы на дефисы for c in chars: s = s.replace(c, '-') # Сводим подряд идущие дефисы к одному while '--' in s: s = s.replace('--', '-') # Возвращаем измененную строку return s # Возвращаем обертку return wrapper # Возвращаем сам декоратор return decorator # Создаем декорированную функцию decorated, которая будет сначала преобразовывать введенную строку в латиницу с помощью функции latinize, а затем заменять указанные символы на дефисы с помощью функции replace_chars. decorated = replace_chars("?!:;,. ")(latinize) s = input() result = decorated(s) print(result)
Объявите функцию с именем get_list и следующим описанием в теле функции:
»’Функция для формирования списка целых значений»’
Сама функция должна формировать и возвращать список целых чисел, который поступает на ее вход в виде строки из целых чисел, записанных через пробел.
Определите декоратор, который выполняет суммирование значений из списка этой функции и возвращает результат.
Внутри декоратора декорируйте переданную функцию get_list с помощью команды @wraps (не забудьте сделать импорт: from functools import wraps). Такое декорирование необходимо, чтобы исходная функция get_list сохраняла свои локальные свойства: __name__ и __doc__.Примените декоратор к функции get_list, но не вызывайте ее.
from functools import wraps # Определяем декоратор sum_list, который принимает на вход функцию func и возвращает функцию-обертку wrapper def sum_list(func): # Декорируем функцию-обертку wrapper с помощью wraps, чтобы сохранить локальные свойства функции func @wraps(func) def wrapper(*args, **kwargs): # Вызываем функцию func с переданными аргументами и получаем список lst lst = func(*args, **kwargs) # Возвращаем сумму значений списка lst return sum(lst) # Возвращаем функцию-обертку wrapper return wrapper # Применяем декоратор sum_list к функции get_list @sum_list def get_list(string): '''Функция для формирования списка целых значений''' # Разбиваем строку на список строк, затем преобразуем каждую строку в целое число и получаем список lst lst = [int(x) for x in string.split()] # Возвращаем список lst return lst
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы