Python - 16.Exam Statistics - 9 -- BIG PROBLEM


#1

Link;
https://www.codecademy.com/es/courses/python-intermediate-en-ambg7/2/3?curriculum_id=53a32847fed2a88075000001#

ALL MISTAKES:
1)
¡Uy! Probá otra vez. varianza_notas([20, 38, 85]) devolvió 15.7529137529 en vez del valor correcto 750.8888888889
2)
¡Uy! Probá otra vez. varianza_notas([10, 65, 94, 91, 57, 75, 40, 10, 58, 35]) devolvió 14.9205607477 en vez del valor correcto 798.25
3)
¡Uy! Probá otra vez. varianza_notas([63, 86, 92, 9, 42, 90, 13, 54, 30, 23]) devolvió 18.1027888446 en vez del valor correcto 908.76

AND IT GOES ON. IT WON'T LET ME PASS.

My code:

notas = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

def print_calificaciones(calificaciones):
    for calificacion in calificaciones:
        print calificacion

def notas_sum(calificaciones):
    total = 0 
    for calificacion in calificaciones: 
        total += calificacion
    return total

def promedio_notas(calificaciones):
    suma = notas_sum(calificaciones)
    promedio = suma / float(len(calificaciones))
    return promedio
 
def varianza_notas(calificaciones):
    promedio = promedio_notas(calificaciones)
    varianza = 0
    for n in calificaciones:
        varianza += (promedio - n) ** 2
    varianza = varianza / notas_sum(calificaciones)
    return varianza

def calificaciones_std_desviacion(varianza):
    return varianza ** 0.5
    
varianza = varianza_notas(notas)

print "Las calificaciones son: "
print notas
print
print "La suma es: ", notas_sum(notas)
print "El promedio es: ", promedio_notas(notas)
print "La varianza es: ", varianza_notas(notas)
print "La desviacion estandar es: ", calificaciones_std_desviacion(varianza)}

RESULTS ARE OK:
Las calificaciones son:
[100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

La suma es: 1045.5
El promedio es: 80.4230769231
La varianza es: 4.15391972924
La desviacion estandar es: 2.03811671139
None

`


#2

Compare...

  
Las calificaciones son: 
[100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

La suma es:  1045.5
El promedio es:  80.4230769231
La varianza es:  4.15391972924
La desviacion estandar es:  2.03811671139

     > sum(notas)
    => 1045.5
     > sum(notas)/len(notas)
    => 80.42307692307692
     > avg = sum(notas)/len(notas)
     > total = 0
     > for x in notas: 
    ..   total += (avg - x) ** 2 
    ..   
     > total
    => 4342.923076923078
     > total / len(notas)
    => 334.07100591715982
     > (total / len(notas)) ** 0.5
    => 18.277609414722697

#3

Sorry, I'm new in python.
I've modified that part:

def varianza_notas(calificaciones):
_promedio = promedionotas(calificaciones)
__total = 0
__for n in calificaciones:
____total += (promedio - n) ** 2
__varianza = total / len(notas)
__return varianza

Results are:
Las calificaciones son:
[100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

La suma es: 1045.5
El promedio es: 80.4230769231
La varianza es: 334.071005917
La desviacion estandar es: 18.2776094147
None

Still getting the same:

¡Uy! Probá otra vez. varianza_notas([78, 17, 68, 96, 48, 27, 82, 74, 93, 62, 77, 47, 97, 73, 48]) devolvió 628.8 en vez del valor correcto 544.96


#4

Here is an example for you to follow that is producing correct results...

notas = [78, 17, 68, 96, 48, 27, 82, 74, 93, 62, 77, 47, 97, 73, 48]
def notas_sum(marcas):
    total = float(0)
    for marca in marcas:
        total += marca
    return total
def notas_avg(marcas):
    return notas_sum(marcas) / len(marcas)
def varianza(marcas):
    suma = 0
    mean = notas_avg(marcas)
    for marca in marcas:
        suma += (mean - marca) ** 2
    return suma / len(marcas)
def std_deviation(marcas):
    return varianza(marcas) ** 0.5
       
print notas_sum(notas)
print notas_avg(notas)
print varianza(notas)
print std_deviation(notas) 

987.0
65.8
544.96
23.3443783383

Notice where the float is declared? The functions form a dependency chain. The one below always calls the one above it. The return value from notas_sum() is always a float.

See if you can track down your errors by comparing each function.


#5

Thank you so much! I guess the exercise has a mistake with my user because i literaly copied your code (after trying to find the errors) and i still have the same problem, but this time with "promedio_notas" (notas_avg).

Here's the answer:

¡Uy! Probá otra vez. promedio_notas([13, 46, 37, 24, 99, 42, 12, 0, 70, 25, 69, 60, 4]) devolvió 38.0 en vez del valor correcto 38.5384615385


#6

Please re-post your corrected code. Thanks.


#7

Here's my corrected (i think) code:

notas = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

def notas_sum(calificaciones):
    total = float(0)
    for calificacion in calificaciones: 
        total += calificacion
    return total

def promedio_notas(calificaciones):
    promedio = notas_sum(calificaciones) / len(calificaciones) 
    return promedio
 
def varianza_notas(calificaciones):
    suma = 0
    promedio = promedio_notas(calificaciones)
    for n in calificaciones:
        suma += (promedio - n) ** 2
    varianza = suma / float(len(calificaciones))
    return varianza
    
def calificaciones_std_desviacion(calificaciones):
    return varianza_notas(calificaciones) ** 0.5

print "Las calificaciones son: "
print notas
print
print "La suma es: ", notas_sum(notas)
print "El promedio es: ", promedio_notas(notas)
print "La varianza es: ", varianza_notas(notas)
print "La desviacion estandar es: ", calificaciones_std_desviacion(notas)

RESULTS:

Las calificaciones son: 
[100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

La suma es:  1045.5
El promedio es:  80.4230769231
La varianza es:  334.071005917
La desviacion estandar es:  18.2776094147
None

ERROR MESSAGE:

¡Uy! Probá otra vez. calificaciones_std_desviacion(330.88888888888886) dio un error: 'float' object is not iterable

Everything goes OK except the last print. I can't find where's the 'float object' with the problem. Or maybe i'm saturated and can't see it.


#8

This does not need to declared a float. the numerator is already a float, as mentioned earlier. On a side note, we should avoid mutating a counting number. It is an integer, and best left that way. If one must declare a float, let it be on the computed value, not the counting number.

My example of this code works fine in its own setting. However, the instructions say that the function should take a parameter, varianza (sigma-squared) and return the square root, (sigma). Notice that the SCT is passing a sigma-squared value to test the standard deviation function?

That means doing as you did earlier:

varianza = varianza_notas(notas)

print calificaciones_std_desviacion(varianza)

#9

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