Python - Calcular media, alumnos suspendidos y promedio superior a 5 (ejercicio resuelto)
Hoy vamos a resolver otro ejercicio de alumnos y calificaciones con Python usando matrices.
La matriz ya estará llena al momento de ejecutarse el ejercicio, es decir, la llenará el programador.
La solicitud dice:
Entonces veamos cómo resolver este ejercicio de materias, alumnos y calificaciones en donde sacaremos promedios y alumnos reprobados.
Primero veamos la matriz. Esta es llenada por el programador pero bien podría llenarla el usuario:
def main():
calificaciones = {
"Alumno 1": [{"asignatura": "Latin", "calificacion": 8}, {"asignatura": "Castellano", "calificacion": 8}, {"asignatura": "Francés", "calificacion": 9}, {"asignatura": "Inglés", "calificacion": 4}],
"Alumno 2": [{"asignatura": "Latin", "calificacion": 7}, {"asignatura": "Castellano", "calificacion": 6}, {"asignatura": "Francés", "calificacion": 7}, {"asignatura": "Inglés", "calificacion": 2}],
"Alumno 3": [{"asignatura": "Latin", "calificacion": 10}, {"asignatura": "Castellano", "calificacion": 7}, {"asignatura": "Francés", "calificacion": 8}, {"asignatura": "Inglés", "calificacion": 9}],
"Alumno 4": [{"asignatura": "Latin", "calificacion": 4}, {"asignatura": "Castellano", "calificacion": 4}, {"asignatura": "Francés", "calificacion": 3}, {"asignatura": "Inglés", "calificacion": 2}],
"Alumno 5": [{"asignatura": "Latin", "calificacion": 9}, {"asignatura": "Castellano", "calificacion": 8}, {"asignatura": "Francés", "calificacion": 9}, {"asignatura": "Inglés", "calificacion": 6}],
}
Primero veamos cuál es la calificación aprobatoria, que en este caso la definí como 7. Luego recorremos la matriz y vamos colocando la asignatura en un diccionario solo si la misma no ha sido agregada.
def imprimir_materias_suspendidas(calificaciones):
calificacion_aprobatoria = 7
asignaturas_suspendidas = {}
for alumno in calificaciones:
for asignatura_con_calificacion in calificaciones[alumno]:
asignatura = asignatura_con_calificacion["asignatura"]
calificacion = asignatura_con_calificacion["calificacion"]
if asignatura not in asignaturas_suspendidas:
asignaturas_suspendidas[asignatura] = 0
if calificacion < calificacion_aprobatoria:
asignaturas_suspendidas[asignatura] += 1
for asignatura_suspendida in asignaturas_suspendidas:
conteo = asignaturas_suspendidas[asignatura_suspendida]
print(f"{asignatura_suspendida} suspendida por {conteo} alumno(s)")
Más adelante comparamos la calificación y en caso de que sea menor que la aprobatoria aumentamos el conteo en el diccionario (el diccionario tiene asignaturas como clave y el conteo de reprobados como valor).
Ahora veamos la función que indica la media de las notas por alumno. Esto se divide en dos funciones: una hace la sumatoria y el conteo de las materias y otra lo imprime calculando el promedio:
def obtener_alumnos_con_media(calificaciones):
sumatorias = {}
for alumno in calificaciones:
for asignatura_con_calificacion in calificaciones[alumno]:
calificacion = asignatura_con_calificacion["calificacion"]
if alumno not in sumatorias:
sumatorias[alumno] = {"sumatoria": 0, "conteo": 0}
sumatorias[alumno]["sumatoria"] += calificacion
sumatorias[alumno]["conteo"] += 1
return sumatorias
def imprimir_media(calificaciones):
sumatorias = obtener_alumnos_con_media(calificaciones)
for alumno in sumatorias:
sumatoria = sumatorias[alumno]["sumatoria"]
conteo = sumatorias[alumno]["conteo"]
media = sumatoria/conteo
print(f"{alumno} media de {media}")
De nuevo estoy usando un diccionario usando el alumno como clave. El valor del diccionario es otro diccionario que tiene sumatoria y conteo. El conteo nos servirá para dividir la sumatoria.
Luego en la función imprimir_media
estoy recorriendo el diccionario que me regresó la otra función, accedo al mismo y calculo la media en la línea 19 para imprimirla más adelante.
Veamos el último punto del ejercicio. Vamos a imprimir los alumnos que obtuvieron una nota media superior a 5.
def imprimir_media_nota_superior_5(calificaciones):
sumatorias = obtener_alumnos_con_media(calificaciones)
media_minima = 5
for alumno in sumatorias:
sumatoria = sumatorias[alumno]["sumatoria"]
conteo = sumatorias[alumno]["conteo"]
media = sumatoria/conteo
if media > media_minima:
print(f"{alumno} tuvo una media superior a {media_minima} ({media})")
Como puedes ver, otra vez estoy usando la función de obtener_alumnos_con_media
, así reutilizo la función y evito duplicar el código.
Lo que hago es casi lo mismo que antes, pero ahora comparando en la línea 8.
El código completo queda como se ve a continuación:
def imprimir_materias_suspendidas(calificaciones):
calificacion_aprobatoria = 7
asignaturas_suspendidas = {}
for alumno in calificaciones:
for asignatura_con_calificacion in calificaciones[alumno]:
asignatura = asignatura_con_calificacion["asignatura"]
calificacion = asignatura_con_calificacion["calificacion"]
if asignatura not in asignaturas_suspendidas:
asignaturas_suspendidas[asignatura] = 0
if calificacion < calificacion_aprobatoria:
asignaturas_suspendidas[asignatura] += 1
for asignatura_suspendida in asignaturas_suspendidas:
conteo = asignaturas_suspendidas[asignatura_suspendida]
print(f"{asignatura_suspendida} suspendida por {conteo} alumno(s)")
def obtener_alumnos_con_media(calificaciones):
sumatorias = {}
for alumno in calificaciones:
for asignatura_con_calificacion in calificaciones[alumno]:
calificacion = asignatura_con_calificacion["calificacion"]
if alumno not in sumatorias:
sumatorias[alumno] = {"sumatoria": 0, "conteo": 0}
sumatorias[alumno]["sumatoria"] += calificacion
sumatorias[alumno]["conteo"] += 1
return sumatorias
def imprimir_media(calificaciones):
sumatorias = obtener_alumnos_con_media(calificaciones)
for alumno in sumatorias:
sumatoria = sumatorias[alumno]["sumatoria"]
conteo = sumatorias[alumno]["conteo"]
media = sumatoria/conteo
print(f"{alumno} media de {media}")
def imprimir_media_nota_superior_5(calificaciones):
sumatorias = obtener_alumnos_con_media(calificaciones)
media_minima = 5
for alumno in sumatorias:
sumatoria = sumatorias[alumno]["sumatoria"]
conteo = sumatorias[alumno]["conteo"]
media = sumatoria/conteo
if media > media_minima:
print(f"{alumno} tuvo una media superior a {media_minima} ({media})")
def main():
calificaciones = {
"Alumno 1": [{"asignatura": "Latin", "calificacion": 8}, {"asignatura": "Castellano", "calificacion": 8}, {"asignatura": "Francés", "calificacion": 9}, {"asignatura": "Inglés", "calificacion": 4}],
"Alumno 2": [{"asignatura": "Latin", "calificacion": 7}, {"asignatura": "Castellano", "calificacion": 6}, {"asignatura": "Francés", "calificacion": 7}, {"asignatura": "Inglés", "calificacion": 2}],
"Alumno 3": [{"asignatura": "Latin", "calificacion": 10}, {"asignatura": "Castellano", "calificacion": 7}, {"asignatura": "Francés", "calificacion": 8}, {"asignatura": "Inglés", "calificacion": 9}],
"Alumno 4": [{"asignatura": "Latin", "calificacion": 4}, {"asignatura": "Castellano", "calificacion": 4}, {"asignatura": "Francés", "calificacion": 3}, {"asignatura": "Inglés", "calificacion": 2}],
"Alumno 5": [{"asignatura": "Latin", "calificacion": 9}, {"asignatura": "Castellano", "calificacion": 8}, {"asignatura": "Francés", "calificacion": 9}, {"asignatura": "Inglés", "calificacion": 6}],
}
imprimir_materias_suspendidas(calificaciones)
imprimir_media(calificaciones)
imprimir_media_nota_superior_5(calificaciones)
main()
Te invito a leer más sobre Python en mi blog.
El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…
Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…
En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta web usa cookies.