我正在尝试使用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函数而不是循环因为我试图打印出只有成本和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)
编辑:还有,有一个函数可以对循环求和吗?因为我应该找到一个单一的最终价值,如果一切都卖
答案 0 :(得分:1)
一种方法是仅循环键:
for key in prices:
if key in stock:
print(prices[key] * stock[key])
虽然在你的情况下两个词典都有相同的键,但我添加了一个条件来检查prices
中的每个键是否也在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)
答案 1 :(得分:1)
cost
和quan
都是列表,无法传递给float
。我怀疑为什么你让解决方案变得复杂。你可以使用:
for fruit in prices:
print prices[fruit] * stock.get(fruit, 0)
或者如果你愿意,你可以使用字典理解来使结果更清晰:
{fruit: prices[fruit]*stock.get(fruit, 0) for fruit in prices}
答案 2 :(得分:0)
您正在将quan
设置为dict中所有值的列表。那不是你想要的;您正在寻找与name
对应的单个值作为关键字。