【问题标题】:Finding average in a file在文件中查找平均值
【发布时间】:2017-02-18 01:40:57
【问题描述】:

我应该做的一件事是从我收到的文件中的数据中找出平均通货膨胀率。它给出了yearinterestinflation,以及它下面的所有数字。看起来像这样。

year interest inflation
1900  4.61    8.1

这会更进一步,一直到 2008 年。在 Germancoder 的帮助下,我取得了一些进展。不过我还是卡住了。

到目前为止的代码如下所示。

def myTest(file):
     with open ('filename', 'r') as f:
          inflation = []
          header = 1
          for line in f:
               if header !=1:
                    infl = line.split(",")[2]
                    inflation.append(float(infl))
                    header += 1

           avgInflation = sum(inflation)/len(inflation)

     return avgInflation

我认为,问题在于顶部的年度利率通胀造成了问题。所以在帮助下,我在代码中添加了一些东西,但我仍然遇到错误。它说除以零错误,第 11 行。对我现在应该做什么有什么想法吗?

实际文件名为 Inflation.csv。我自己做了一个简单的程序,它在解释器中打印出来,用逗号分隔,这就是为什么我这样做 (",")

【问题讨论】:

  • 如果 len(inflation) 为零,这意味着您永远不会在通货膨胀列表中添加任何内容。而且您永远不会向列表中添加任何内容,因为您已将 header 设置为 1,并且仅在 header 不是 1 时执行操作。
  • 你设置了 header = 1。所以,如果块永远不会被执行。膨胀数组的大小为 0,除以零错误是不可避免的。
  • 您传入file,但从未使用它。 (此外,使用与内置变量同名的变量也是个坏主意。)
  • 只需将header += 1if header !=1 对齐,或者直接调用next(f) 并忘记它。此外,如果您有 csv,则使用 csv lib 读取文件可能会更好。尽管您在所显示的内容中似乎有空格,但不确定为什么要使用逗号分隔。

标签: python average mean


【解决方案1】:

由于header += 1 是在header != 1header 的初始值为1 的条件下,所以永远不会满足您附加到标头的条件。因此,您正在遍历数组并且什么都不做。在计算平均值的方法结束时,您的 inflation 列表仍然为空,因此 len(inflation) 解析为 0

您也错误地读取了文件中的行。我认为您想使用f.readlines() 将它们作为行来阅读?

def myTest(file):
     with open ('filename', 'r') as f:
          lines = f.readlines() <--- 2 
          inflation = []
          header = 1
          for line in lines:
               if header !=1:
                    infl = line.split(",")[2]
                    inflation.append(float(infl))
               header += 1 <--- 1 

           avgInflation = sum(inflation)/len(inflation)

     return avgInflation

【讨论】:

  • 他们正在正确读取文件。调用 readlines 实际上是一种更糟糕的方法。
【解决方案2】:

您正在初始化header = 1,并在检查header 是否不是一之后初始化inflinflation 的值,因此avgInflation = sum(inflation)/len(inflation) 有效地变为:

avgInflation = sum(0/len(0))

确保在除法中使用通货膨胀之前检查它是否具有值。也许你的意思是初始化header = 0

【讨论】:

  • 在顶部,如果我执行 header = 0 ,它只会告诉我它无法将字符串转换为浮点数 :(
  • 我不确定我是否遵循了这个问题。 header = 0 的声明和赋值根本不涉及字符串。
  • 对不起,就像我说的,我对编程很陌生。感谢所有的帮助!有人能解释一下 += 的作用吗?
  • header = header + 1做一模一样
  • 好的。感谢您的澄清
【解决方案3】:

这个怎么样?

def myTest(file):
    with open ('filename', 'r') as f:
        inflation = []
        header = 1
        for line in f:
            if header == 1:
                header += 1
                continue
            else:
                infl = line.split(",")[2]
                inflation.append(float(infl))

        avgInflation = sum(inflation)/len(inflation)

    return avgInflation

我认为这应该可以解决问题。

【讨论】:

    【解决方案4】:

    正如我所见,您在 for 循环之外将变量 header 初始化为 1。 在 for 循环中,您检查 header 是否不等于 1,如果等于 1,则不执行任何操作。 For 循环永远不会进入 if header !=1: 它只是遍历你的整个文件并退出 for 循环而不做任何事情。 在第 11 行,len(inflation) 为 0,因为您从不向其附加任何内容。 您应该更改条件循环或更改代码中某处的变量header

    def myTest(file):
     with open ('filename', 'r') as f:
          inflation = []
          header = 1
          for line in f:
               if header !=1: //Never goes inside
                    infl = line.split(",")[2]
                    inflation.append(float(infl))
                    header += 1
    
           avgInflation = sum(inflation)/len(inflation) //Divison by zero
    
     return avgInflation
    

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 2017-06-30
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2017-04-20
      • 1970-01-01
      相关资源
      最近更新 更多