如何用Python计算平均值的平均值?
我需要计算一个班级学生的平均分。我想通过先计算每个学生的平均分,然后再计算这些平均分的平均值来实现这个目标。除了这一块代码之外,我的程序其他部分都运行得很好:
def get_class_average(class_list):
total = 0
for student in class_list:
student = student["name"]
get_average(student)
total_class += get_average(student)
如果有人需要,我可以提供其余的代码,但我知道问题可能出在这一段。这里是我的错误信息:
get_class_average([lloyd]) 返回了 85.85,而我期望的是 80.55
所以我在数学上做错了什么。我觉得问题出在我使用了一个循环。那怎样才能正确计算整个班级的平均分呢?
编辑:
这是我代码中的另一个函数。虽然不是唯一的一个,但错误信息显示它可能有问题:
# Add your function below!
def average(numbers):
total = sum(numbers)
total = float(total)
total /= len(numbers)
return total
我觉得这个函数可能有错误。
这是完整的代码,如果你想看看:
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
results = []
# Add your function below!
def get_average(numbers):
for total in numbers:
total += total
total *= 1.0
total /= len(numbers)
return total
def get_letter_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
def get_class_average(class_list):
total = 0
for student in class_list:
student = student["name"]
get_average(student)
total_class += get_average(student)
return average(class)
1 个回答
在不知道你具体函数的情况下,调试起来有点困难。我也在想,为什么你会有一个叫 get_average
的函数和一个叫 average
的函数。无论如何,我猜错误的地方在于你在第一个代码示例中返回的是 average(b)
,而不是 average(results)
。另外,这个语句需要减少一个缩进层级,不然你的 for
循环永远只会处理到 students
中的第一个 x
。目前,你只是返回了 average(get_average(x))
,而 x
是 students
中的第一个项目。
你的第二个函数更接近正确答案,最后的 return
语句只需要减少一个缩进层级,而且你需要初始化 results
。试试这个:
def get_class_average(students):
results = [] # initialize results
for result in students:
result = get_average(result)
results.append(result)
return average(results) # not part of the for looop