Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача python нужна помощь

Александр Захаров Ученик (60), открыт 2 недели назад
Опишите функции add(), add_by_note(), find(), amount() и expire().
С чего начать
Не пытайтесь выполнить всю работу одновременно: делайте работу по шагам.
Объявите словарь 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 ().
Добавить определённое количество дней к текущей дате.
Проверить, истекает ли срок годности товара: сравнить его с текущей датой и с датой истечения срока годности.
Дополнен 2 недели назад
def add(items, title, amount, expiration_date=None):
...


def add_by_note(items, note):
...


def find(items, needle):
...


def amount(items, needle):
...


def expire(items, in_advance_days=0):
...
Дополнен 2 недели назад
Вам предстоит написать программу, которая будет:
хранить перечень продуктов, их количество и срок годности;
позволит добавлять новые продукты в перечень продуктов;
позволит получать информацию о содержимом холодильника.
Информация о каждом продукте — это
название продукта,
количество продукта (в килограммах или штуках),
срок хранения (дата, до которой продукт может храниться).
Информация о наборе продуктов в холодильнике должна храниться в виде словаря goods.
goods = {
'Пельмени Универсальные': [
{'amount': Decimal('0.5'), 'expiration_date': datetime.date (2023, 7, 15)},
{'amount': Decimal('2'), 'expiration_date': datetime.date (2023, 8, 1)}
],
'Вода': [{'amount': Decimal('1.5'), 'expiration_date': None}]
}
В примере видно, что продукт «Вода» закуплен один раз в объёме 1.5 кг. Однако продукт с одним и тем же названием может быть закуплен и добавлен в холодильник несколько раз.
Например, неделю назад пользователь купил килограмм пельменей под названием «Универсальные», половину съел, а потом пошёл и купил ещё два килограмма. Название у продукта одно и то же, но срок хранения может оказаться разным. Каждую такую закупку мы будем называть партия продукта.
Таким образом, у любителя пельменей в холодильнике окажется две партии продукта «Пельмени Универсальные». В первой партии будет 0.5 кг продукта, во второй — 2 кг. Срок хранения у этих партий тоже будет разным.
Ключ каждого элемента словаря — это название определённого продукта. Значение каждого элемента словаря — это список словарей.
Каждый вложенный словарь содержит два элемента:
amount — количество продукта.
expiration_date — срок годности.
3 ответа
Просветленный (24957) 2 недели назад
Начнем с объявления словаря 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')
После написания всех функций, протестируйте их вызывая с разными аргументами и проверяя корректность работы.

Как-то так! Удачи!?
Александр ЗахаровУченик (60) 2 недели назад
Привет! Спасибо большое! Подскажи решение, сижу и пробую вот, такую ошибку выдает, где строка
add_by_note(' tomato , 4 , 2023-08-10 ')

Traceback (most recent call last):
File "main.py", line 26, in <module>

TypeError: add_by_note() missing 1 required positional argument: 'note'
Александр Захаров, переводчик используй а потом пожалуйста спрашивайте
Павел Сергеевич Ильин Мудрец (14866) 2 недели назад
Помолись перед выходом в Интернет так: Го́споди Бо́же на́ш, Тво́рче не́ба1 и земли́, созда́вый челове́ка и дарова́вый ему́ ве́дение2 сокрове́нной прему́дрости3, во е́же прославля́ти и́мя Твое́, горе́4 и до́лу5 Ты́ еси́, Твое́ е́сть ночь и Твое́ е́сть де́нь, не утая́тся пред Тобо́ю да́же мимолетные движе́ния мы́сли.
И ны́не молю́ Тя́, от вся́каго греха́ сохрани́ мя́, приступа́ющаго к рабо́те с хитроумным творе́нием ру́к челове́ческих, проникающим во вся́ концы́ земли́.
Огради́ о́чи мои́ и у́м мо́й от вся́ких нечи́стых и блу́дных образо́в, от пусты́х и негодных слове́с.
Укрепи́ во́лю, се́рдце очи́сти, не да́ждь ми́ вотще́6 расточа́ти вре́мя жи́зни моея́, и от вся́каго расслабления и уны́ния изба́ви.
Да бу́дут дела́ на́ши во сла́ву Твою́!
Ами́нь.
Похожие вопросы