Как извлечь соответствующее значение из словаря Python? - PullRequest
0 голосов
/ 03 сентября 2018

Я написал простой Python, который дает представление о том, как работает система, но общая сумма не рассчитывается. Теперь я хочу получить соответствующее значение (то есть тип конуса, аромат Scoop для каждого ковша и аромат Topping для каждого топинга) и рассчитать общую стоимость и, наконец, отобразить детали, выбранные в деталях (пункт -> цена и количество) и Итоговая сумма.

customername = input("Enter the customer's name....")
ic_no = int(input("Enter the number of ice-creams you want to buy"))
total = {}
for i in range(1, ic_no + 1):
    print("For item ", i)
    cone = int(input("Enter the cone type: "))
    scoop = int(input("Enter the scoop amount: "))
    for j in range(1, scoop+1):
        #select flavor type for each scoop
        flavor = int(input("Entr No."+ str(j) +" flavor")) 
    topping = int(input("Entr the toppings amount: "))
    for k in range(1, topping+1):
        #select flavor type for each topping
        top_flavor = int(input("Entr No." + str(k) +" topping flavor"))

print("Total price is ", total)

Я хочу получить выбранные предметы, просто передав номер. Например: 1 для «простого» типа конуса.

cone_type = (
    {"name": "Plain",     "price": 2},
    {"name": "Wafle",     "price": 3},
)
scoop_flavor = (
    {"name": "Mint",        "price": 1},
    {"name": "Caramel",     "price": 1},
    {"name": "Chocolate",   "price": 1},
    {"name": "Apple",       "price": 1},
)

topping_flavor = (
    {"name": "Chocolate",         "price": 1},
    {"name": "Caramel",           "price": 0.5},
    {"name": "Peanut",            "price": 0.5},
    {"name": "Coconut Sprinkle",  "price": 0.25},
)

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Я хотел бы добавить к ответу blue_note и предложил бы использовать Enum для получения cone_type, как показано ниже:

  class ConeType (enum.Enum):
        PLAIN = 1
        WAFLE = 2

print(ConeType(1).name);
0 голосов
/ 03 сентября 2018

Вы можете изменить свои структуры данных инвентаризации на словари int: list-of-details вместо ваших текущих списков словарей.

Например:

cone_type = {1:["Plain", 2], 2:["Waffle", 3]}

Для простого конуса имя доступно с cone_type[1][0], а цена с cone_type[1][1].

Вы могли бы также подумать о создании каждого класса для шишек, ароматизаторов и начинки. Затем вы можете использовать их как значения для словарей вместо списков. Это позволит вам получить доступ к информации о продукте как cone_type[1].getName() и cone_type[1].getPrice(), что намного проще для чтения!

0 голосов
/ 03 сентября 2018

Просто отфильтруйте кортеж, чтобы получить (только) действительную запись, и получите ее цену

def get_price(cone_types, cone_name):
    return [cone['price'] for cone in cone_types if cone['name']==cone_name][0]

Однако, если у вас есть только имя и цена, вероятно, лучше было бы напрямую сформировать ваш словарь как

 cone_types {'plain': 2, 'wafle': 3}

и аналогично для других диктовок. Вот как словари предназначены для использования, ключ должен иметь различающее значение.

...