2013-05-12 54 views
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) 

这是怎么回事?这是给我的错误,指出Python中的“不能乘以非整数 - 浮点数”错误

student[item]不能由一个非整数相乘 - 浮

+0

尝试加入一些打印语句所以你可以看到正在发生的事情 – datguy 2013-05-12 03:48:55

回答

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 
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 
+0

这是不对的,你”重新尝试在字符串上执行'sum'('student [“name”]'是一个字符串) – 2013-05-12 05:14:04