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:

python
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:

  1. Funciones de validación:

    • validar_numero(): Asegura que se ingrese un número válido mayor a 0

    • validar_texto(): Evita campos vacíos

  2. 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

  3. Estructura de datos:

    • Usamos diccionarios para organizar la información de cada alumno

    • Una lista almacena todos los alumnos

  4. Validaciones:

    • Campos no vacíos

    • Números válidos

    • Calificaciones entre 0-10 (puedes ajustar el rango)

Ejemplo de uso:

text
=== 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: 7

Esta solución es clara, fácil de entender y cumple con todos los requisitos del ejercicio.


1. Funciones de Validación

python
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 mensaje

  • while True: → Bucle infinito hasta que se ingrese un valor válido

  • try: → Intenta convertir el input a número

  • except ValueError: → Si falla la conversión, muestra error

  • if numero > 0: → Valida que sea mayor a 0

  • return numero → Retorna el número válido


python
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 final

  • if texto: → Verifica que el texto no esté vacío después de quitar espacios

  • Si está vacío, muestra error y repite


2. Función Principal

python
def main():
    print("=== SISTEMA DE EVALUACIÓN ESCOLAR ===\n")

Explicación:

  • def main(): → Función principal del programa

  • print() → Muestra título del sistema


python
    # 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_alumnos y num_materias almacenan los valores


python
    alumnos = []  # Lista para almacenar la información de los alumnos

Explicación:

  • Crea una lista vacía donde guardaremos todos los datos de los alumnos


3. Bucle Principal - Recopilación de Datos

python
    for i in range(num_alumnos):
        print(f"\n--- Alumno {i+1} ---")

Explicación:

  • for i in range(num_alumnos): → Repite para cada alumno

  • f"\n--- Alumno {i+1} ---" → Muestra número de alumno actual (i+1 porque empieza en 0)


python
        # 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


python
        calificaciones = []  # Lista para las calificaciones
        aprobadas = 0        # Contador de materias aprobadas

Explicación:

  • calificaciones = [] → Lista temporal para las califs del alumno actual

  • aprobadas = 0 → Contador que inicia en 0


python
        # 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 materia

  • while True: → Bucle hasta calificación válida

  • float(input(...)) → Convierte a número decimal

  • if 0 <= calificacion <= 10: → Valida rango 0-10

  • calificaciones.append(calificacion) → Agrega a la lista

  • if calificacion > 6: aprobadas += 1 → Cuenta aprobadas

  • break → Sale del bucle cuando tiene calif válida


python
        # 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 reprobadas

  • estado = "APROBADO" if aprobadas == num_materias else "REPROBADO" → Operador ternario

    • Si todas las materias aprobadas → "APROBADO"

    • Si no → "REPROBADO"


python
        # 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

python
    # Mostrar resultados
    print("\n" + "="*50)
    print("RESULTADOS FINALES")
    print("="*50)

Explicación:

  • "="*50 → Crea una línea de 50 signos "="

  • Encabezado de resultados


python
    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 lista

  • alumno['nombre'] → Accede al valor del diccionario usando la clave

  • Muestra toda la información organizada


5. Ejecución del Programa

python
if __name__ == "__main__":
    main()

Explicación:

  • if __name__ == "__main__": → Verifica si el script se ejecuta directamente

  • main() → Llama a la función principal para iniciar el programa

Conceptos importantes usados:

  1. Funciones → Bloques de código reutilizables

  2. Bucles → for y while para repetir acciones

  3. Listas → [] para almacenar múltiples valores

  4. Diccionarios → {} para almacenar datos organizados por claves

  5. Validación → Garantizar datos correctos

  6. Condicionales → if/else para tomar decisiones

  7. Try-Except → Manejo de errores

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

4 tipos de colecciones de datos más

Calculadora de edad