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
答案 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