Нашли ошибку?
Скачать чистый
мини-проект≈ 20 минупражнения: 0 из 7

Мини-проект: калькулятор цен

Собрать прайс-лист «товар × количество» из себестоимости, наценок по товарам и скидок за объём — таблица всех пар, строки и столбцы в одном выражении.

Python запустится при первом выполнении

Кофейная лавка продаёт зерно и чай оптом и в розницу. Нужен прайс-лист: для каждого товара — цена при покупке 1, 5, 10 и 50 штук. Таблица — товары × количества, и у каждого набора исходных чисел своя «форма»:

  • себестоимость — у каждого товара своя: столбец (по строке на товар);
  • количество штук amounts — 1, 5, 10, 50: строка (по столбцу на количество);
  • скидка за объём — своя у каждого количества: тоже строка;
  • наценка — своя у каждого товара: снова столбец.
[ ]Исходные данные
import numpy as np

goods = ["эспрессо-смесь 1 кг", "колумбия 250 г", "эфиопия 250 г", "чёрный чай 100 г", "фильтры"]
cost = np.array([870, 380, 430, 150, 250])              # себестоимость штуки, ₽
markup = np.array([1.5, 1.6, 1.6, 2.0, 2.2])            # наценка товара
amounts = np.array([1, 5, 10, 50])                      # варианты количества
volume_discount = np.array([0, 0.05, 0.10, 0.20])       # скидка за объём
print(cost.shape, markup.shape, amounts.shape, volume_discount.shape)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
(5,) (5,) (4,) (4,)

Шаг 1. Себестоимость партии

[ ]Упражнение 1Товар × количество решено

Сохраните в base таблицу себестоимости партии: строка — товар, столбец — количество из amounts.

base = ...

Шаг 2. Скидка за объём

[ ]Упражнение 2Скидки за объём решено

Скидки за объём — в volume_discount (0.05 — 5 %). Сохраните в discounted таблицу base со скидками: каждый столбец умножается на 1 - скидка своего количества.

discounted = ...

Шаг 3. Наценка

[ ]Упражнение 3Цена для покупателя решено

Наценка каждого товара — множитель в markup. Сохраните в price цену для покупателя: discounted, умноженная на наценку своего товара.

price = ...

Шаг 4. Целые рубли

[ ]Упражнение 4Прайс-лист в рублях решено

Округлите price до целых рублей и сохраните в price_list массивом целого типа.

price_list = ...

[ ]Вспомним про половинки
print(price[4, 1], "→", price_list[4, 1])
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
2612.5 → 2612
Вывод появится, когда решите упражнение «Прайс-лист в рублях», — иначе он подскажет ответ. Ячейку можно и выполнить.

Цена 2612.5 превратилась в 2612, а не в 2613: половинки округляются к чётному, как в уроке о статистике. Для прайс-листа это приемлемо, но в бухгалтерии правило округления задают явно.

Пояснение с ответом появится, когда решите упражнение «Прайс-лист в рублях».

Шаг 5. Цена за штуку

[ ]Упражнение 5Выгода от объёма решено

Сохраните в per_unit цену одной штуки в каждой ячейке прайс-листа: price_list, делённый на количество своего столбца.

per_unit = ...

Шаг 6. Что влезает в бюджет

[ ]Упражнение 6Бюджет 5000 ₽ решено

У покупателя 5000 ₽. Сохраните в affordable для каждого товара число вариантов количества, которые стоят не больше 5000 ₽ (по price_list).

affordable = ...

Шаг 7. Сколько экономит скидка

[ ]Упражнение 7Экономия на десяти штуках решено

Без скидок за объём цена была бы base * наценка. Сохраните в savings экономию покупателя при покупке 10 штук каждого товара (столбец с индексом 2): цена без скидки минус price.

savings = ...

Выводы

[ ]Прайс-лист
print("количество:", amounts)
for name, row in zip(goods, price_list):
    print(f"{name:>20}: {row}")     # :>20 — выровнять название по правому краю на 20 символов
print("экономия на 10 штуках всего ассортимента:", round(savings.sum()), "₽")
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
количество: [ 1  5 10 50]
 эспрессо-смесь 1 кг: [ 1305  6199 11745 52200]
      колумбия 250 г: [  608  2888  5472 24320]
       эфиопия 250 г: [  688  3268  6192 27520]
    чёрный чай 100 г: [  300  1425  2700 12000]
             фильтры: [  550  2612  4950 22000]
экономия на 10 штуках всего ассортимента: 3451 ₽
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Весь прайс-лист — четыре массива (два столбца и две строки) и одно выражение cost[:, np.newaxis] * amounts * (1 - volume_discount) * markup[:, np.newaxis]. Добавится товар или новый вариант количества — формула не изменится.

Выводы с ответами появятся, когда решите все упражнения урока.

Подробнее в справочнике

Практика по модулю

Задачи по NumPy для самостоятельной практики появятся в разделе «Задачи → NumPy».

Нашли ошибку?