返回错误值
我是Python的新手,将它作为工作培训的一部分进行学习,但是以一些HTML和C/C++开始。任何关于如何让这部分工作的建议都会很棒!返回错误值
def compute(tank_data): #in the parenthesis are the variables you want to pass from one def to another
aggregates = {}
list = []
for tank in tank_data: #
sum = 0
max_value = 0
min_value = 1000
#standdev = 0
for reading in tank_data[tank]:
sum = sum + float(reading)
'''max_value = round(max(float(reading)),2)
min_value = round(min(float(reading)),2)'''
if reading >= max_value:
max_value = float(reading)
else:
max_value = max_value
if reading <= min_value:
min_value = float(reading)
else:
min_value = min_value
#standdev
if tank in aggregates:
aggregates[tank]['avg'] = round(sum/len(tank_data[tank]),2) #computing and printing average simutaneously
aggregates[tank]['max'] = round(max_value,2)
aggregates[tank]['min'] = round(min_value,2)
#aggregates[tank]['STDEV'] = round()
else:
aggregates[tank] = {}
aggregates[tank]['avg'] = round(sum/len(tank_data[tank]),2)
aggregates[tank]['max'] = round(max_value,2)
aggregates[tank]['min'] = round(min_value,2)
#aggregates[tank]['STDEV'] = round()
print aggregates
我得到正确的平均值为我的文件(选中它擅长),但只有我的前三个最高值是正确的(满分,我经过这里跑6),所有的最小值回报“ 1000' 。
当我使用注释掉部分:
'''max_value = round(max(float(reading)),2)
min_value = round(min(float(reading)),2)'''
我得到的错误“浮动”对象不是可迭代。
任何帮助将不胜感激。 :)
使用Python的内置功能:
def compute(tank_data):
aggregates = {}
list = []
for tank, data in tank_data.iteritems():
numbers = [float(v) for v in data]
total = sum(numbers)
max_value = max(numbers)
min_value = min(numbers)
info = {
'avg': round(total/len(numbers),2)
'max': round(max_value,2),
'min': round(min_value,2),
}
aggregates.set_default(tank, {}).update(info)
print aggregates
@ Daniel。谢谢!我能够从你的答案中找到错误的后果。我现在正在获取最大值和最小值,但有些与我在Excel中获得的值不一样。 – TobyTobyo
你有一个单一的浮动/元素,不要打电话max
。如果你有一个列表,元组等..你会用最大的漂浮的,它是没有意义拿到单号的最大:
round(max(map(float,tank_data[tank])),2) # iterable of floats
round(float(reading),2) # single float
使用自己的代码,我想这是一个锻炼,映射所有漂浮,只是使用的阅读变量来检查:
sm = 0
max_value = float("-inf")
min_value = float("inf")
for reading in map(float,tank_data[tank]): # map all to float
sm += reading
reading = round(reading, 2) # single float
if reading > max_value:
max_value = reading
if reading < min_value:
min_value = reading
你并不需要使用max_value = round(...
你与你的if/else块做的逻辑。您应该只在检查当前值到目前为止所看到的最低/最高值之后才进行更新。
您应该避免使用sum和list作为变量名称,因为您正在隐藏内置函数。
谢谢@Padraic坎宁安。当我使用if/else语句时,它仍然不是很高兴。虽然谢谢!我现在有一切工作。 – TobyTobyo
@TobyTobyo,你实际上只需要如果只更新最大值和最小值,如果读数为当前最小或最大值 –
你怎么能得到一个单一的浮动的最大? –
只有无效的括号,修改说明,你会得到答案。 – ZdaR
谢谢!我能够在你们的帮助下和人们给出的答案中摆脱一个错误,但是错误的价值观带来了另一种错误。 – TobyTobyo