Мне нравится твой вопрос, поэтому я взял перерыв на обед, чтобы попробовать. Я предполагаю, что вы можете выбрать формат набора данных. Я предлагаю вам сохранить их в виде списков. Вот мой собственный набор данных, основанный на вашем.
orders = [['ORDB10489',[('Coffee', 2), ('Salad', 2), ('Chicken', 1), ('Steak', 1)],'Lunch',40],
['ORDZ00319',[('Fish&Chips', 1), ('Pasta', 3), ('Shrimp', 2)],'Dinner',57.5],
['ORDB00980',[('Pasta', 4), ('Fish&Chips', 3)],'Dinner',50.5],
['ORDC10404',[('Burger', 1), ('Salad', 1), ('Coffee', 1)],'Lunch',18]]
Меню с ценами:
lunch = [['Coffee',2.00],['Salad',6.50],['Burger',8.00],['Chicken',10.00],['Steak',13.00]]
dinner = [['Fish&Chips',7.50],['Pasta',7.00],['Shrimp',14.50]]
Это очень простой код с доступом к переменным на основе элемента формата [i] [J]. Например: [(«Кофе», 2), («Салат», 2), («Курица», 1), («Стейк», 1)]. Он принадлежит подсписку с именем order, тогда к 1-му элементу обращаются по порядку [d] [0], а к 2-му - по ссылочному порядку [d] [1]. Итак, заказ [0] [0] - это кофе, заказ [1] [0] - салат, заказ [0] [1] - 2, а заказ [2] [1] - 1.
Код:
# reading all the orders, one by one
for o in range(len(orders)):
order_id = orders[o][0]
order = orders[o][1]
paid = [] # empty list for every new order
# reading all dishes, one by one
for d in range(len(order)):
dish = order[d][0]
quantity = order[d][1]
service = orders[o][2]
if service == 'Lunch':
for lu in range(len(lunch)):
if dish == lunch[lu][0]:
amount = quantity*(lunch[lu][1])
paid.append(amount)
else :
for di in range(len(dinner)):
if dish == dinner[di][0]:
amount = quantity*(dinner[di][1])
paid.append(amount) # adding to the paying list
due = sum(paid) #sum of dishes in the list
bill = orders[o][3]
print(order_id,due,bill)
Выход:
ORDB10489 40.0 40
ORDZ00319 57.5 57.5
ORDB00980 50.5 50.5
ORDC10404 16.5 18