如何用Python计算平均值的平均值?

-1 投票
1 回答
858 浏览
提问于 2025-04-18 12:34

我需要计算一个班级学生的平均分。我想通过先计算每个学生的平均分,然后再计算这些平均分的平均值来实现这个目标。除了这一块代码之外,我的程序其他部分都运行得很好:

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 个回答

2

在不知道你具体函数的情况下,调试起来有点困难。我也在想,为什么你会有一个叫 get_average 的函数和一个叫 average 的函数。无论如何,我猜错误的地方在于你在第一个代码示例中返回的是 average(b),而不是 average(results)。另外,这个语句需要减少一个缩进层级,不然你的 for 循环永远只会处理到 students 中的第一个 x。目前,你只是返回了 average(get_average(x)),而 xstudents 中的第一个项目。

你的第二个函数更接近正确答案,最后的 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

撰写回答