在Python中计算一组数字的平均值

4 投票
6 回答
1833 浏览
提问于 2025-04-16 12:32

在我的数据文件里,我有这些数字:

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 个回答

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
2

这一行:

for Numbers in inFile3:

实际上是在遍历文件中的每一行,而不是每一行里的数字。你需要先遍历每一行,然后再把每一行分割成数字,像这样:

for Line in inFile3: 
    for Number in Line.split(','): 
        Total = Total + int(Number) 
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)

这样可以忽略任何“空”的数字字符串,否则会导致错误。

撰写回答