Удаляем заказ
От менеджеров поступило требование написать функционал, который позволяет очищать заказ. Для этого нужно разработать функцию delete_order, которая имеет следующие параметры
обязательный ключевой параметр number_table - номер стола, где будем очищать заказ
необязательный ключевой параметр delete_all со значением по умолчанию False. Если передать в него True, должна очищаться полностью информация о заказе для указанного столика. При значении False удаление в заказе будет точечным по категориям
произвольное количество ключевых параметров с булевым значением вида
drink=True, desert=True, call=True, шаурма=True
Среди этих значений вам нужно удалять из заказа только те, имена которых находятся в списке категорий и переданное значение равно True
Для успешного решения задания вам необходимо определить новую функцию delete_order и продублировать ранее созданные reserve_table и make_order со всеми их зависимостями.
test
Sample Input 1:
tables = {
1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {}},
2: None,
3: None,
4: None,
5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}},
}
make_order(1, soup='Borsh')
make_order(1, soup='Лапша', bring='Салфетку', meal='Манка')
reserve_table(2, ‘Vlad’)
make_order(2, soup='Чечевичный', salad='Цезарь', breakfast='Яичница')
make_order(2, drink='Raf', main_dish='Утка по-пекински')
make_order(2, desert='Трюфель', call='такси')
print(tables)
delete_order(number_table=2, delete_all=True)
print(tables)
Sample Output 1:
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': ‘Лапша’}}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {'soup': ‘Чечевичный’, ‘salad’: ‘Цезарь’, ‘drink’: ‘Raf’, ‘main_dish’: ‘Утка по-пекински’, ‘desert’: ‘Трюфель’}}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': ‘Лапша’}}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {}}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
Failed test #1 of 4. Wrong answer
This is a sample test from the problem statement!
Test input:
tables = {
1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {}},
2: None,
3: None,
4: None,
5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}},
}
make_order(1, soup='Borsh')
make_order(1, soup='Лапша', bring='Салфетку', meal='Манка')
reserve_table(2, ‘Vlad’)
make_order(2, soup='Чечевичный', salad='Цезарь', breakfast='Яичница')
make_order(2, drink='Raf', main_dish='Утка по-пекински')
make_order(2, desert='Трюфель', call='такси')
print(tables)
delete_order(number_table=2, delete_all=True)
print(tables)
Correct output:
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': ‘Лапша’}}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {'soup': ‘Чечевичный’, ‘salad’: ‘Цезарь’, ‘drink’: ‘Raf’, ‘main_dish’: ‘Утка по-пекински’, ‘desert’: ‘Трюфель’}}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': ‘Лапша’}}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {}}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
Your code output:
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': }}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {'soup': , ‘salad’: , ‘drink’: , ‘main_dish’: , ‘desert’: }}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
{1: {'name': ‘Andrey’, ‘is_vip’: True, ‘order’: {'soup': }}, 2: {'name': ‘Vlad’, ‘is_vip’: False, ‘order’: {}}, 3: None, 4: None, 5: {'name': ‘Vasiliy’, ‘is_vip’: False, ‘order’: {}}}
Код программы.
CATEGORIES = ['soup', 'salad', 'drink', 'main_dish', 'desert'] def reserve_table(table_number, name, is_vip=False): """Резервирует столик и добавляет ключ 'order'.""" global tables if table_number not in tables: return "Столик с таким номером не существует." if tables[table_number] is not None: return "Столик занят." tables[table_number] = {"name": name, "is_vip": is_vip, "order": {}} return f"Столик {table_number} забронирован для {name}." def make_order(n, **kwargs): """Добавляет заказ к столику, если он есть в меню.""" global tables if n not in tables: return "Столик с таким номером не существует." if tables[n] is None: return "Столик не забронирован." for k, v in kwargs.items(): if k in CATEGORIES: tables[n]['order'][k] = v def delete_order(*, number_table, delete_all = False, **kwargs): """Удаляет заказ со столика.""" global tables if number_table not in tables: return "Столик с таким номером не существует." if delete_all: tables[number_table]['order'] = {} else: for category, delete_flag in kwargs.items(): if delete_flag and category in tables[number_table]['order'] and category in CATEGORIES: del tables[number_table]['order'][category]