1.5 · Formación completa con hilo conductor

Nivel 1 · Fundamentos del lenguaje

1.5Formación completa con hilo conductor

Objetivo: consolidar todas las bases (variables, condiciones, bucles, funciones) en un miniprograma completo y dividido.
Tiempo estimado: 20 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Consolidar = ensamblar: variables + condiciones + bucles + funciones en un solo programa — de la sintaxis al saber-construir.
  • Verbos → funciones, menú → main: un verbo = una función, el main solo contiene el bucle del menú que llama.
  • 80 líneas solo = base adquirida: pseudocódigo primero, if __name__ == "__main__" sistemático, puente hacia archivos (N2) y tests (N3).

Minicaso guiado — Nabil entrega su agenda en Argel

Nabil debe entregar una agenda de contactos para su equipo: añadir, buscar, listar, eliminar, salir. Primero escribe 80 líneas a granel con el menú copiado-pegado cinco veces — y un bug de eliminación se repite en todas partes. Lo divide: un verbo = una función (añadir, buscar, listar, eliminar), un main() con el bucle del menú, contactos en diccionarios, e if __name__ == "__main__" para proteger la importación. La agenda gira sola, se guardará en JSON en el nivel 2 y se testeará en el nivel 3: el hilo conductor de la guía está lanzado.

Capstone del nivel — Nabil reinvierte 1.1 (variables), 1.2 (menú en condiciones), 1.3 (bucles) y 1.4 (funciones).

1. Ensamblar la base: el miniproyecto agenda

Este capítulo es una respiración consolidadora: variables (contactos en diccionarios), condiciones (menú), bucles (visualización y bucle del menú), funciones (añadir, buscar, listar, eliminar) — este proyecto ensambla todo el nivel 1 en ~80 líneas. Es el test: si lo codificas solo, sin copiar, explicando cada línea, la base está adquirida.

Nabil elige la agenda de contactos en lugar del juego del número misterio: servirá a su equipo, y cada función se reinvertirá en los niveles siguientes.

2. Dividir antes de codificar, puente hacia lo siguiente

Lista los verbos (añadir, buscar, listar, eliminar, salir): un verbo = una función. El main() solo contiene el bucle del menú que llama. Escribe el pseudocódigo en español antes de codificar, protege la importación con if __name__ == "__main__". Esta agenda volverá en el nivel 2 (archivos: guardar en JSON), en el nivel 3 (tests: probar las funciones): cada nivel reinvierte en lugar de empezar de cero.

Nabil escribe su pseudocódigo en cinco líneas, codifica una función por verbo, y ya anota « JSON en N2, pytest en N3 »: el hilo conductor atraviesa la guía.

Error frecuente de interpretación: « Conozco la sintaxis, sé programar » o « un gran archivo a granel, pasa ». No. Conocer cada pieza aislada no prueba que sepas ensamblarlas: la página en blanco se vence por descomposición (pseudocódigo, una función por verbo). Y 80 líneas a granel no se releen — divididas en 6 funciones con un main menú, sí.
Base ensamblada Verbos, menú, 80 líneas divididas Verbos (funciones)Un verbo = una función+Menú (main)Bucle que llama, nada más+80 líneas (test)Solo, sin copiar = adquirido if __name__ == "__main__" sistemático; JSON en N2, tests en N3.
Verbos, menú, 80 líneas divididas
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Ensamblar: Nabil moviliza variables (dicts), condiciones (menú), bucles (visualización) y funciones (verbos) en una sola agenda de ~80 líneas. 2) Dividir: pseudocódigo primero, una función por verbo, main() reducido al bucle del menú, importación protegida. 3) Proyectar: la agenda se guardará en JSON (N2) y luego se testeará (N3) — cada nivel reinvierte. Lección: descomponer y luego ensamblar, y la base se vuelve reflejo.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Esqueleto de la agenda

La estructura que prueba la base, como Nabil para su equipo.

contacts = []
def ajouter(nom, tel):
    contacts.append({"nom": nom, "tel": tel})
def chercher(nom):
    return [c for c in contacts if c["nom"] == nom]
def lister():
    for c in contacts:
        print(f"{c['nom']} : {c['tel']}")
def main():
    while True:
        choix = input("1-añadir 2-buscar 3-listar 0-salir? ")
        if choix == "0":
            break
        elif choix == "3":
            lister()
if __name__ == "__main__":
    main()

Lectura: el if __name__ protege la importación futura; la comprensión filtra en una línea.

Lección: codifica primero, relee después — mensajes claros, ensayos y casos mostrados.

Vocabulario de la sección

Consolidación
Reemplear varias nociones juntas en un mismo programa, hasta que se vuelvan reflejos.

Ejemplo sencillo: La agenda de Nabil que moviliza los cuatro capítulos.

Lo que no es: diez ejercicios aislados nunca recombinados.

Reflejo: un proyecto completo vale diez ejercicios.

Hilo conductor
Proyecto seguido que atraviesa el aprendizaje y da sentido a cada noción al ponerla en aplicación.

Ejemplo sencillo: La agenda de Nabil, retomada en JSON (N2) y luego en tests (N3).

Lo que no es: un proyecto desechable abandonado en cada nivel.

Reflejo: reinvierte en lugar de empezar de cero.

Descomposición
Dividir un problema en pequeños pasos/funciones simples: la competencia clave del programador. Un verbo = una función.

Ejemplo sencillo: Los añadir/buscar/listar/eliminar de Nabil.

Lo que no es: escribir 80 líneas de golpe ante la página en blanco.

Reflejo: lista los verbos antes de codificar.

Pseudocódigo
Describir los pasos de un programa en lenguaje corriente antes de codificarlo: aclara la lógica sin la sintaxis.

Ejemplo sencillo: Las cinco líneas en español de Nabil antes de su agenda.

Lo que no es: codificar cabizbajo y luego depurar durante horas.

Reflejo: español primero, Python después.

Depuración (debugging)
Rastrear y corregir errores. print() y la lectura de los mensajes de error (leídos de abajo arriba) son las primeras herramientas.

Ejemplo sencillo: Nabil que aísla su bug de eliminación con prints.

Lo que no es: modificar al azar hasta que pase.

Reflejo: lee el traceback, reproduce, corrige, reverifica.

En la práctica — En la práctica — Ensamblar las bases: un miniprograma completo

  1. Elige un miniproyecto: agenda de contactos (añadir/buscar/listar/eliminar), juego del número misterio, o calculadora en bucle.
  2. Escribe primero el pseudocódigo: los grandes pasos en español (sortear un número, iterar, comparar, indicar más/menos, contar los intentos).
  3. Codifica paso a paso reutilizando: una función por paso, un bucle while para rejugar, condiciones para comparar, el módulo random para sortear un número.
  4. Prueba, provoca errores, corrige con print(): cuida la experiencia (mensajes claros, número de intentos mostrado).
Has escrito un programa completo movilizando todas las bases: ya no conoces solo la sintaxis, sabes construir.

Guion listo para decir — defender la división (30 s)

« Propongo que dividamos en una función por verbo, con un main que solo haga el bucle del menú: cada función se testea aisladamente, el bug se localiza en una lectura, y reutilizaremos estas funciones para el guardado JSON y luego los tests. »

Para decir en revisión de código; muestra el archivo a granel frente al dividido.

Modelo copiar-pegar — agenda completa (capstone N1)

contacts = []
def ajouter(nom, tel):
    contacts.append({"nom": nom, "tel": tel})
    return f"{nom} añadido."
def chercher(nom):
    trouves = [c for c in contacts if c["nom"] == nom]
    return trouves
def lister():
    if not contacts:
        return "Agenda vacía."
    return "\n".join(f"{c['nom']} : {c['tel']}" for c in contacts)
def main():
    while True:
        choix = input("1-añadir 2-buscar 3-listar 0-salir? ")
        if choix == "0":
            print("¡Adiós!")
            break
        elif choix == "1":
            print(ajouter(input("¿Nombre? "), input("¿Tel? ")))
        elif choix == "3":
            print(lister())
        else:
            print("Elección desconocida.")
if __name__ == "__main__":
    main()

Agenda en Argel

Como Nabil: dicts + verbos + main menú — el equipo añade y busca sin formación, la base está probada.

Número misterio

random + while para rejugar + condiciones más/menos: la misma base (variables, bucles, funciones) en un juego.

Calculadora en bucle

Un menú de operaciones con funciones sumar/dividir: la división por cero evaluada en condición, todo rejugable.

Puente N2/N3

La agenda guardada en JSON (N2: with open, json.dump/load) y luego probada en tests (N3): reinvierte, no recomiences.

✓ Buenas prácticas

  • Escribe el pseudocódigo en español antes de codificar.
  • Un verbo = una función, menú = main, importación protegida.
  • Termina un proyecto comprendido y rehecho solo antes del nivel 2.

✗ Errores frecuentes

  • Escribir todo a granel sin funciones (ilegible en 80 líneas).
  • Copiar-pegar el menú cinco veces en lugar de un bucle.
  • Pasar al N2 sin terminar la agenda (base frágil).

Puntos clave

  • Consolidar = reemplear juntas variables, condiciones, bucles y funciones en un programa completo.
  • Descomponer un problema en pequeños pasos es LA competencia por desarrollar — pseudocódigo primero.
  • Verbos → funciones, menú → main, if __name__ == "__main__" sistemático.
  • Un miniproyecto completo ancla las bases mejor que diez ejercicios aislados — y prepara N2 (archivos) y N3 (tests).

Desafío 48h — aplica mañana

Codifica la agenda del modelo anterior solo, sin copiar: pseudocódigo, una función por verbo, bucle del menú, importación protegida. Añade supprimer(), prueba cada opción, y luego explica cada línea en voz alta. 45 minutos bastan.

Lista de salida de la sección
  • He codificado solo un programa de ~80 líneas que gira.
  • Mi código está dividido (verbos → funciones, menú → main).
  • Puedo explicar cada línea y apuntar a N2 (JSON) y luego N3 (tests).
Autoevaluación 1-5: ¿puedo rehacer este proyecto solo, sin copiar?¿cada función tiene un verbo claro y un return limpio?

Preguntas frecuentes

Conozco la sintaxis pero me bloqueo ante una página en blanco, ¿normal?

Muy normal, y es justamente el objeto de este capítulo. La solución es la descomposición: no intentes escribir el programa entero de golpe, divídelo en pasos muy pequeños que ya sepas codificar (pseudocódigo), y luego ensámblalos uno por uno.

¿Cuántos proyectos hay que hacer antes del nivel 2?

Un proyecto completo y bien comprendido vale más que cinco chapuceros. Si eres capaz de rehacerlo solo, sin copiar, explicando cada línea, estás listo para el nivel 2. Si no, rehace una variante (número misterio, calculadora).

Comprueba tu comprensión

¿Qué prueba un miniproyecto de ~80 líneas codificado solo?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 1Preguntas inéditas y más difíciles para validar tus conocimientos