def add(items, title, amount, expiration_date=None): if title in items: items[title].append({'amount': Decimal(amount), 'expiration_date': expiration_date})
def find(items, needle): result = [] for title in items: if query.lower() in title.lower(): result.append(title) return result
def amount(items, needle): 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(items, in_advance_days=0): 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.")
1. В функции `add_by_note`, в строке `add(product_name, amount, expiration_date)` не передаются аргументы `items` и `title`. 2. В функции `amount`, в строке `found_items = find('apple')`, вы вызываете функцию `find` с одним аргументом, но она ожидает два. 3. В функции `expire`, в строке `expiration_date = today + datetime.timedelta(days)`, не указано значение `days` для `timedelta`. 4. В функции `expire`, в строке `if item['expiration_date'] <= today or item['expiration_date'] >= expiration_date:`, оператор сравнения должен быть `and` вместо `or`, чтобы проверить, истек ли срок годности. 5. В функции `expire`, отсутствует отступ для блока `print(f"The item {title} has expired or will expire soon.")`.
Поправив эти ошибки, ваш код будет работать пр авильно.
При использовании функции add_by_note() вы указали только items, но не указали note. Вы должны указать note через запятую после items. Вы написали: add_by_note(items) А нужно: add_by_note(items, note)
Если я не ошибаюсь, вам просто нужно заменить: add_by_note('limes 4 2024-07-10') На: add_by_note('limes', '4 2024-07-10')
Я новичок в Python, так что не судите строго. Могу ошибаться.
В питоне есть такой прикол, что библиотека может не установиться, в основном потому что для еë установки нужны ещë какие то библиотеки. То есть одна библиотека работает за счëт другой библиотеки. Такая длиннющая цепочка библиотек. При установки библиотеки может вылазить ошибка установки, в которой сказано какую библиотеку сперва нужно установить, чтобы установить потом эту. Вся ущербность питона в этом, потому что на каждую библиотеку есть права доступа, и их могут в любой момент сделать платными, или вообще всем запретить еë использование. В итоге в цепочке библиотек отлетит огромный пласт возможностей, из за какого нибудь одного мудaка, который вдруг захотел слетать на море.
Код
import datetime
from decimal import Decimal
items = {
'apple': [],
'lime': [],
'grape': []
}
DATE_FORMAT = '%Y-%m-%d'
def add(items, title, amount, expiration_date=None):
if title in items:
items[title].append({'amount': Decimal(amount), 'expiration_date': expiration_date})
def add_by_note(items, 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(items, needle):
result = []
for title in items:
if query.lower() in title.lower():
result.append(title)
return result
def amount(items, needle):
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(items, in_advance_days=0):
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', '11', datetime.date (2024, 5, 1))
add('lime', '6', datetime.date (2024, 6, 20))
add('grape', '7', datetime.date (2024, 3, 15))
add_by_note('limes 4 2024-07-10')
print(find('apple'))
print(amount())