2013-05-14 98 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) 

这个功能肯定没有工作对我来说!

相关问题