El Estudiante Se Vuelve Profesor-¿Cómo les está yendo a todos?


#1

Buenas,
Estoy con el apartado de "¿Cómo les está yendo a todos?", como pone en el titulo. la cuestión que todo lo que he ido haciendo del código me lo ha validado,pero al poner la sentencia final :
"print obtener_promedio_clase(lista_alumnos)
print calificaciones_con_letras(obtener_promedio_clase(lista_alumnos))"

me muestra los sigueintes errores:
"Traceback (most recent call last):
File "python", line 62, in
File "python", line 58, in obtener_promedio_clase
File "python", line 33, in sacar_promedio
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'"

cosa que no entiendo si en las lineas anteriores me las ha validado sin problemas.

El código completo que he ido haciendo es:

"candela = {
"nombre":"Candela",
"tareas": [90.0, 97.0, 75.0, 92.0],
"pruebas": [88.0, 40.0, 94.0],
"examenes": [75.0, 90.0]
}

milagros = {
"nombre":"Milagros",
"tareas": [100.0, 92.0, 98.0, 100.0],
"pruebas": [82.0, 83.0, 91.0],
"examenes": [89.0, 97.0]
}

ramiro = {
"nombre":"Ramiro",
"tareas": [0.0, 87.0, 75.0, 22.0],
"pruebas": [0.0, 75.0, 78.0],
"examenes": [100.0, 100.0]
}

lista_alumnos = ["candela", "milagros", "ramiro"]
def promedio(numeros):
def promedio(numeros):
total = sum(numeros)
total = float(total)
total = total / len(numeros)
return total

devuelve numero

def sacar_promedio(alumno):
if alumno == "candela":
x = 0.1 * promedio(candela["tareas"]) + 0.3 * promedio(candela["pruebas"]) + 0.6 * promedio(candela["examenes"])
elif alumno == "milagros":
x = 0.1 * promedio(milagros["tareas"]) + 0.3 * promedio(milagros["pruebas"]) + 0.6 * promedio(milagros["examenes"])
elif alumno == "ramiro":
x = 0.1 * promedio(ramiro["tareas"]) + 0.3 * promedio(ramiro["pruebas"]) + 0.6 * promedio(ramiro["examenes"])
return x
#devuelve un numeros

def calificaciones_con_letras(resultado):
if resultado >= 90:
return "A"
elif resultado >= 80:
return "B"
elif resultado >= 70:
return "C"
elif resultado >= 60:
return "D"
else:
return "F"
#devuelve una letra
#print calificaciones_con_letras(sacar_promedio(candela))

def obtener_promedio_clase(lista_alumnos):
puntajes = []
for alum in lista_alumnos:
promedio_individual = sacar_promedio(alum)
puntajes.append(promedio_individual)
return promedio(puntajes)

print obtener_promedio_clase(lista_alumnos)
print calificaciones_con_letras(obtener_promedio_clase(lista_alumnos))"

A ver si alguno sabe el porque del error , ya que llevo 2 días mirándolo y no soy capaz de ver el problema.
y de ante mano gracias por la ayuda


#2

Hola,

Veo algunos detalles, por ejemplo:

Las primeras comillas no son necesarias.

Se define dos veces la función.

Las comillas de al final, no son necesarias.

Faltan paréntesis en el print.

print (obtener_promedio_clase(lista_alumnos))
print (calificaciones_con_letras(obtener_promedio_clase(lista_alumnos)))

Debería funcionar así. Espero sea de utilidad.


#3

Gracias por la ayuda

Y veo los “detallitos” que tengo mal, ahora me dice : File “python”, line 32, in sacar_promedio
TypeError: unsupported operand type(s) for *: ‘float’ and ‘NoneType’

Pero revisando la funcion matematica yo la veo bien:

def sacar_promedio(alumno):
if alumno == “candela”:
x = 0.1 * promedio(candela[“tareas”]) + 0.3 * promedio(candela[“pruebas”]) + 0.6 * promedio(candela[“examenes”])
elif alumno == “milagros”:
x = 0.1 * promedio(milagros[“tareas”]) + 0.3 * promedio(milagros[“pruebas”]) + 0.6 * promedio(milagros[“examenes”])
elif alumno == “ramiro”:
x = 0.1 * promedio(ramiro[“tareas”]) + 0.3 * promedio(ramiro[“pruebas”]) + 0.6 * promedio(ramiro[“examenes”])
return x

Y volvemos a lo mismo no veo el posible error