Монитор цен · Шаг 3 из 4
О чём сообщить
Изменений за день набирается полсотни, а Олегу интересно три: товар подешевел заметно — от десяти процентов, нужный товар снова на складе и новинки. И главное — не повторяться: если дрель уже подешевела до 4 790 ₽ и Олег об этом знает, завтра та же цена не новость.
Что сделать
Выберите из событий те, о которых стоит сообщить, и не повторяйте сообщённое: запомните, о какой цене уже сказали.
Что приходит
sobytiya— список событий, как его вернул шаг 2porog— на сколько процентов, целым числом, должна упасть цена, чтобы о ней сообщить:10pamyat— словарь «артикул → цена в копейках, о которой уже сообщили»; в первый раз — пустой
Что вернуть
Пару (uvedomleniya, pamyat): список событий с добавленным ключом "povod" и новую память — словарь, ключи по порядку.
Допишите функцию uvedomit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа загружает память из pamyat.json, зовёт uvedomit и сохраняет новую память обратно. Уведомления уходят в шаг 4. Решите шаг — и монитор перестанет повторять вчерашние новости.
Дрель подешевела с 5 490 до 4 790 ₽ — на 12,75%, это больше порога 10%; шуруповёрт снова на складе; появился новый набор бит. Сообщить обо всех трёх, а запомнить — цену дрели: {"A-101": 479000}.
sobytiya = [{"artikul": "A-101", "chto": "cena", "bylo": 549000, "stalo": 479000},
{"artikul": "A-102", "chto": "nalichie", "bylo": False, "stalo": True},
{"artikul": "A-104", "chto": "novyy", "bylo": None, "stalo": 129990}]
uvedomit(sobytiya, 10, {})
([{'artikul': 'A-101', 'chto': 'cena', 'bylo': 549000, 'stalo': 479000, 'povod': 'podeshevel'}, {'artikul': 'A-102', 'chto': 'nalichie', 'bylo': False, 'stalo': True, 'povod': 'snova_v_nalichii'}, {'artikul': 'A-104', 'chto': 'novyy', 'bylo': None, 'stalo': 129990, 'povod': 'novinka'}], {'A-101': 479000})
Каждое событие — по порядку списка:
"cena", обе цены неNoneи новая ниже:- падение меньше порога — не сообщать. Порог считается точно, без
дробей: падение на
porogпроцентов и больше —(bylo − stalo) · 100 ≥ porog · bylo. Ровно 10% при пороге 10 — сообщать. - артикул есть в памяти и там цена не выше новой — уже сообщали, молчать;
- иначе — сообщить с поводом
"podeshevel"и запомнить новую цену. "cena", новая выше старой: не сообщать; если артикул в памяти и новая цена выше запомненной — забыть его (цена вернулась, и следующее падение снова новость)."cena", где одна из ценNone, — ничего."nalichie"соstaloравнымTrue— сообщить, повод"snova_v_nalichii". Кончился на складе — ничего."novyy"— сообщить, повод"novinka"."propal"— не сообщать и забыть артикул в памяти.
Уведомление — копия события с ключом "povod" в конце:
{"artikul": …, "chto": …, "bylo": …, "stalo": …, "povod": …}. Память — новый словарь с ключами по порядку (sorted); словарь, который пришёл, не меняется.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.