需要帮助在python中计算一组数字的平均值吗

需要帮助在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

在我的数据文件中,我有

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'
回溯(最近一次呼叫最后一次):
文件“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