使用词典计算购物清单总数

时间:2015-03-22 01:27:43

标签: python list dictionary shopping

我尝试调用列表中的购物清单的字典值总数,但是错误已经出现并且汇总到10.5而不是7.5,它应该给出列表中项目的总价格,任何列表。

stock = {
    "banana": 6,
    "apple": 0,
    "orange": 32,
    "pear": 15
}

prices = {
    "banana": 4,
    "apple": 2,
    "orange": 1.5,
    "pear": 3
}

# Write your code below!

def compute_bill(food):
    total = 0
    for item in food:
        item = shopping_list(prices[key])
        total += item
    return total
shopping_list = ["banana", "orange", "apple"]  

4 个答案:

答案 0 :(得分:3)

您可以使用列表推导...

sum([ prices[s] for s in shopping_list ])

答案 1 :(得分:2)

我假设你想要计算物品清单的总成本。

您的现有代码存在一些问题:

  • shopping_list是字典,不是函数或类(或“可调用”)。您可以使用shopping_list[key]
  • 访问其中的项目
  • 您正在执行for item in foods但是您正在分配给item。这可能不是你想要的。
  • 除了key 之外,代码中的任何位置都不存在
  • prices[key]

我认为你想要compute_bill函数:

def compute_bill(food):
    total = 0
    for item in food:
         total += prices[item]
    return total

然后,您可以使用compute_bill(shopping_list)调用此方法。此函数现在将返回7.5(这是您要查找的结果)。

答案 2 :(得分:2)

您的代码和其他所有人都忽略了stock,因此它可以销售的商品多于库存商品;大概这是一个错误,你应该强制执行这个限制。有两种方式:

迭代方法:for item in food: ...检查stock[item]是> 0,如果是,则添加价格,递减stock[item]。但是你可以简单地对每个项目计数求和并用库存计算min()。

更多Pythonic和更短:

# Another test case which exercises quantities > stock
shopping_list = ["banana", "orange", "apple", "apple", "banana", "apple"]

from collections import Counter    
counted_list = Counter(shopping_list)
# Counter({'apple': 3, 'banana': 2, 'orange': 1})

total = 0
for item, count in counted_list.items():
    total += min(count, stock[item]) * prices[item]

或作为单行:

sum( min(stock[item],count) * prices[item] for item,count in Counter(shopping_list).items() )

答案 3 :(得分:0)

您的代码看起来很奇怪,但这样做有效:

def compute_bill(food):
    total = 0
    for item in food:
        total += prices[item]
    return total

shopping_list = ["banana", "orange", "apple"] print
compute_bill(shopping_list)

我假设您要使用prices字词来计算shopping_list中商品的价格。

如果您需要任何帮助,请问我。