Menu
Coddy logo textTech

Mejores estudiantes

Parte de la sección Logic & Flow del Journey de Python de Coddy — lección 45 de 78.

challenge icon

Desafío

Fácil

Crea una función llamada filter_top_students que toma un argumento: threshold (float). La función debe:

  1. Iterar a través del diccionario student_records y encontrar a todos los estudiantes cuya calificación promedio sea mayor que el threshold especificado.
  2. Usar la función calculate_average_grade para obtener la calificación promedio de cada estudiante.
  3. Devolver una lista de nombres de los mejores estudiantes.
  4. Si ningún estudiante cumple con los criterios, devolver una lista vacía.

Añade (reemplaza) el siguiente bloque de código al final de tu código:

add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Math", "Biology"])
add_student("Diana", 23, ["Chemistry", "Physics"])
add_grade("Alice", 90)
add_grade("Alice", 85)
add_grade("Bob", 75)
add_grade("Diana", 95)
print(filter_top_students(80))  # Debería devolver ["Alice", "Diana"]
print(filter_top_students(90))  # Debería devolver ["Diana"]
print(filter_top_students(100))  # Debería devolver una lista vacía

Tómate un momento para reflexionar sobre cómo has combinado diccionarios, conjuntos y toma de decisiones para crear un programa totalmente funcional. ¡Buen trabajo! 🚀

Pruébalo tú mismo

student_records = {}

def add_student(name, age, courses):
    if name in student_records:
        print(f"Student '{name}' already exists.")
        return
    student_records[name] = {"age": age, "grades": set(), "courses": set(courses)}
    print(f"Student '{name}' added successfully.")

def add_grade(name, grade):
    if name not in student_records:
        print(f"Student '{name}' not found.")
        return
    student_records[name]["grades"].add(grade)
    print(f"Grade {grade} added for student '{name}'.")

def is_enrolled(name, course):
    if name not in student_records:
        print(f"Student '{name}' not found.")
        return False
    return course in student_records[name]["courses"]

def calculate_average_grade(name):
    if name not in student_records:
        print(f"Student '{name}' not found.")
        return None
    grades = student_records[name]["grades"]
    if not grades:
        return 0
    return sum(grades) / len(grades)

def list_students_by_course(course):
    students_in_course = []
    for name, details in student_records.items():
        if course in details["courses"]:
            students_in_course.append(name)
    return students_in_course


add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Math", "Biology"])
add_student("Diana", 23, ["Chemistry", "Physics"])
print(list_students_by_course("Math"))  # Should return ["Alice", "Bob"]
print(list_students_by_course("Physics"))  # Should return ["Alice", "Diana"]
print(list_students_by_course("Biology"))  # Should return ["Bob"]
print(list_students_by_course("History"))  # Should return an empty list

Todas las lecciones de Logic & Flow