为什么会出现错误:TypeError:+的不支持的操作数类型:“ float”和“ str”

时间:2019-12-02 01:54:45

标签: python processing

我正在尝试列出成绩并计算每个分数的平均值。第一行包含一个“超出”列表,该列表是每个“测试”的总数。原始列表中的以下每一行都有一个学生编号,然后是他们在每个相应测试中获得的分数。到目前为止,我已经能够计算出每个学生在每个测试中获得的分数,但是我在将每个列表中的第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

1 个答案:

答案 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