Сегодня разбираем задачу на работу с аргументами функции. Несмотря на то, что задача не сложная, верно ответили всего 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.

Передача позиционных аргументов: Стоит отметить, что ключевой элемент задачи — это использование звёздочки *, которая позволяет передавать любое количество скидок в функцию. Это даёт гибкость: вместо создания множества функций для разных наборов скидок, мы можем собрать их все в одном месте и обработать с помощью цикла.`````````````

repost

49

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь