需要帮助在python中查找一组数字的平均值

时间:2011-02-25 14:41:39

标签: python average file-io

在我的数据文件中

60,66,88,90,44,90,80,77

所有数字都在一行

这是我的代码,它没有给我平均数字

    inFile3 = open("data2.txt","r") 
    global gradeVar 
    gradeVar = len(gradeArray) 
    global Total 
    Total = 0 
    for Numbers in inFile3: 
            Total = Total + int(Numbers) 
    inFile3.close() 
    global averageVar 
    averageVar = Total/gradeVar 
    return averageVar 

这是错误

Traceback (most recent call last):
  File "program.py", line 81, in <module>
    main()
  File "program.py", line 5, in main
    averageVar = Average() 
  File "program.py", line 39, in Average
    Total = Total + int(Numbers) 
ValueError: invalid literal for int() with base 10: '60,66,88,90,44,90,80,77\n'

6 个答案:

答案 0 :(得分:5)

你的问题在这里:

for Numbers in inFile3: 
        Total = Total + int(Numbers)
上面代码中的

Numbers是一个行列表,而不是一个数字列表。

for Line in inFile3:
    for number in Line.split(','):
        Total = Total + int(number)

应该有帮助。

您也无需像在Python中那样预先声明变量。事实上,除非你知道自己在做什么以及为什么要这样做,否则在全球范围内这样做是非常危险的。

编辑: 如果您在一行的末尾有逗号,则可以将最后一行更改为:

        if number.strip():
            Total = Total + int(number)

这将忽略任何否则会引发错误的“空”数字字符串。

答案 1 :(得分:2)

这一行:

for Numbers in inFile3:

实际上是遍历文件的行,而不是每行中的数字。你需要遍历这些行,然后每行将它分成数字,如下所示:

for Line in inFile3: 
    for Number in Line.split(','): 
        Total = Total + int(Number) 

答案 2 :(得分:2)

虽然其他人已经指出了你正在做的事情所涉及的一些问题,但没有人指出平均值不仅需要所有部分的总和,还需要所有元素的数量。因此,

def parseNumberFile(file_name):
    for numbers in open(file_name, "r"):
        items = numbers.split(',')
        yield (len(items), sum(map(int,items)))

将其转换为可用作以下内容的生成器:

total = 0
count = 0
for x,y in parseNumberFile("myData.txt"):
    count += x
    total += y
average = total/count

答案 3 :(得分:1)

你在哪里读数据?您需要将其读入,然后将字符串拆分为数字str.split()

这是一种更加抒情的方式:

inFile3 = open("data2.txt","r") 
grade_list = inFile3.readline()
inFile3.close()
num_list = [int(g) for g in grade_list.split(',')]
average = sum(num_list) / len(num_list)
print average

答案 4 :(得分:1)

错误消息显示全部:'60,66,88,90,44,90,80,77\n',被视为一个组,不是有效整数。你需要逐个考虑它们。首先,剥离新行,然后用逗号分隔。

变化:

for Numbers in inFile3: 

要:

# assumes numbers are all on one line with no spaces between
for Numbers in inFile3.read().strip().split(','):

如果我不得不从头开始重写:

from __future__ import division  # this import is not needed in python 3
with open('data2.txt', 'r') as f:
    numbers = [int(n) for n in f.read().strip().split(',')]
    avg = sum(numbers) / len(numbers)

答案 5 :(得分:0)

更改

for Numbers in inFile3: 

for Numbers in inFile3.strip().split(','):