Проблема Python: функция, которая вычисляет значение из двух заданных словарей - PullRequest
0 голосов
/ 04 апреля 2011

Это учебная проблема, с которой я столкнулся, и после изучения Python в течение месяца, это очень меня беспокоит, поскольку я не сталкивался с подобным типом проблем раньше.

Я хочу рассчитать общую стоимость данного 'id' из 2 словарей.
Ниже показаны мои словари:

a = {'HIN3': ('Plastic Wrap', 50), 'GIN2': ('Cocoa', 80), 'LIN1': ('Bayleaf', 25), 'TIN6': ('Powder Scent': 210), 'QIN8': ('Color 55': 75)}

1-е значение - это id, затем 2-е содержитсписка пар, состоящего из имени и его стоимости.

b = {'candy1': ('Choco fudge', [('HIN3', 1), ('GIN2', 5)]), 'candy2': ('Mint Lolly', [('LIN1', 3), ('GIN2', 1), ('HIN3', 1)]), 'candy3': ('MILK', [('HIN3', 1), ('TIN6', 4), ('QIN8', 1)])}

, где 1-е значение - это идентификатор dict b, 2-е - список, который содержит имя и ингредиенты, необходимые дляпроизводить продукт.

Теперь мне нужно создать функцию (get_cost (id)), которая выдала бы общую стоимость с учетом идентификатора dict b.
Например, результат get_cost ('candy1') будет 450так как ему нужно 1 из HIN3 (50) и 5 ​​из GIN2 (5 * 80 = 400), поэтому стоимость составляет 50 + 400 = 450. Обратите внимание, что я хочу вернуть стоимость как целое число.

1 Ответ

2 голосов
/ 04 апреля 2011

Во-первых, простая в использовании функция:

def getCost(id):
    total_cost = 0
    ingredients = b[id][1] # Second element of tuple is ingredient list

    for ingredient, amount in ingredients:
        total_cost += a[ingredient][1] * amount

    return total_cost

Теперь, симпатичный однострочный:

def getCost(id):
    return sum(a[ingredient][1] * amount for ingredient, amount in b[id][1])

Я не проверял их, если вы обнаружите проблемы, дайте мне знать. Или, что еще лучше, исправьте их самостоятельно :) В конце концов, проблемы с учебником для вас! Поиграйте, ошибитесь, исправьте, попробуйте еще раз .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...