Декораторы · 1 из 19
До рубля
Тарифы в окне №3 считают разные куски программы, и у всех выходят копейки: 247,6 или 38,0999… Зинаида Петровна копеек в окне не берёт и велела отвечать целыми рублями. Переписывать каждый расчёт не хочется: проще обернуть их все одной обёрткой.
Что сделать
Напишите декоратор: обёрнутая функция считает как прежде, но отдаёт ответ, округлённый до целого рубля.
Что приходит
f— функция-расчёт: принимает какие угодно аргументы и возвращает число
Что вернуть
Новую функцию: она принимает те же аргументы, что f, зовёт её и возвращает round её ответа — целое число.
Допишите функцию do_rublya в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
Расчёт tarif(ves) возвращает ves * 12.7, и на весе 3 это 38,0999… Обёрнутый @do_rublya, он на том же весе отдаёт 38.
Декоратор принимает функцию и возвращает обёртку. Обёртка принимает любые позиционные и именованные аргументы, передаёт их в f как есть и возвращает round(ответ) — без второго аргумента round и даёт целое. Ровных половинок рубля в проверке нет: как round округляет 0,5, здесь не важно.
Образцовый тест целиком
@do_rublya
def tarif(ves):
return ves * 12.7
tarif(3)
38
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.