7. Variance _why error?


#1
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

def print_grades(grades):
    for grade in grades:
        print (grade)

def grades_sum(grades):
    total = 0
    for grade in grades:
        total += grade
    return total

def grades_average(grades):
    sum_of_grades = grades_sum(grades)
    average = sum_of_grades / float(len(grades))
    return average

def grades_variance(scores):
        average = 0
        for score in scores:
            average += grades_average(scores)
        variance = 0
        for score in scores:
            variance += (average - score)**2
        return variance/len(scores)

print (grades_variance(grades))

Oops, try again. grades_variance([9, 0, 4, 2, 5, 9, 2, 3]) returned 894.5 instead of the expected: 9.4375

I get this message as a result. What's wrong with mine?


#2

Edit:

since you have written a method to compute the average of a list of grades you can replace all these lines

        average = 0
        for score in scores:
            average += grades_average(scores)

with

average = grades_average(scores)

#3

@rydan

Your second suggestion fixes @medouxa's bug.

But your first suggestion has little to no effect! If it has an effect than it's for the worse. (More operations and more opportunities to lose precision - it won't make a lot of difference, but any difference is going to be for the worse.)


#4

@ionatan thats right i just made the calculation and it gives the right answer. Thanks :smile: