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.>
https://www.codecademy.com/courses/learn-python/lessons/student-becomes-the-teacher/exercises/how-is-everybody-doing-?action=lesson_resume&link_content_target=interstitial_lesson

  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"])
  return 0.1 * homework + 0.3 * quizzes + 0.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"

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
print get_letter_grade(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 :grin:


#6

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