2013-09-28 82 views
1

我有28行错误说:CodeAcademy班级平均成绩

UnboundLocalError: local variable 'total referenced before assignment. 

但是总金额超过28行引用上线24我不明白这是怎么回事。我试图写的代码是将每个学生的测试,测验和作业分数的平均值。

感谢您的帮助。

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] 
} 
def average(some): 
    return sum(some)/len(some) 

students = [lloyd, alice, tyler] 

total = 0 

def get_class_average(students): 
    for student in students: 
     total += get_class_average(students) 
    return float(total)/len(students) 

print get_class_average(students) 
+1

注意'UnboundLocalError'只是错误,你会之一得到。你还会得到一个'RuntimeError',因为你在'get_class_average'中有一个永不结束的递归循环。 – iCodez

回答

4

您需要标记total作为一个全球性的,如果你是分配给它的功能:

def get_class_average(students): 
    global total 
    for student in students: 
     total += get_class_average(students) 
    return float(total)/len(students) 

将其分配给定的变量,你将其标记为本地名称,除非你明确地将其标记为全局。

您可能需要移动total的功能,而不是使之成为一个全球性的:

def get_class_average(students): 
    total = 0 
    for student in students: 
     total += get_class_average(students) 
    return float(total)/len(students) 

您不会出现在你的代码的其他地方使用它,所以使它成为一个全球性是矫枉过正这里。

你的下一个问题是你递归调用get_class_average();该函数调用本身,传入完全相同的参数。该函数将永远不会返回。我怀疑你的意思是调用average()函数,而不是在一个特定的列表通过为每个学生,像homework键,或quizzestests

def get_class_average(students, key): 
    total = 0 
    for student in students: 
     total += average(student[key]) 
    return float(total)/len(students) 

homework_average = get_class_average(students, 'homework'] 
+0

当我这样做时,我在第29行收到关于缩进的错误。 –

+1

@RobB .:你可能混合了制表符和空格吗?确保你的缩进匹配。额外的行(总数= 0或全局总数不会改变其他行的缩进。 –

+0

是不是'get_class_average'只是继续调用自己? – beroe