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

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

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

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

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