# For loop only goes through one iteration when return statement is not indented. Please explain

#1

<Below this line, add a link to the EXACT exercise that you are stuck at.>

``````  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(numbers):
total = sum(numbers)
total = float(total)

def get_average(student):
homework = average(student["homework"])
quizzes = average(student["quizzes"])
tests = average(student["tests"])
return 0.1 * homework + 0.3 * quizzes + 0.6 * tests

if score >= 90:
return "A"
elif score >=80:
return "B"
elif score >=70:
return "C"
elif score >=60:
return "D"
else:
return "F"

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

students = [lloyd, alice, tyler]
class_avg = get_class_average(students)
print class_avg

``````

I understand that the return statement at the end of he function should no be indented. But I donâ€™t understand how come the for loop only goes through one iteration and then the function ends and how come the for loop can go through all its iteration if the return statement is not indented. I expected the scores of each student to be returned i.e lloyd: 80.5, alice; 91.5, tyler; 79.9. But only the lloydâ€™s score was returned i.e 80.5. Can someone please explain to me why the for loop only goes through one iteration only when it is indented like above?

#2

By default a function returns None at the end of the function:

``````def example():
print "hello world"

print example()
``````

i put a `print` statement in front of the function call so we can `print` what the function returns. As you can see, it outputs None

If we want to return something else (different?) at the end of the function, we can use the `return` keyword. But `return` is always the last thing a function does, so if the return keyword is reached in a loop, it will break the loop so the function can end

#3

So meaning to say a function will always end when it executes `return` regardless of the `return`'s position withing the function? Like in the code above the function ends when it goes through the first iteration of the `for` loop which contains `return`? Am I right?

#4

yes, that is what i just explained?

#5

Thank you very much for the explanation

#6

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.