Python помогите пожалуйста решить задачу
Тестирование программы — значительная и обязательная часть работы, не пренебрегайте ей.
Подсказки
Формат даты можно определить константой DATE_FORMAT = '%Y-%m-%d'.
Функция add().
Проверить, есть ли продукт (title) в словаре items.
Преобразовать строку в дату с помощью модуля datetime.
Применить append для добавления словаря с ключами 'amount' и 'expiration_date' в список для конкретного title.
Функция add_by_note().
Разделить строку на части с помощью str.split.
Определить, является ли последняя часть строки датой.
Нужную часть строки конвертировать в число типа Decimal
Оставшуюся часть строки объединить, чтобы получить название продукта: если название состояло из нескольких слов — функция str.split разобъёт его на части.
Вызвать функцию add(), передав в неё получившиеся данные — название, количество и срок хранения.
Функция find().
Перебрать ключи словаря.
Применить функцию lower, чтобы провести поиск без учёта регистра.
Добавить найденные заголовки в результат поиска с помощью функции append.
Функция amount().
Применить функцию find() для получения списка подходящих товаров.
Суммировать значения amount для вычисления количества каждого найденного товара.
Функция expire().
Получить текущую дату с помощью datetime.date.today ().
Добавить определённое количество дней к текущей дате.
Проверить, истекает ли срок годности товара: сравнить его с текущей датой и с датой истечения срока годности.
from decimal import Decimal
import datetime
from datetime import date, timedelta
DATE_FORMAT = '%Y-%m-%d'
goods = {
'Яйца': [{'amount': Decimal('1'), 'expiration_date': datetime.date (2023, 6, 24)}],
'Яйца гусиные': [{'amount': Decimal('4'), 'expiration_date': datetime.date (2023, 7, 15)}],
'Морковь': [{'amount': Decimal('2'), 'expiration_date': datetime.date (2023, 8, 6)}]
}
def add(items, title, amount, expiration_date=None):
if not expiration_date == None:
date = datetime.datetime.strptime(expiration_date, DATE_FORMAT).date()
else:
date = None
values_dict = {'amount': amount, 'expiration date': date}
if title not in goods:
items_list = items.setdefault(title, [])
items_list.append({'amount': amount, 'expiration_date':date})
else:
items[title].append(values_dict)
add(goods, 'Молоко', Decimal('2'), '2023-12-15')
add(goods, 'Вода', Decimal('2.5'))
def add_by_note(items, note):
def find(items, needle):
...
def amount(items, needle):
...
def expire(items, in_advance_days=0):
...
import datetime
from decimal import Decimal
items = {
'apple': [],
'banana': [],
'orange': []
}
DATE_FORMAT = '%Y-%m-%d'
def add(title, amount, expiration_date):
if title in items:
items[title].append({'amount': Decimal(amount), 'expiration_date': expiration_date})
def add_by_note(note):
parts = note.split()
if parts[-1].isdigit():
amount = parts[-1]
product_name = ' '.join(parts[:-1])
expiration_date = datetime.datetime.strptime(parts[-1], DATE_FORMAT).date()
add(product_name, amount, expiration_date)
def find(query):
result = []
for title in items:
if query.lower() in title.lower():
result.append(title)
return result
def amount():
found_items = find('apple')
total_amount = 0
for title in found_items:
for item in items[title]:
total_amount += item['amount']
return total_amount
def expire(days):
today = datetime.date.today()
expiration_date = today + datetime.timedelta(days)
for title in items:
for item in items[title]:
if item['expiration_date'] <= today or item['expiration_date'] >= expiration_date:
print(f"The item {title} has expired or will expire soon.")
# Чисто примерчик
add('apple', '10', datetime.date(2022, 6, 1))
add('banana', '5', datetime.date(2022, 5, 15))
add('orange', '8', datetime.date(2022, 6, 20))
add_by_note('Grapes 4 2022-07-10')
print(find('apple'))
print(amount())
expire(30)