Декораторы · 3 из 22
Не меньше нуля
В окне №3 несколько функций считают остатки: марок на складе, конвертов, бланков. И у каждой иногда выходит минус — то продали больше, чем завезли по бумагам, то бланк списали дважды. Зинаида Петровна постановила: в бумагах остаток бывает нулевой, но не отрицательный. Чинить каждую функцию отдельно долго — нужна одна обёртка на все.
Что сделать
Напишите декоратор: обёрнутая функция считает как прежде, но вместо отрицательного числа отдаёт ноль.
Что приходит
func— функция, которая считает число; аргументы у неё любые
Что вернуть
Новую функцию: зовёт func с теми же аргументами и возвращает её ответ, а если он меньше нуля — 0.
Допишите функцию ne_menshe_nulya в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
Над функцией остатка ставят @ne_menshe_nulya. Было 10 марок, продали 3 — остаток 7, как и без декоратора. Было 3, продали 10 — вместо −7 выходит 0.
ne_menshe_nulya(func) возвращает новую функцию. Новая функция принимает любые аргументы — позиционные и именованные — и передаёт их func как есть. Ответ func возвращается без изменений, если он не меньше нуля; отрицательный заменяется на 0.
Образцовый тест целиком
@ne_menshe_nulya
def ostatok(bylo, prodano):
return bylo - prodano
ostatok(10, 3)
7
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.