Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/carlosgomezc7/plataforma_aprendizaje/llms.txt

Use this file to discover all available pages before exploring further.

El módulo de Historial cierra la plataforma con una visualización que comunica al estudiante toda la ruta de aprendizaje que ha completado, incluyendo las relaciones jerárquicas entre módulos y sus prerrequisitos. En lugar de una lista plana, el módulo reconstruye un árbol de dependencias usando un algoritmo recursivo de traversal en profundidad (depth-first), produciendo una representación indentada que hace evidente la estructura de prerequisitos de cada logro.

Algoritmo recursivo

La función recuperar_historial_recursivo recibe el nombre de un módulo de partida, el diccionario completo de dependencias y el nivel de indentación actual. Trabaja de la siguiente manera: formatea el módulo actual con el sangrado correspondiente a su nivel y luego se llama a sí misma para cada sub-módulo dependiente, incrementando el nivel en 1 en cada llamada. El resultado de cada llamada recursiva se concatena al texto acumulado, generando naturalmente la estructura de árbol indentado.
def recuperar_historial_recursivo(modulo_actual, historial_completo, nivel=0):
    resultado = "  " * nivel + f"- Módulo Completado: {modulo_actual}\n"
    if modulo_actual in historial_completo:
        for sub_modulo in historial_completo[modulo_actual]:
            resultado += recuperar_historial_recursivo(sub_modulo, historial_completo, nivel + 1)
    return resultado
ParámetroTipoDescripción
modulo_actualstrNombre del módulo que se procesa en la llamada actual.
historial_completodictDiccionario {módulo: [lista de sub-módulos]} con toda la jerarquía.
nivelintProfundidad actual en el árbol. Controla la cantidad de espacios de sangría.

Árbol de dependencias simulado

La aplicación utiliza el siguiente diccionario precargado en mostrar_historial() para simular las relaciones completadas por el estudiante:
dependencias_completadas = {
    "Proyecto Final": ["Desarrollo Backend", "Desarrollo Frontend"],
    "Desarrollo Backend": ["Bases de Datos", "Lógica de Programación"],
    "Desarrollo Frontend": ["Diseño UI/UX"]
}
Visualmente, la jerarquía de dependencias tiene la siguiente forma:
Proyecto Final
├── Desarrollo Backend
│   ├── Bases de Datos
│   └── Lógica de Programación
└── Desarrollo Frontend
    └── Diseño UI/UX
Los nodos hoja — Bases de Datos, Lógica de Programación y Diseño UI/UX — no aparecen como claves en el diccionario, por lo que la recursión se detiene naturalmente al alcanzarlos.

Salida esperada

Al presionar “Generar Árbol de Módulos Completados”, la aplicación llama a recuperar_historial_recursivo("Proyecto Final", dependencias_completadas) y muestra el texto resultante en el área de historial:
Ruta de aprendizaje completada:

- Módulo Completado: Proyecto Final
  - Módulo Completado: Desarrollo Backend
    - Módulo Completado: Bases de Datos
    - Módulo Completado: Lógica de Programación
  - Módulo Completado: Desarrollo Frontend
    - Módulo Completado: Diseño UI/UX
Cada nivel de indentación está formado por dos espacios (" " * nivel), lo que produce el sangrado progresivo que permite leer de un vistazo la jerarquía de prerrequisitos.

Diagrama de flujo

El siguiente diagrama muestra el recorrido completo del algoritmo recursivo, desde la llamada inicial hasta el retorno del texto acumulado: El camino C -- No representa el caso base: cuando modulo_actual no es una clave en historial_completo, la función sabe que ha alcanzado un nodo hoja y simplemente retorna el texto acumulado hasta ese punto sin realizar ninguna llamada adicional.
El algoritmo utiliza traversal en profundidad primero (depth-first): para cada rama del árbol desciende hasta el nodo hoja más profundo antes de pasar a la siguiente rama. Si un módulo no aparece como clave en historial_completo, se trata automáticamente como un nodo hoja y la recursión se detiene en él sin error.

Para la referencia completa de la función consulta:

Build docs developers (and LLMs) love