"couldn't be multiplied by an non integeR语言 float" Python 中的错误


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]不能乘以非整数- float

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

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

因为你不能用权重乘以列表,所以先求平均值!在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

相关内容

最新更新