2015-03-02 88 views
0
lloyd = { 
    "name": "Lloyd", 
    "homework": [90.0, 97.0, 75.0, 92.0], 
    "quizzes": [88.0, 40.0, 94.0], 
    "tests": [75.0, 90.0] 
} 

alice = { 
    "name": "Alice", 
    "homework": [100.0, 92.0, 98.0, 100.0], 
    "quizzes": [82.0, 83.0, 91.0], 
    "tests": [89.0, 97.0] 
} 

tyler = { 
    "name": "Tyler", 
    "homework": [0.0, 87.0, 75.0, 22.0], 
    "quizzes": [0.0, 75.0, 78.0], 
    "tests": [100.0, 100.0] 
} 

# Add your function below! 

def average(numbers): 
    total=sum(numbers) 
    total= float(total) 
    return total/len(numbers) 

def get_average(student): 
    homework=average(student["homework"]) 
    quizzes=average(student["quizzes"]) 
    tests=average(student["tests"]) 
    print student["name"] 
    return .1*homework+.3*quizzes+.6*tests 

def get_letter_grade(score): 
    if score >= 90: 
     return "A" 
    elif score >= 80: return "B" 
    elif score >= 70 : return "C" 
    elif score >= 60 : return "D" 
    else : return "F" 

results=[] 

def get_class_average(students): 
    results.append(get_average(students)) 
    return average(results) 



qq=[lloyd,alice,tyler] 


for x in qq: 
    get_class_average(x) 
    s= get_average(x) 
    print s, get_letter_grade(s) 
    print 

print results , "Total class average is %s" % average(results) 

上述方案雖然給予正確的結果是給我下面的錯誤: get_class_average([愛麗絲])導致錯誤:列表索引必須是整數,不str的列表索引必須是整數不str的蟒蛇錯誤

輸出如下:

Lloyd 
Lloyd 
80.55 B 

Alice 
Alice 
91.15 A 

Tyler 
Tyler 
79.9 C 

[80.55, 91.14999999999999, 79.9] Total class average is 83.8666666667 
None 
+0

我跑上面的代碼,但它工作。沒有得到'列表索引必須是整數,而不是str'異常。 – 2015-03-02 15:28:38

+0

如果出現錯誤,您如何獲得輸出?請提供完整的追溯。 – Matthias 2015-03-02 15:30:12

+0

什麼打印該錯誤? Python通常不會將錯誤報告爲「xxx導致錯誤...」 – interjay 2015-03-02 15:31:34

回答

2

你可能想什麼是平均超過所有的學生,如:

def get_class_average(students): 
    student_averages = list(get_average(student) for student in students) 
    return average(student_averages) 

get_class_average(qq) 

其中產出:

Lloyd 
Alice 
Tyler 
83.86666666666666 

所以,問題是你的get_class_average實現。

更新

您的代碼可以更加簡化:

results = [get_average(student) for student in qq] 
print results , "Total class average is %s" % average(results) 
+0

看起來不錯。 'get_class_average'看起來應該使用學生數據列表作爲參數來調用它。 – Matthias 2015-03-02 15:36:11

+0

謝謝你們的幫助。你的方式更好,更簡單,但我想了解我的錯誤。你能否解釋我做錯了什麼?謝謝 – anuragsodhi 2015-03-02 16:00:57

+1

@ user3765371:你設計的功能是把一個學生(一個「字典」)作爲參數。當你調用'get_class_average([alice])'這個參數是一個學生的'list'。 – Matthias 2015-03-02 16:12:18

相關問題