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
我正在尝试列出成绩并计算每个分数的平均值。第一行包含一个 "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