0

我正在尝试使用 codeacademy 学习 python,任务是获取两个给定的字典(一个是食物列表和购买价格 + 第二个是相同食物的列表,但库存数量)并计算如何如果所有的食物都卖掉,我会有很多收入。

起初,我收到此错误消息"can't multiply sequence by non-int of type 'list'"。我认为这很奇怪,因为我调用的值是数字?o_O 但没关系,然后我尝试使用 float 函数转换字符串(使用float(quan)float(cost)计算时)。但是然后,我会收到此错误:"TypeError: float() argument must be a string or a number" 我也尝试通过做来转换,float(prices.value())但这也给出了相同的错误消息。我认为错误在于我如何使用 float 函数而不是循环,因为我试图只打印出 cost 和 quan 并且输出看起来很正常。

非常感谢您的帮助。

 prices = {
     "banana": 4,
     "apple": 2, 
     "orange": 1.5, 
     "pear": 3, 
 }
 name, cost = prices.keys(), prices.values()    
 stock = {
     "banana": 6,
     "apple": 0,
     "orange": 32,
     "pear": 15
 }
 items, quan = stock.keys(), stock.values()
 for name, cost in prices.iteritems():
    print float(cost) * float(quan)

编辑:另外,是否有对循环求和的功能?因为如果一切都卖掉,我应该找到一个单一的最终价值

4

3 回答 3

1

一种方法是仅遍历键:

for key in prices:
    if key in stock:
        print(prices[key] * stock[key])

尽管在您的情况下,两个字典都具有相同的键,但我添加了一个条件来检查每个键 inprices是否也在stock. 然后,假设是,将字典值相乘。


将所有值相加,

print(sum(prices[key] * stock[key] for key in prices))

如果你想包括条件,

print(sum(prices[key] * stock[key] for key in prices if key in stock))

或者,如果您想在多行上使用它:

total = 0

for key in prices:
    total += prices[key] * stock[key]

print(total)
于 2013-07-19T04:00:39.390 回答
1

和都是列表costquan它们不能传递给float。我怀疑你为什么让解决方案变得复杂。您可以使用:

for fruit in prices:
    print prices[fruit] * stock.get(fruit, 0)

或者,如果您愿意,可以使用 dict 理解使结果更清晰:

{fruit: prices[fruit]*stock.get(fruit, 0) for fruit in prices}
于 2013-07-19T04:02:27.480 回答
0

您正在设置quan字典中所有值的列表。那不是你想要的;您正在寻找与name作为键对应的单个值。

于 2013-07-19T04:00:40.000 回答