2013-05-14 33 views
1
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 average(stuff): 
    return sum(stuff)/len(stuff) 

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

def getAverage(kid): 
    bar = average 
    return bar(kid["homework"])*.1 + bar(kid["quizzes"])*.3 + bar(kid["tests"])*.6 

students = ["lloyd","alice","tyler"] 

#takes students list 
def getClassAverage(list, total = 0): 
    for x in list: 
     total += getAverage(x) 
    return total/len(list) 

#takes students list 
def classAvgFull(list): 
    print getClassAverage(list) 
    print getLetterGrade(getClassAverage(list)) 

classAvgFull(students) 

我真的只是無法弄清楚我在這裏出錯的地方。任何幫助將不勝感激。我相信這只是一件簡單的事情。非常開始我的學習,使用codeacademy.com先謝謝您!爲什麼這給我的錯誤字符串索引必須是整數?

+1

那麼......哪條線麻煩你了? – satoru 2013-05-14 02:19:15

+0

你的意思是做'酒吧*(小孩[「家庭作業」])*。1'代替'酒吧(小孩[「家庭作業」))*。1'嗎? – karthikr 2013-05-14 02:19:43

回答

10

變化

students = ["lloyd", "alice", "tyler"] 

students = [lloyd, alice, tyler] 

知道如何調試這樣的問題自己是很重要的。

錯誤消息告訴您在這條線出現問題:

return bar(kid["homework"])*.1 + bar(kid["quizzes"])*.3 + bar(kid["tests"])*.6 

和錯誤有事情做與索引:

string indices must be integers, not str 

一個自然的問題是,的價值是什麼kid?因此,嘗試投入print語句發生之前的錯誤:

bar = average 
print(repr(kid)) 
return bar(kid["homework"])*.1 + bar(kid["quizzes"])*.3 + bar(kid["tests"])*.6 

你會發現,它打印

'lloyd' 

現在自然的問題變成,怎麼來kid是一個字符串,'lloyd'?和我們真的想要什麼?(回答:字典,lloyd)。如果你搜索,其中getAverage(kid)被調用,你會發現自己在看getClassAverage功能:

def getClassAverage(list, total = 0): 
    for x in list: 
     total += getAverage(x) 

而現在的自然問題是,爲什麼x是字符串'lloyd'list中的值是什麼?您可以再次使用打印語句查找答案。當然,我們在哪裏調用getClassAverage(list,...)?

如果你一直回溯這樣,你終於到達

students = ["lloyd", "alice", "tyler"] 

,你會意識到這一點應該是

students = [lloyd, alice, tyler] 

決不名稱的變量list。它影響了同名內建。最好使用一個描述性名稱,例如students,因爲這樣您的變量名稱可以幫助記錄代碼的含義。如果該變量旨在表示通用序列,則建議使用變量名稱seqiterable

+1

解釋:在您當前的代碼中,不是發送對象'lloyd',而是發送字符串「lloyd」。因此,當你做'小孩[「家庭作業」]這是一個錯誤,因爲你可以索引到一個像這樣的字符串。 – xbonez 2013-05-14 02:21:08

+0

OH。這很簡單。非常感謝你們! – user2368136 2013-05-14 02:21:45

+0

它解決了我的問題。 TY – 2015-11-03 13:14:00

0

高清get_class_average(學生):

results = [] 

for student in students: 

    x= get_average(student) 
    results.append(x) 
return average(results) 

這個功能肯定沒有工作對我來說!

相關問題