在我的数据文件中
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'
答案 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(','):