Загрузка данных
from datetime import datetime
class Product:
def __init__(
self, name: str, quantity: float, expiration_date: str | datetime
):
"""Продукт с наименованием, количеством (весом/объемом) и сроком годности."""
self.name = name.strip()
self.quantity = quantity # Количество / вес в граммах, мл или шт.
if isinstance(expiration_date, str):
self.expiration_date = datetime.strptime(
expiration_date, "%d-%m-%y"
).date()
else:
self.expiration_date = expiration_date
def __repr__(self):
date_str = self.expiration_date.strftime("%d-%m-%Y")
return f"Product(название='{self.name}', кол-во={self.quantity}, до={date_str})"
class Fridge:
def __init__(self, limits: dict[str, float] = None):
"""Холодильник содержит список продуктов и минимальные допустимые лимиты по наименованиям."""
self.products: list[Product] = []
# Словарь минимальных лимитов, например: {"молоко": 1000, "сыр": 200}
self.limits = limits if limits is not None else {}
def set_limit(self, category_name: str, min_quantity: float):
"""Установить или обновить критический предел для категории продуктов."""
self.limits[category_name.lower().strip()] = min_quantity
def add_product(self, product: Product):
"""Функция добавления продукта в холодильник."""
self.products.append(product)
print(f"Добавлено: {product}")
def search_by_name(self, search_term: str) -> list[Product]:
"""Функция поиска продуктов по наименованию (например, все 'молоко' или весь 'сыр')."""
term = search_term.lower().strip()
found = [p for p in self.products if term in p.name.lower()]
return found
def get_total_quantity_by_category(self, category_name: str) -> float:
"""Суммирует количество всех продуктов одного вида/категории."""
category = category_name.lower().strip()
total = sum(
p.quantity
for p in self.products
if category in p.name.lower()
)
return total
def check_replenishment_list(self) -> dict[str, dict[str, float]]:
"""Мониторинг веса и вывод списка продуктов к пополнению.
Сравнивает суммарный остаток каждого наименования с минимальным
критическим пределом.
"""
replenishment_needed = {}
for category, limit in self.limits.items():
current_total = self.get_total_quantity_by_category(category)
if current_total < limit:
replenishment_needed[category] = {
"текущее_количество": current_total,
"критический_предел": limit,
"необходимо_докупить": limit - current_total,
}
return replenishment_needed
# ==========================================
# Пример использования (по данным с доски):
# ==========================================
# 1. Создаем холодильник и задаем минимальные лимиты (в граммах/мл)
fridge = Fridge(
limits={
"молоко": 1000, # Минимальный лимит молока — 1000 гр (1 л)
"сыр": 200, # Минимальный лимит сыра — 200 гр
}
)
print("--- 1. Добавление продуктов в холодильник ---")
# Добавляем Молоко 1 и Молоко 2
fridge.add_product(Product("Молоко 1", 700, "15-10-26"))
fridge.add_product(Product("Молоко 2", 200, "07-10-26"))
# Добавляем Сыр 1 и Сыр 2
fridge.add_product(Product("Сыр 1", 100, "15-12-26"))
fridge.add_product(Product("Сыр 2", 50, "05-12-26"))
print("\n--- 2. Поиск по наименованию ---")
milk_list = fridge.search_by_name("молоко")
print("Найденные позиции молока:", milk_list)
cheese_list = fridge.search_by_name("сыр")
print("Найденные позиции сыра:", cheese_list)
print("\n--- 3. Проверка продуктов к пополнению (Мониторинг веса) ---")
to_buy = fridge.check_replenishment_list()
for item, info in to_buy.items():
print(
f"Продукт '{item}': осталось {info['текущее_количество']}, "
f"предел = {info['критический_предел']}. "
f"Нужно докупить: {info['необходимо_докупить']}"
)