2015-06-19 173 views
-1

我是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)''' 

我得到的错误“浮动”对象不是可迭代

任何帮助将不胜感激。 :)

+2

你怎么能得到一个单一的浮动的最大? –

+1

只有无效的括号,修改说明,你会得到答案。 – ZdaR

+0

谢谢!我能够在你们的帮助下和人们给出的答案中摆脱一个错误,但是错误的价值观带来了另一种错误。 – TobyTobyo

回答

-1

使用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 
+0

@ Daniel。谢谢!我能够从你的答案中找到错误的后果。我现在正在获取最大值和最小值,但有些与我在Excel中获得的值不一样。 – TobyTobyo

0

你有一个单一的浮动/元素,不要打电话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作为变量名称,因为您正在隐藏内置函数。

+0

谢谢@Padraic坎宁安。当我使用if/else语句时,它仍然不是很高兴。虽然谢谢!我现在有一切工作。 – TobyTobyo

+0

@TobyTobyo,你实际上只需要如果只更新最大值和最小值,如果读数为< or >当前最小或最大值 –