Решение модуля 7.12 Добрый, добрый Python

Модуль 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

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x