如何找到多维列表的平均值?

2024-03-28 07:54:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出这个班的平均总成绩。我运行我的程序,但不断得到“TypeError:不支持的操作数类型+:'int'和'str'”。你知道吗

def newRecord(students,tests):
  students = int(input('How many students are in your class? '))
  tests = int(input('How many tests have you given? '))

  record = []
   for i in range(students):
    rec_line = []
   for j in range(tests+1):
    rec_line.append(0)
   record.append(rec_line)
  print('record:',record)
  print('modified record:',record)

  for A in range (students):
     record[A][0] = input('Please enter student {} name '.format(A+1))
    for B in range (1, tests+1):
        record[A][B] = input ('Please enter test score  {} '.format(B))
  print (record)

  total= float(sum(record))/ len(record)
  print ('Average is: ',total )

Tags: inforinputlinetestsrangerecordmany
1条回答
网友
1楼 · 发布于 2024-03-28 07:54:50

每个测试结果都需要转换成intfloat,以便对它们执行数学函数。在上面的例子中,你也在称呼学生的名字,当你试图计算一个“平均数”时,这个名字会抛出一个错误。你知道吗

def newRecord(students,tests):
    students = int(input('How many students are in your class? '))
    tests = int(input('How many tests have you given? '))

record = []
for i in range(students):
    rec_line = []
    for j in range(tests+1):
        rec_line.append(0)
    record.append(rec_line)
print('record:',record)
print('modified record:',record)

for A in range (students):
    record[A][0] = input('Please enter student {} name '.format(A+1))
    for B in range (1, tests+1):
        record[A][B] = input ('Please enter test score  {} '.format(int(B)))
print(record)

total= sum([int(score) for score in rec[1:] for rec in record])/len([int(score) for score in rec[1:] for rec in record])
print('Average is: ',total )

用法示例:

record: [[0, 0, 0], [0, 0, 0]]
modified record: [[0, 0, 0], [0, 0, 0]]
Please enter student 1 name Alice
Please enter test score  1 2
Please enter test score  2 3
Please enter student 2 name Bob
Please enter test score  1 4
Please enter test score  2 5
[['Alice', '2', '3'], ['Bob', '4', '5']]
Average is:  3.5

相关问题 更多 >