需要帮助在python中计算一组数字的平均值吗
在我的数据文件中,我有 60,66,88,90,44,90,80,77 所有的数字都在一行 这是我的代码,它没有给出我的数字的平均值需要帮助在python中计算一组数字的平均值吗,python,average,file-io,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
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'
回溯(最近一次呼叫最后一次):
文件“program.py”,第81行,在
main()
文件“program.py”,第5行,在main中
averageVar=平均值()
文件“program.py”,第39行,平均值
总数=总数+整数(数字)
ValueError:以10为底的int()的文本无效:“60,66,88,90,44,90,80,77\n”
更改
for Numbers in inFile3:
到
你在哪里读取数据?您需要读入它,然后用类似的方法将字符串拆分为数字 以下是一种更具python风格的方式:
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
你的问题是:
for Numbers in inFile3:
Total = Total + int(Numbers)
数字
在上面的代码中是一个行列表,而不是一个数字列表
for Line in inFile3:
for number in Line.split(','):
Total = Total + int(number)
应该有帮助
您也不需要像在Python中那样预先声明变量。事实上,如果你不知道自己在做什么以及为什么要这样做,那么使用global无疑是危险的
编辑:
如果在一行末尾有逗号,如果为空值,可以将最后一行更改为:
if number.strip():
Total = Total + int(number)
这将忽略任何可能引发错误的“空”数字字符串。此行:
for Numbers in inFile3:
实际上是迭代文件的行,而不是每行中的数字。您需要迭代这些行,然后对每一行将其拆分为数字,如下所示:
for Line in inFile3:
for Number in Line.split(','):
Total = Total + int(Number)
错误消息说明了一切:
'60,66,88,90,44,90,80,77\n'
被视为一个组,不是有效的整数。你需要一个一个地考虑它们。首先,去掉新行,然后用逗号分开
更改:
for Numbers in inFile3:
致:
如果我必须从头重写:
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)
虽然其他人指出了你所做的事情中涉及的一些问题,但没有人指出平均数不仅需要所有部分的总和,还需要所有元素的数量。因此,
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
所有这些
全局声明在那里做什么?摆脱它们。优秀的Python,但是这个答案对于提问者所展示的专业水平来说可能太复杂了。但是通过一点文档浏览,它会产生(ha)非常可读的代码。记住处理后面的换行符“\n”
。否则,答案是正确和清楚的+1 newline.int(string
)的挂起处理忽略空白(包括\n)。当然,行尾的逗号会导致问题!将添加可能处理的编辑…我不知道int(string)
将忽略空白。谢谢
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