Part of the Whole


#1

I can’t seem to figure out what’s wrong with my code. Could someone explain it to me? Many thanks in advance :slight_smile:

This is the error message I’m getting:
get_class_average([alice, lloyd]) returned 91.15 instead of 85.85 as expected


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)
  float(total)
  result = float(total)/len(numbers)
  return result

def get_average(student):
  return 0.1 * average(student["homework"]) + \
0.3 * average(student["quizzes"]) + \
0.6 * average(student["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"
  
  print get_letter_grade(get_average(lloyd))

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



#2

you need to move the line

return average(results)

outside of the for loop, 91.15 is Alice’s average alone, your loop hits Alice first and appends her average but then returns the average of results which at that point only contains Alice’s average


#3

Thank you so much! Didn’t realize that mistake at all.


#4

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