我正在尝试列出成绩并计算每个分数的平均值。第一行包含一个“超出”列表,该列表是每个“测试”的总数。原始列表中的以下每一行都有一个学生编号,然后是他们在每个相应测试中获得的分数。到目前为止,我已经能够计算出每个学生在每个测试中获得的分数,但是我在将每个列表中的第n个项目除以分数数量而获得每个测试的平均值时遇到了麻烦。任何帮助,将不胜感激。
import urllib2
#Global Variables
marks = []
def setup():
background(255)
global marks
calculateAverages(read_marks())
read_marks()
def read_marks():
global marks
infile = urllib2.urlopen("http://cs.queensu.ca/home/cords2/marks110.txt")
count = 0
for line in infile:
line = line[:-1]
data = line.split("\t")
if count == 0:
for i in range(len(data)-1):
data[i] = int(data[i])
count = 1
else:
for i in range(1, len(data)):
data[i] = float(data[i])
data[i] = data[i]*100/marks[0][i-1]
marks.append(data)
return marks
def calculateAverages(marks_list):
print marks_list
average_list = []
sum = 0
for i in range(1, len(marks_list[0])):
for j in range(len(marks_list)):
sum += marks[j][i]
average = sum/len(marks_list)
average_list.append(average)
print average_list
答案 0 :(得分:0)
尽管我会更改其余代码,但至少对于这个问题,您所有的问题都在calculateAverages(marks_list)
之内。
您的代码中存在一些问题。首先,我会触摸您看到的错误消息:
TypeError: unsupported operand type(s) for +=: 'float' and 'str'
在行sum += marks[j][i]
上引发此异常,因为您试图将第一行添加到总和中。要解决此问题,您需要跳过marks_list
中的第一个元素:
def calculateAverages(marks_list):
...
for i in range(1, len(marks_list[0])):
for j in range(1, len(marks_list)):
...
此外,抛出错误(sum += marks[j][i]
)的行实际上应该看marks_list
:
sum += marks_list[j][i]
我还将借此机会指出您的平均数中的一个错误。您应将运行总计sum
设置为0
,然后再遍历marks_list
中列的 any ,此时应将其重置为0
在每个列之前。
将我为calculateAverages(marks_list)
描述的更改汇总在一起:
def calculateAverages(marks_list):
print marks_list
average_list = []
for i in range(1, len(marks_list[0])):
sum = 0
for j in range(1, len(marks_list)):
sum += marks_list[j][i]
average = sum/len(marks_list)
average_list.append(average)
print average_list