Fix bugs, refactor code

This commit is contained in:
Kirill Samoylenkov 2025-10-15 18:34:22 +05:00
parent 7c81017961
commit d69ac5ee42

View file

@ -2,57 +2,80 @@ import datetime
from decimal import Decimal from decimal import Decimal
def add(items, title, amount, expiration_date=None): # Создаем холодильник
# Который представляет собой словарь,
# Ключи - названия продуктов
# А значения - ревизии этих продуктов
# с указанием их веса и даты окончания срока годности (опционально)
def add(
fridge: dict,
title: str,
amount: int | str,
expiration_date=None,
) -> dict:
"""Функция для добавления ревизии в холодильник"""
# Получаем информацию о дате окончания срока годности
date = ( date = (
None None
if expiration_date is None if expiration_date is None
else datetime.date(*map(int, expiration_date.split("-"))) else datetime.date(*map(int, expiration_date.split("-")))
) )
if items.get(title) is None: # Создаем список ревизий при его отсутствии
items[title] = [] if fridge.get(title) is None:
fridge[title] = []
items[title].append( # Добавляем ревизию
fridge[title].append(
{ {
"amount": Decimal(amount), "amount": Decimal(amount),
"expiration_date": date, "expiration_date": date,
} }
) )
return items # Возвращаем измененный холодильник
return fridge
def add_by_note(items, note): def add_by_note(fridge: dict, note: str) -> str:
"""
Добавляем ревизию продукта в холодильник из заметки вида:
<название продукта> <кол-во> <дата-окончания-срока-годности>
"""
# Получаем список данных из заметки
data = note.split() data = note.split()
# Рассматриваем отдельно заметки с и без срока годности
if "-" in data[-1]: if "-" in data[-1]:
date = data[-1] date = data[-1]
amount = data[-2] amount = data[-2]
title = " ".join(data[:-2]) title = " ".join(data[:-2])
else: else:
date = None date = None
amount = float(data[1]) amount = data[-1]
title = data[0] title = " ".join(data[:-1])
return add(items, title, amount, date) return add(fridge, title, amount, date)
def find(items, needle): def find(fridge: dict, needle: str) -> list[str]:
keys = list() """Поиск всех продуктов по подстроке"""
titles = list()
needle = needle.lower() needle = needle.lower()
for good_name in items.keys(): for title in fridge.keys():
if needle in good_name.lower(): if needle in title.lower():
keys.append(good_name) titles.append(title)
return keys return titles
def amount(items, needle): def amount(fridge: dict, needle: str) -> Decimal:
keys = find(items, needle) """Подсчет веса всех продуктов содержащих подстроку"""
cnt = 0 titles = find(fridge, needle)
amounts = 0
for key in keys: for title in titles:
cnt += sum([good["amount"] for good in items[key]]) amounts += sum([good["amount"] for good in fridge[title]])
return Decimal(cnt) return Decimal(amounts)