0
lloyd = {
    "name": "Lloyd",
    "homework": [90, 97, 75, 92],
    "quizzes": [88, 40, 94],
    "tests": [75, 90]
}
alice = {
    "name": "Alice",
    "homework": [100, 92, 98, 100],
    "quizzes": [82, 83, 91],
    "tests": [89, 97]
}
tyler = {
    "name": "Tyler",
    "homework": [0, 87, 75, 22],
    "quizzes": [0, 75, 78],
    "tests": [100, 100]
}

def get_average(student):
    weight = 0
    total = 0
    for item in student:
        if item == "homework":
            weight = .1
        elif item == "quizzes":
            weight = .3
        elif item == "tests":
            weight = .6
        else:
            weight = 0
        total += student[item] * weight

    return total

get_average(tyler)

这里发生了什么?它给了我一个错误,说

student[item]不能乘以非整数 - 浮点数

4

2 回答 2

1

您正在尝试将字符串和列表与浮点数相乘,这是不可能的。

student[item] * weight

尝试这样的事情:

def get_average(student):
    weight = 0
    total = 0
    for item,val in student.items(): #use dict.items() if you need to wrk on both key and values
        if item == "homework":
            weight = .1
        elif item == "quizzes":
            weight = .3
        elif item == "tests":
            weight = .6
        else:
            continue    # no need of weight = 0 simple move on to next item
                        # continue statement jumps the loop to next iteration
        total += (float(sum(val)) / len(val)) * weight
    return total

print get_average(tyler)  #prints 79.9
于 2013-05-12T03:46:40.390 回答
0

因为不能将列表乘以权重,所以先取平均值!在你的 for 循环中添加以下行:

averaged = sum(student[item])/float(len(student[item]))
total += averaged * weight

所以现在这是你的 for 循环:

for item in student:
        if item != "Name":
            averaged = sum(student[item])/float(len(student[item]))
        if item == "homework":
            weight = .1
        elif item == "quizzes":
            weight = .3
        elif item == "tests":
            weight = .6
        else:
            weight = 0
        total += averaged * weight
于 2013-05-12T03:49:15.957 回答