Код на салфетке
15.09
Сегодня разбираем задачу на работу с аргументами функции. Несмотря на то, что задача не сложная, верно ответили всего 39% из 28 участников.
Задача: У вас есть функция, которая принимает сумму заказа и разные скидки, которые могут быть применены. Нужно корректно рассчитать итоговую сумму с учётом всех скидок.
Код задачи: `def apply_discounts(total, *discounts): for discount in discounts: total -= total * discount return round(total, 2)
order1 = apply_discounts(100, 0.1) order2 = apply_discounts(200, 0.05, 0.1) order3 = apply_discounts(300, 0.05, 0.1, 0.05)
print(order1, order2, order3)
Разбор задачи:
Начнём с определения функции apply_discounts, которая принимает два типа аргументов: - total — это сумма заказа. - discounts — здесь используется синтаксис , позволяющий передавать произвольное количество скидок в виде кортежа.
`def apply_discounts(total, *discounts):
Что значит звёздочка * перед аргументом? Это означает, что в функцию можно передать любое количество дополнительных аргументов после основного — они все будут собраны в кортеж. Например, в вызове apply_discounts(200, 0.05, 0.1), значения 0.05 и 0.1 будут упакованы в кортеж discounts = (0.05, 0.1).
Далее, функция последовательно применяет каждую из скидок. Она проходит по списку переданных скидок и уменьшает total на определённый процент:
`for discount in discounts: total -= total * discount
После того как все скидки применены, результат округляется до двух знаков после запятой:
`return round(total, 2)
Теперь разберём, что происходит при вызовах функции для каждого заказа:
1. Первый заказ: `order1 = apply_discounts(100, 0.1)
На сумму 100 применяем скидку 10% (0.1). Вычисляем: `100 - 100 * 0.1 = 90.0
Значение order1 = 90.0.
2. Второй заказ: `order2 = apply_discounts(200, 0.05, 0.1)
Здесь на сумму 200 применяются две скидки — сначала 5%, потом 10%. Рассчитаем шаг за шагом: - Применяем 5%: `200 - 200 * 0.05 = 190.0
- Применяем 10%: `190 - 190 * 0.1 = 171.0
Значение order2 = 171.0.
3. Третий заказ: `order3 = apply_discounts(300, 0.05, 0.1, 0.05)
Здесь применяются три скидки: 5%, 10% и снова 5%. Рассчитаем шаг за шагом: - Применяем 5%: `300 - 300 * 0.05 = 285.0
-
Применяем 10%: `285 - 285 * 0.1 = 256.5
-
Применяем ещё 5%: `256.5 - 256.5 * 0.05 = 243.68
Значение order3 = 243.68.
Итог: Мы получили следующие результаты: - Первый заказ: 90.0 - Второй заказ: 171.0 - Третий заказ: 243.68
Теперь давайте разберём правильный вариант ответа. Все числа вычислены корректно, и программа успешно выводит три значения. Правильный ответ — 3. 90.0 171.0 243.68.
Передача позиционных аргументов: Стоит отметить, что ключевой элемент задачи — это использование звёздочки *, которая позволяет передавать любое количество скидок в функцию. Это даёт гибкость: вместо создания множества функций для разных наборов скидок, мы можем собрать их все в одном месте и обработать с помощью цикла.`````````````
еще контент в этом сообществе
еще контент в этом соообществе
Код на салфетке
15.09
войдите, чтобы увидеть
и подписаться на интересных профи