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