Загрузка данных
Задача 1
Напишите декоратор say_hello_decorator, который перед вызовом любой декорированной функции выводит на экран строку "Привет!", а после выполнения – "Пока!".
Входные данные: Функция greet(), в которой считывается строка от пользователя и возвращается.
Выходные данные:
Привет!
[Строка пользователя]
Пока!
Задача 2
Создайте декоратор double_result, который вызывает декорированную функцию, принимает ее числовой результат и возвращает его значение, умноженное на 2.
Входные данные: Функция get_number(), которая считывает с клаивиатуры число и возвращает его.
Выходные данные: Удвоенное числовое значение.
Задача 3
Напишите декоратор to_upper, который перехватывает строковый результат выполнения функции и возвращает его полностью в верхнем регистре.
Входные данные: get_message(), считывающая с клавиатуры строку и возвращающая ее.
Выходные данные: Строка в верхнем регистре.
Задача 4
Создайте универсальный декоратор log_args, который принимает любые аргументы (*args, **kwargs), выводит их на экран перед вызовом функции в формате Аргументы: (список), {словарь}, а затем возвращает результат работы функции.
Входные данные: Функция multiply(a, b, c=1), вызванная со значениями, введенными с клавиатуры.
Выходные данные: Лог с аргументами и результат работы функции
Задача 5
Напишите декоратор add_exclamation, который проверяет строковый результат декорированной функции. Если строка не заканчивается на восклицательный знак !, декоратор добавляет его в конец строки.
Входные данные: Функция say_ok(), принимающая с клавиатуры строк и возвращающая ее.
Выходные данные: Строка по условию задачи.
Задача 6
Напишите декоратор memoize, который сохраняет результаты вызовов функции в словарь. Если функция вызывается повторно с теми же аргументами, декоратор не выполняет функцию заново, а возвращает сохраненное значение из словаря.
Входные данные: Программа запрашивает число N, функция heavy_calc(n) считает факториал или сумму чисел до N. Пользователь вводит числа несколько раз, окончание ввода – «Ок».
Выходные данные: Результат вычислений.
Задача 7
Напишите декоратор positive_only, который проверяет все числовые позиционные аргументы (*args), переданные в функцию. Если среди них есть отрицательные числа, декоратор заменяет их на нули перед передачей в функцию.
Входные данные: Пользователь вводит 3 числа через пробел. Функция sum_three(a, b, c) возвращает их сумму.
Выходные данные: Сумма чисел, где все отрицательные были заменены на 0.
Задача 8
Напишите декоратор validate_int, который проверяет, что все переданные в функцию позиционные аргументы (*args) являются целыми числами (int). Если все аргументы целые – функция выполняется. Если хотя бы один аргумент не является целым числом (например, ввели строку), декоратор возвращает строку «Ошибка типов».
Входные данные: Пользователь вводит два значения через пробел. Функция add_nums(a, b) возвращает их сумму.
Выходные данные: Сумма чисел либо строка «Ошибка типов».
Задача 9
Создайте декоратор call_counter, который считает, сколько раз вызывалась декорированная функция, используя словарь для хранения счета. Функция должна возвращать кортеж: (результат_функции, текущий_номер_вызова).
Входные данные: Пользователь вводит 3 раза разные слова. Функция ping(word) возвращает введенное слово.
Выходные данные: Для каждого ввода выводится кортеж вида ('слово', 1),
Задача 10
Напишите декоратор max_length(limit), который принимает максимальную длину строки. Если результат выполнения функции – строка, и ее длина превышает limit, декоратор обрезает строку до limit символов и добавляет в конце многоточие ...
Входные данные: Пользователь вводит длинную строку. Функция get_text() возвращает ее. Лимит (например, 5) задается в параметре декоратора.
Выходные данные: Обрезанная строка с многоточием (если превышен лимит).
Задача 11*
Напишите декоратор sort_output, который применяется к функциям, возвращающим списки строк. Декоратор должен автоматически сортировать полученный список строк по алфавиту перед возвратом пользователю.
Входные данные: Пользователь вводит слова через пробел. Функция get_words() преобразует их в список.
Выходные данные: Отсортированный по алфавиту список слов.
Задача 12*
Напишите декоратор freq_analysis, который применяется к функциям, возвращающим текст. Декоратор преобразует результат в список слов (в нижнем регистре), строит по ним частотный словарь ({слово: количество}) и возвращает этот словарь.
Входные данные: Пользователь вводит предложение из нескольких слов. Функция get_text() возвращает его.
Выходные данные: Частотный словарь в формате {'слово': частота}.
Задача 13*
Напишите декоратор unique_elements, который принимает функцию, возвращающую список с повторяющимися элементами, и возвращает новый список, в котором удалены все дубликаты, но сохранен исходный порядок появления элементов (используйте множество seen для быстрой проверки за $O(1)$, но формируйте итоговый список последовательно).
Входные данные: Пользователь вводит числа через пробел (включая повторяющиеся). Функция get_list() возвращает этот список.
Выходные данные: Список уникальных элементов с сохраненным порядком.