Python中“无法乘以非整数 - 浮点数”错误

时间:2013-05-12 03:44:33

标签: 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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