我查字典时遇到问题。程序应该打印字典中每个名字旁边数字的平均值。谁能帮我弄清楚我做错了什么吗?以下是我当前的代码:
guest={"Mary":"15", "Joe":"13", "Dustin":"12"}
def CalcAverage(guest):
total = 0.0
numPersons = 0
for key,value in guest.items():
numPersons += len(guest[key])
total = float(sum(guest[value]))
return total/numPersons
print CalcAverage(guest)
Value是一个str类型,您可以将其转换为float和simple increment to total
可以在python3.0中的functools中使用reduce is。它更复杂。它接受迭代器来处理,但它本身不是迭代器。它返回单个结果
^{pr2}$你一直在给你的数字定义一个字符串,这使得它们不那么容易处理。最好是:
或者已经是浮动的:
^{pr2}$您还使用了
float(sum(guest[value])
,它有两个主要问题:guest[value]
试图从字典中获取存储在value
中的键的值。但是value
不是键,它不能工作。在sum()
求和。在代码中还有许多其他问题,例如:
for key,value in guest.items():
使键和它们的值可用作for块中的key
和{guest
。这意味着guest[key]
与{len(guest[key])
将返回value
的长度,这是一个数字,并将返回2
(所有数字字符串都有两个数字)。在要归档的内容可以更容易地完成:
第一行是字典的长度。第二行从列表中提取所有值并将其转换为浮点值。这是一个列表理解。最后一行求和值并返回平均值。顺便说一句:我还将函数的名称调整为函数的常用Python命名约定。在
你做错了什么:
key
和{guest[key]
。在numPersons
应该在循环的每次迭代中递增1, 不是按len(guest[key])
所做的值的长度。在total
应累计值的总和,而不是赋值 对每个人,即total += float(value)
。在更正这3项会产生如下代码:
通过使用生成器表达式将每个值转换为浮点值,将这些浮点值求和,然后除以来宾词典中的项数,可以简化此过程:
^{pr2}$相关问题 更多 >
编程相关推荐