2014-12-21 68 views
2

在其中一個練習中,我必須計算班級平均值。但我在這裏面臨一些問題。 計算班級平均數,我必須迭代每個正在通過的學生。 我的get_class_average()函數沒有按預期工作。儘管我用兩個學生名稱(愛麗絲,勞埃德)調用此函數,但只有愛麗絲得到處理,我的答案是來到91.15,而不是85.85 ...Python/Codeacademy:班級平均計算

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) 
    result = total/len(numbers) 
    return result 

def get_average(student): 
    homework = 0.10 * average(student['homework']) 
    quizzes = 0.30 * average(student['quizzes']) 
    tests = 0.60 * average(student['tests']) 

    return (homework + quizzes +tests) 


# This section is not working properly  
def get_class_average(students): 
    results =[] 
    for item in students: <-- This loop may not be working 
     print item 
     result =get_average(item) 
     results.append(result) 
     print results 
     return average(results) 


print get_class_average([alice,lloyd]) 
+0

函數方法只能有一個'return'。你的'get_class_average'方法在for循環結尾處有一個return語句。您應該將每個人的平均值存儲在臨時列表中,然後將其返回。 –

+0

iluengo:這不是真的。函數可以有多個'return'狀態。這只是導致錯誤的特定代碼。 – Nebril

+0

嗯,真的,我在這個特殊情況下談論,而不是一般的編程。順便說一句,thx糾正。 –

回答

2

你縮進行

return average(results)

是循環的一部分。由於return中斷循環(包括for循環),因此只有循環的第一次迭代(即與Alice一起)正在運行。試着把這一行放在與for循環相同的級別上。這樣,循環就會完成,並且在你的函數返回結果之後。

-1

您的參數沒有定義,但您爲學生中的每個項目設置了一個循環,但學生未定義,然後您面臨代碼問題。

嘗試做這樣的事情:

students = [lloyd, alice, tyler] 

def get_class_average(students): 
results = [] 
for student in students: 
    results.append(get_average(student)) 
return average(results) 

print get_class_average(students) 

這裏我定義我想,學生具有可變的學生計算出平均值,然後用已經是你的一個功能我剛加入的結果,我們的名單在我們的變量「結果」。

+0

如果您向下滾動到問題的最後一行,您可以看到學生來自哪裏。 – Seb