Привет всем! Тут Я.Практикум предложил сделать для них задание. Дедлайны, увы, я нарушил, но все равно сделал эту работу с удовольствием.
Итак, с самой задачей можно ознакомиться здесь. Врум, врум, поехали... :)
Склонируйте текущий репозиторий https://github.com/Sam1808/YP.git
.
Основной скрипт вы найдете в main.py
. Для его запуска нужен python 3.10
, но уверен, что
должно работать и на более старших версиях.
Т.к. к функции предусмотрены тесты, не забудьте установить единственную зависимость в
своем виртуальном окружении:
pip install -r requirements.txt
Из задания я не смог сделать однозначный вывод, будет ли его использовать сам пользователь, или это будет частью чего то большого. Поэтому принял решение добавить простейший CLI интерфейс - пользовать приятно, да и части ошибок можно избежать.
Запустите python main.py -h
для получения справки по аргументам командной строки. Вывод:
usage: main.py [-h] -d DELIVERY [-p PRICE] [-l LOAD] [-o IS_OVERSIZED] [-f IS_FRAGILE]
Please fill options for delivery
options:
-h, --help show this help message and exit
-d DELIVERY, --delivery DELIVERY -> Specify the delivery distance
-p PRICE, --price PRICE -> Add minimal delivery price (default 400)
-l LOAD, --load LOAD -> Specify current service load (very high, high or increase)
-o IS_OVERSIZED, --is_oversized IS_OVERSIZED -> Is cargo oversized (default False)
-f IS_FRAGILE, --is_fragile IS_FRAGILE -> Is cargo fragile (default False)
-
python main.py -d 5
- Расчет стоимости доставки на 5 км при прочих значениях по умолчанию. Параметр-d
обязательный. Скрипт сообщит об ошибке, если вы его не укажитеerror: the following arguments are required: -d/--delivery
-
python main.py -d 5 -l 'very high load'
- Расчет стоимости доставки на указанное расстояние с учетом загруженности сервиса, которая определяется по ключевым словам:very high
- очень высокая загруженность, коэффициент стоимости 1.6,high
- высокая загруженность, коэффициент стоимости 1.4,increase
- повышенная загруженность, коэффициент стоимости 1.2. По умолчанию загруженности нет. -
python main.py -d 5 -o True
- Расчет стоимости доставки на указанное расстояние с учетом габаритов груза, гдеFalse
(по умолчанию) груз обычный, аTrue
груз габаритный. -
python main.py -d 5 -f True
- Расчет стоимости доставки на указанное расстояние с учетом хрупкости груза, гдеFalse
(по умолчанию) груз НЕ хрупкий, аTrue
груз хрупкий. -
python main.py -d 5 -p 1000
- Расчет стоимости доставки на указанное расстояние с учетом изменения минимальной цены доставки (в текущем примере 1000). Значение по умолчанию равно 400, согласно условии задачи. Этот функционал выходит за рамки задания, ну да ладно, решил добавить пользователю лишнюю возможность.
Расчет доставки габаритного, хрупкого груза, на расстояние 15 км при повышенной загруженности сервиса:
python main.py -d 15 -o True -f True -l 'increase'
Результатом выполнения будет стоимость доставки выраженная числом в формате float
или результат None
, если
есть неприемлемые условия расчета. Примеры:
python main.py -d 15 -o True -f True -l 'increase'
1320.0
python main.py -d 150 -f True
None
Согласно заданию необходимо покрыть код автотестами, чтож сделаем это с помощью pytest
и оформим все тесты отдельно
как файл test.py
.
Запуск тестов pytest test.py
, я ограничился 24 тестами, покрывающих основной функционал,
но понятно, что нет предела совершенству.
Я сдобрил тесты огромным количеством комментариев, наверное даже излишним количеством. Но тут скорее пусть они будут, чем не будут.
Попросили отдельно в Текстовом формате ответить на вопросы. Что ж вот файл с ответами qa.md, надеюсь формат соответствует.
И все таки я не понял из задания (на эти вопросы не обязательно отвечать :)):
-
Условие - большие габариты: +200 рублей к доставке; - маленькие габариты: +100 рублей к доставке. В целом определения "большие" и "маленькие" уже спорно, ещё больше удивляет, что любые габариты увеличивают стоимость.
-
Условие Минимальная сумма доставки — 400 рублей. Если сумма доставки меньше минимальной, выводится минимальная сумма. В целом невозможная ситуация, поскольку в задаче есть только повышающие коэффициенты.