2015-03-02 129 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

相关问题