JustCaptain kod-buduschego
bb03bcdc780611e5fa808dc647b9a71eb07c292d
Перейти к файлу
Код
task_3.py
"""
Тема: управление складом и прибыльностью

Вводные: Компания хранит данные о товарах на складе. Для каждого товара известны:
- название, - закупочная цена, - цена продажи, - количество на складе, - проданное количество
Нужно рассчитать прибыль и определить проблемные товары.
"""

products = [
    {"name": "Laptop", "cost_price": 700, "sell_price": 900, "stock": 10, "sold": 6},
    {"name": "Mouse", "cost_price": 10, "sell_price": 20, "stock": 50, "sold": 30},
    {"name": "Keyboard", "cost_price": 25, "sell_price": 45, "stock": 20, "sold": 5},
    {"name": "Monitor", "cost_price": 200, "sell_price": 300, "stock": 15, "sold": 2},
]
"""
Задачи
1. Прибыль по товару
Написать функцию: def calculate_product_profit(product):
Функция должна вернуть: (sell_price - cost_price) \* sold
"""


def calculate_product_profit(product: dict) -> float | None:
    if product.get("cost_price") and product.get("sell_price") and product.get("sold"):
        return (product["sell_price"] - product["cost_price"]) * product["sold"]


"""
2. Общая прибыль компании
Написать функцию: def calculate_total_profit(products):
Функция должна: - использовать calculate_product_profit(); - вернуть суммарную прибыль
"""


def calculate_total_profit(products: list[dict]) -> float:
    result: float = 0.0
    for product in products:
        value: float | None = calculate_product_profit(product=product)
        if value:
            result += value
    return result


print(calculate_total_profit(products=products))

"""
3. Неликвидные товары
Написать функцию: def find_slow_moving_products(products, min_sales):
Функция должна вернуть список товаров: - у которых sold < min_sales
"""


def find_slow_moving_products(products: list[dict], min_sales: int) -> list[dict]:
    result: list[dict] = []
    for product in products:
        if product.get("sold") and product["sold"] < min_sales:
            result.append(product)
    return result


print(find_slow_moving_products(products=products, min_sales=5))

"""
4. Рейтинг товаров по прибыли
Написать функцию: def rank_products_by_profit(products):
Функция должна:- вернуть список товаров; - отсортированный по прибыли; - по убыванию;
Использовать: - функцию; - сортировку; - lambda;
"""


def get_profit(my_dict: dict) -> float:
    return my_dict["profit"]


def rank_products_by_profit(products: list[dict]) -> list[dict]:
    result: list[dict] = []
    for product in products:
        value: float | None = calculate_product_profit(product=product)
        if value:
            result.append({"name": product["name"], "profit": value})
    result.sort(key=get_profit, reverse=True)
    print(result)

    # print(sorted(result, reverse=True))


rank_products_by_profit(products=products)