Stuck at Review: Exam Statistics


#1



https://www.codecademy.com/en/courses/python-intermediate-en-7mgOa/2/3?curriculum_id=4f89dab3d788890003000096#

Traceback (most recent call last):
File "python", line 36, in
File "python", line 35, in print_all
NameError: global name 'variance' is not defined


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 = grades_average(scores)
    variance = 0
    for score in scores:
        variance += (average - score) ** 2 #the variable variance will now store a new value
        variance_total = variance / float(len(scores))
    return variance_total
print grades_variance(grades)
def grades_std_deviation(variance):
    return variance ** 0.5
    variance = grades_variance(grades)
    print grades_std_deviation(variance)
def print_all(grades):
    print print_grades(grades)
    print grades_sum(grades)
    print grades_average(grades)
    print grades_variance(grades)
    print grades_std_deviation(variance)
print print_all(grades)

A bug or wrong instructions? I have a problem with instructions on this exercise and how code offly works out regardless. After defining the function def grades_variance(scores) why call it with print grades_variance(grades) instead of the actual function print grades_variance(scores)??? All previous exercises have been smooth until this last Review exercise. Code seems Okay but can't get past the error message: Global name Variance is not defined. Kindly HELP!!!!:disappointed: :disappointed:


#2

The reason the other function calls work and not the last function call is because they are being passed a parameter that exists. When you call them, they know what the variable grades is. The issue is that in the last function you are attempting to pass it a parameter that does not exist.

Two types of variables are local and global variables. You have used the variable variance in other functions because it was either the name of a parameter or it was defined there, making it a local variable. Global variables are defined outside of functions, allowing you to use them anywhere (hence the name global). In your print_all() function you haven't declared variance as a parameter or variable, and it isn't a global variable, so you aren't able to use it. In the eyes of Python, it doesn't actually exist.

Remember that!

If this helped, please be so kind as to mark this answer as the solution. :slight_smile:


#3

@toplearner Thank you for the insightful input. Have done some necessary changes to my code and now the console prints everything but I get the error Oops, try again. grades_std_deviation(586.8010204081633) returned 18.2776094147 instead of the correct value 24.2239761478
I can't figure out how to make this print the correct figure!!!

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 = grades_average(scores)
    variance = 0
    for score in scores:
        variance += (average - score) ** 2 #the variable variance will now store a new value
        variance_total = variance / float(len(scores))
    return variance_total
print grades_variance(grades)
def grades_std_deviation(variance):
    variance = grades_variance(grades)
    return variance ** 0.5
    print grades_std_deviation(variance)
    
def print_all(grades):
    print print_grades(grades)
    print grades_sum(grades)
    print grades_average(grades)
    print grades_variance(grades)
    print grades_std_deviation(grades)
print print_all(grades)

#4

Can somebody try out my code and chip in on this, Kindly? It's has taken longer than necessary to proceed


#5

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