Начнем с объявления словаря goods и добавления пары продуктов в него:
goods = {
'apple': [{'amount': 5, 'expiration_date': '2022-12-31'}],
'banana': [{'amount': 3, 'expiration_date': '2023-06-15'}]
}
Теперь приступим к написанию функции add(), которая будет добавлять новые продукты в словарь goods:
from datetime import datetime
DATE_FORMAT = '%Y-%m-%d'
def add(title, amount, expiration_date):
if title in goods:
goods[title].append({'amount': amount, 'expiration_date': datetime.strptime(expiration_date, DATE_FORMAT)})
else:
goods[title] = [{'amount': amount, 'expiration_date': datetime.strptime(expiration_date, DATE_FORMAT)}]
# Примеры вызова функции add()
add('orange', 2, '2023-04-20')
add('apple', 3, '2023-02-28')
Далее создадим функцию add_by_note(), которая будет принимать строку в формате "название продукта, количество, срок годности" и разбирать её на составляющие:
from decimal import Decimal
def add_by_note(note):
parts = note.split(',')
if len(parts) != 3:
print('Некорректный формат заметки')
return
title = ' '.join(parts[0].split()) # убираем лишние пробелы
amount = int(parts[1])
expiration_date = parts[2].strip()
add(title, amount, expiration_date)
# Пример вызова функции add_by_note()
add_by_note(' tomato , 4 , 2023-08-10 ')
Теперь напишем функцию find(), которая будет выполнять поиск продукта по подстроке в его названии:
def find(query):
results = []
for title in goods:
if query.lower() in title.lower():
results.append(title)
return results
# Пример вызова функции find()
print(find('app'))
Далее реализуем функцию amount(), которая будет считать общее количество продукта по всем его позициям:
def amount(title):
total_amount = 0
for item in goods.get(title, []):
total_amount += item['amount']
return total_amount
# Пример вызова функции amount()
print(amount('apple'))
И наконец, создадим функцию expire(), которая будет проверять истек ли срок годности у продукта:
def expire(title):
today = datetime.today().date()
for item in goods.get(title, []):
if item['expiration_date'] < today:
print(f'{title} просрочен!')
elif item['expiration_date'] == today:
print(f'{title} истекает сегодня!')
else:
print(f'{title} ещё свежий')
# Пример вызова функции expire()
expire('apple')
После написания всех функций, протестируйте их вызывая с разными аргументами и проверяя корректность работы.
Как-то так! Удачи!?
С чего начать
Не пытайтесь выполнить всю работу одновременно: делайте работу по шагам.
Объявите словарь goods, добавьте в него пару продуктов — их можно скопировать из приведённых примеров.
Займитесь функцией add() — научите её добавлять продукты в словарь. Протестируйте работу этой функции и переходите к следующей. На каждом этапе перечитывайте подсказки и описания, относящиеся к функции, над которой вы работаете.
Каждую готовую функцию вызовите несколько раз с разными аргументами: с необязательными аргументами и без них, со вчерашней и завтрашней датой (через сто лет — тоже попробуйте), передавайте в add() и add_by_note() новые продукты и те, что уже есть в словаре goods.
Тестирование программы — значительная и обязательная часть работы, не пренебрегайте ей.
Подсказки
Формат даты можно определить константой 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 ().
Добавить определённое количество дней к текущей дате.
Проверить, истекает ли срок годности товара: сравнить его с текущей датой и с датой истечения срока годности.