Why am I getting error: TypeError: unsuppouted operand type(s) for +: 'float' and 'str'

Why am I getting error: TypeError: unsuppouted operand type(s) for +: 'float' and 'str'

我正在尝试列出成绩并计算每个分数的平均值。第一行包含一个 "out of" 列表,它是每个 "test" 的总数。原始列表中的每一行都有一个学生编号,然后是他们在各自考试中获得的分数。到目前为止,我已经能够计算出每个学生在每次测试中获得的分数,但我无法在每个列表中添加第 "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

虽然我会更改其余代码,但您的所有问题都在 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]

我也会借此机会指出您计算平均值时的一个错误。在循环遍历 marks_list 中列的 any 之前,您将 运行 总计 sum 设置为 0,此时您应该重置它到 每个 列之前的 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