🎉 Разбор задачи: где прячется ошибка? 🎉

Друзья, спасибо всем, кто поучаствовал! Давайте разберёмся детально — и вы сразу увидите, в чём подвох. 👇

🧠 Что делает код:

- Функция calculate_total считает итоговую стоимость: цена × количество.
- Если сумма больше 1000 — применяется скидка 10%.
- Если больше 500 (но не больше 1000) — скидка 5%.

🤔 В чём проблема:

- Порядок условий if/elif выглядит логично, но на деле логика скидок нарушается.
- При вызове calculate_total(600, 2) получаем total = 1200.
- Срабатывает первое условие (total > 1000) — скидка 10%, итог: 1200 * 0.9 = 1080.
- А вот если бы сумма была, например, 550, скидка тоже была бы 10% — потому что условие > 1000 не сработает, но и > 500 сработает только при отсутствии более высокого порога. Но тут важнее другое: логика скидок пересекается, и диапазоны не разделены чётко.
❗ Главная ошибка — в перекрытии диапазонов и порядке проверки:

- Сейчас скидка 10% применяется при total > 1000, а 5% — при total > 500. Но если сумма, скажем, 1100, она всё равно попадает под 10%-ную скидку — это ок.
- Однако если мы позже захотим добавить ещё одну скидку (например, 15% при > 2000), порядок станет критичным.
- Более серьёзная проблема — отсутствие нижнего порога для скидки 10%: получается, что любая сумма выше 1000 получает 10%, а любая выше 500 — 5%, но при этом суммы от 501 до 1000 тоже попадают под 5%, что вроде бы верно, но структура условий хрупкая.

✅ Как сделать правильно (надёжный вариант):

def calculate_total(price, quantity):
total = price * quantity
if total > 1000:
total = total * 0.9 # скидка 10%
elif 500 < total <= 1000: # явно задаём диапазон
total = total * 0.95 # скидка 5%
return total

💡 Почему это лучше:

- Чётко прописаны границы: скидка 5% работает только в диапазоне от 500 до 1000.
- Логика становится предсказуемой, даже если позже добавятся новые уровни скидок.
- Такой подход проще читать и поддерживать — особенно в командном коде.

🚀 Бонус для тех, кто хочет избегать подобных ошибок:
Хотите прокачать внимательность к деталям и научиться сразу видеть типовые проблемы в коде? Приобретайте гайд «5 типовых ошибок в строковых методах Python: как не терять время на ревью и фиксы» — в нём собраны частые ловушки, примеры и готовые шаблоны проверок.
👉 Ссылка на гайд: https://vk.ru/market/product/5-tipovykh-oshibok-v-strokovykh-metodakh-python-kak-ne-teryat-vremya-na-revyu-i-fixy-233041006-14621525

#Python #РазборКода #ОшибкиВКоде #ОбучениеПрограммированию #PythonДляНачинающих #ПрактикаКода

Рекламный пост

Просмотры: 31
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти