Войти Регистрация
Код-ревью

12. Расчёт стоимости поездки такси

Средняя

Python · 21 строк

Функция считает цену поездки: подача, километры, минуты, минимальная цена, коэффициент спроса, ночная наценка 20 % с 00:00 до 06:00 по местному времени, промокод.

Промокод бывает двух видов: {"discount": 300} — скидка в рублях или {"percent": 15} — процент. Сервис работает в UTC и обслуживает города от Калининграда до Владивостока. Отметьте строки с ошибками.

В работе: Цена, которую пассажир видит до заказа и которую спишут с карты после поездки.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
деньгивремяпромокодыокругление

Источник: на задачах Яндекс Такси: тарифы и промокоды. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. from datetime import datetime
  2. TARIFFS = {
  3. "econom": {"base": 99, "per_km": 12.5, "per_min": 7, "min_price": 189},
  4. "comfort": {"base": 149, "per_km": 16, "per_min": 9, "min_price": 299},
  5. }
  6. def trip_price(tariff, km, minutes, surge, promo=None, started_at=None):
  7. t = TARIFFS.get(tariff)
  8. price = t["base"] + km * t["per_km"] + minutes * t["per_min"]
  9. price = max(price, t["min_price"])
  10. price = price * surge
  11. started_at = started_at or datetime.now()
  12. if 0 <= started_at.hour <= 6:
  13. price *= 1.2
  14. if promo:
  15. price -= promo["discount"]
  16. if promo and promo["percent"]:
  17. price = price * (1 - promo["percent"] / 100)
  18. return round(price)