Почему я получаю сообщение об ошибке: TypeError: неподдерживаемый тип (ы) операнда для +: 'float' и 'str' - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь составить список оценок и рассчитать средние значения для каждой из оценок. Первая строка содержит список «вне», который является итогом каждого «теста». Каждая следующая строка в исходном списке имеет номер студента, а затем балл, который они получили по каждому соответствующему тесту. До сих пор мне удавалось вычислить оценку, которую каждый студент получил по каждому тесту, но у меня возникли проблемы с добавлением «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 голосов
/ 02 декабря 2019

Хотя я бы внес изменения в остальную часть кода, все ваши проблемы находятся в пределах 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, когда вам нужно сбросить его на 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
...