在Python中计算一组数字的平均值
在我的数据文件里,我有这些数字:
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)
这样可以忽略任何“空”的数字字符串,否则会导致错误。