Ejercicio 2. Sistema de evaluación
Te ayudo a resolver este ejercicio de manera sencilla y clara. Aquí tienes una solución paso a paso:
def validar_numero(mensaje):
"""Valida que se ingrese un número válido mayor a 0"""
while True:
try:
numero = int(input(mensaje))
if numero > 0:
return numero
else:
print("Error: Debe ser un número mayor a 0")
except ValueError:
print("Error: Debe ingresar un número válido")
def validar_texto(mensaje):
"""Valida que no se dejen campos vacíos"""
while True:
texto = input(mensaje).strip()
if texto:
return texto
else:
print("Error: Este campo no puede estar vacío")
def main():
print("=== SISTEMA DE EVALUACIÓN ESCOLAR ===\n")
# Pedir número de alumnos y materias
num_alumnos = validar_numero("Ingrese el número de alumnos: ")
num_materias = validar_numero("Ingrese el número de materias: ")
alumnos = [] # Lista para almacenar la información de los alumnos
# Recopilar datos de cada alumno
for i in range(num_alumnos):
print(f"\n--- Alumno {i+1} ---")
# Pedir datos del alumno con validación
nombre = validar_texto("Nombre del alumno: ")
matricula = validar_texto("Matrícula: ")
calificaciones = [] # Lista para las calificaciones de este alumno
aprobadas = 0 # Contador de materias aprobadas
# Pedir calificaciones de cada materia
print(f"Ingrese las calificaciones para {nombre}:")
for j in range(num_materias):
while True:
try:
calificacion = float(input(f"Calificación materia {j+1}: "))
if 0 <= calificacion <= 10: # Asumiendo escala de 0-10
calificaciones.append(calificacion)
if calificacion > 6:
aprobadas += 1
break
else:
print("Error: La calificación debe estar entre 0 y 10")
except ValueError:
print("Error: Debe ingresar un número válido")
# Calcular reprobadas
reprobadas = num_materias - aprobadas
# Determinar estado general
estado = "APROBADO" if aprobadas == num_materias else "REPROBADO"
# Guardar información del alumno
alumno_info = {
'nombre': nombre,
'matricula': matricula,
'calificaciones': calificaciones,
'aprobadas': aprobadas,
'reprobadas': reprobadas,
'estado': estado
}
alumnos.append(alumno_info)
# Mostrar resultados
print("\n" + "="*50)
print("RESULTADOS FINALES")
print("="*50)
for alumno in alumnos:
print(f"\nAlumno: {alumno['nombre']}")
print(f"Matrícula: {alumno['matricula']}")
print(f"Calificaciones: {alumno['calificaciones']}")
print(f"Materias aprobadas: {alumno['aprobadas']}")
print(f"Materias reprobadas: {alumno['reprobadas']}")
print(f"Estado general: {alumno['estado']}")
print("-" * 30)
# Ejecutar el programa
if __name__ == "__main__":
main()Explicación paso a paso:
Funciones de validación:
validar_numero(): Asegura que se ingrese un número válido mayor a 0validar_texto(): Evita campos vacíos
Flujo principal:
Pide número de alumnos y materias
Para cada alumno:
Pide nombre y matrícula (validados)
Pide calificaciones de cada materia
Cuenta materias aprobadas (>6) y reprobadas (≤6)
Determina estado general
Estructura de datos:
Usamos diccionarios para organizar la información de cada alumno
Una lista almacena todos los alumnos
Validaciones:
Campos no vacíos
Números válidos
Calificaciones entre 0-10 (puedes ajustar el rango)
Ejemplo de uso:
=== SISTEMA DE EVALUACIÓN ESCOLAR ===
Ingrese el número de alumnos: 2
Ingrese el número de materias: 3
--- Alumno 1 ---
Nombre del alumno: Juan Pérez
Matrícula: A123
Ingrese las calificaciones para Juan Pérez:
Calificación materia 1: 8
Calificación materia 2: 5
Calificación materia 3: 7
--- Alumno 2 ---
Nombre del alumno: María García
Matrícula: B456
Ingrese las calificaciones para María García:
Calificación materia 1: 9
Calificación materia 2: 8
Calificación materia 3: 7Esta solución es clara, fácil de entender y cumple con todos los requisitos del ejercicio.
1. Funciones de Validación
def validar_numero(mensaje):
"""Valida que se ingrese un número válido mayor a 0"""
while True:
try:
numero = int(input(mensaje))
if numero > 0:
return numero
else:
print("Error: Debe ser un número mayor a 0")
except ValueError:
print("Error: Debe ingresar un número válido")Explicación:
def validar_numero(mensaje):→ Define una función que recibe un mensajewhile True:→ Bucle infinito hasta que se ingrese un valor válidotry:→ Intenta convertir el input a númeroexcept ValueError:→ Si falla la conversión, muestra errorif numero > 0:→ Valida que sea mayor a 0return numero→ Retorna el número válido
def validar_texto(mensaje):
"""Valida que no se dejen campos vacíos"""
while True:
texto = input(mensaje).strip()
if texto:
return texto
else:
print("Error: Este campo no puede estar vacío")Explicación:
.strip()→ Elimina espacios en blanco al inicio y finalif texto:→ Verifica que el texto no esté vacío después de quitar espaciosSi está vacío, muestra error y repite
2. Función Principal
def main():
print("=== SISTEMA DE EVALUACIÓN ESCOLAR ===\n")Explicación:
def main():→ Función principal del programaprint()→ Muestra título del sistema
# Pedir número de alumnos y materias
num_alumnos = validar_numero("Ingrese el número de alumnos: ")
num_materias = validar_numero("Ingrese el número de materias: ")Explicación:
Llama a las funciones de validación para obtener números válidos
num_alumnosynum_materiasalmacenan los valores
alumnos = [] # Lista para almacenar la información de los alumnosExplicación:
Crea una lista vacía donde guardaremos todos los datos de los alumnos
3. Bucle Principal - Recopilación de Datos
for i in range(num_alumnos):
print(f"\n--- Alumno {i+1} ---")Explicación:
for i in range(num_alumnos):→ Repite para cada alumnof"\n--- Alumno {i+1} ---"→ Muestra número de alumno actual (i+1 porque empieza en 0)
# Pedir datos del alumno con validación
nombre = validar_texto("Nombre del alumno: ")
matricula = validar_texto("Matrícula: ")Explicación:
Usa
validar_texto()para asegurar que no haya campos vacíos
calificaciones = [] # Lista para las calificaciones
aprobadas = 0 # Contador de materias aprobadasExplicación:
calificaciones = []→ Lista temporal para las califs del alumno actualaprobadas = 0→ Contador que inicia en 0
# Pedir calificaciones de cada materia
print(f"Ingrese las calificaciones para {nombre}:")
for j in range(num_materias):
while True:
try:
calificacion = float(input(f"Calificación materia {j+1}: "))
if 0 <= calificacion <= 10:
calificaciones.append(calificacion)
if calificacion > 6:
aprobadas += 1
break
else:
print("Error: La calificación debe estar entre 0 y 10")
except ValueError:
print("Error: Debe ingresar un número válido")Explicación:
for j in range(num_materias):→ Para cada materiawhile True:→ Bucle hasta calificación válidafloat(input(...))→ Convierte a número decimalif 0 <= calificacion <= 10:→ Valida rango 0-10calificaciones.append(calificacion)→ Agrega a la listaif calificacion > 6: aprobadas += 1→ Cuenta aprobadasbreak→ Sale del bucle cuando tiene calif válida
# Calcular reprobadas
reprobadas = num_materias - aprobadas
# Determinar estado general
estado = "APROBADO" if aprobadas == num_materias else "REPROBADO"Explicación:
reprobadas = num_materias - aprobadas→ Calcula materias reprobadasestado = "APROBADO" if aprobadas == num_materias else "REPROBADO"→ Operador ternarioSi todas las materias aprobadas → "APROBADO"
Si no → "REPROBADO"
# Guardar información del alumno
alumno_info = {
'nombre': nombre,
'matricula': matricula,
'calificaciones': calificaciones,
'aprobadas': aprobadas,
'reprobadas': reprobadas,
'estado': estado
}
alumnos.append(alumno_info)Explicación:
Crea un diccionario con todos los datos del alumno
alumnos.append(alumno_info)→ Agrega el diccionario a la lista principal
4. Mostrar Resultados
# Mostrar resultados
print("\n" + "="*50)
print("RESULTADOS FINALES")
print("="*50)Explicación:
"="*50→ Crea una línea de 50 signos "="Encabezado de resultados
for alumno in alumnos:
print(f"\nAlumno: {alumno['nombre']}")
print(f"Matrícula: {alumno['matricula']}")
print(f"Calificaciones: {alumno['calificaciones']}")
print(f"Materias aprobadas: {alumno['aprobadas']}")
print(f"Materias reprobadas: {alumno['reprobadas']}")
print(f"Estado general: {alumno['estado']}")
print("-" * 30)Explicación:
for alumno in alumnos:→ Recorre cada alumno en la listaalumno['nombre']→ Accede al valor del diccionario usando la claveMuestra toda la información organizada
5. Ejecución del Programa
if __name__ == "__main__":
main()Explicación:
if __name__ == "__main__":→ Verifica si el script se ejecuta directamentemain()→ Llama a la función principal para iniciar el programa
Conceptos importantes usados:
Funciones → Bloques de código reutilizables
Bucles →
forywhilepara repetir accionesListas →
[]para almacenar múltiples valoresDiccionarios →
{}para almacenar datos organizados por clavesValidación → Garantizar datos correctos
Condicionales →
if/elsepara tomar decisionesTry-Except → Manejo de errores
Comentarios
Publicar un comentario