1.5Formación completa con hilo conductor
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.
🔎 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
- Elige un miniproyecto: agenda de contactos (añadir/buscar/listar/eliminar), juego del número misterio, o calculadora en bucle.
- Escribe primero el pseudocódigo: los grandes pasos en español (sortear un número, iterar, comparar, indicar más/menos, contar los intentos).
- 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.
- Prueba, provoca errores, corrige con print(): cuida la experiencia (mensajes claros, número de intentos mostrado).
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.
- 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).
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).
¿Qué prueba un miniproyecto de ~80 líneas codificado solo?