Ya sabes declarar variables, recorrer listas y guardar tareas en JSON. Ahora vas a utilizar esos conocimientos para resolver un problema que exige relacionar varias piezas. El objetivo de esta lección es definir el proyecto y comprobar qué necesitas repasar antes de añadir herramientas nuevas. No vamos a comenzar otra vez por explicar qué es una variable.
Un punto de partida concreto
En «Programación desde cero» construiste un gestor de tareas local. Conserva su carpeta como referencia y crea otra para este curso. Separarlas te permite comparar soluciones sin estropear un programa que ya funciona. Si no hiciste aquel curso puedes incorporarte siempre que entiendas una función con parámetros, un diccionario y un bucle. Si esas tres piezas todavía te resultan confusas conviene practicar con ellas primero.
El nuevo proyecto será un inventario de material de un pequeño taller. Cada artículo tendrá un código único, un nombre y una cantidad entera no negativa. Trabajaremos con cuadernos, lápices y carpetas inventados. El programa permitirá añadir artículos, consultarlos e intercambiar datos mediante CSV. Guardará la información en SQLite. No será una aplicación de contabilidad ni un sistema para gestionar ventas reales.
Distinguir una necesidad de una ocurrencia
«Quiero organizar el material» expresa una intención pero no permite comprobar si has terminado. «Quiero registrar tres cuadernos con el código CU001 y volver a encontrarlos después de cerrar el programa» sí describe una conducta observable. Anota siempre una entrada, una acción y un resultado. Esa pequeña disciplina evita desarrollar pantallas o funciones que todavía no sabes para qué necesitas.
Imagina que introduces dos veces CU001. Hay varias soluciones posibles: sumar cantidades, sustituir el registro o rechazar el segundo alta. Elegiremos rechazarlo. No existe una respuesta universal pero tu decisión debe ser explícita. De lo contrario cada parte del programa puede hacer algo distinto y el resultado dependerá de cómo hayas introducido los datos.
También decidimos que una cantidad representa unidades completas. Admitiremos cero para conservar un artículo agotado. Rechazaremos cantidades negativas y textos como «tres». No incorporaremos precios al proyecto final: los números decimales tendrán una práctica independiente para que conozcas sus particularidades sin ampliar innecesariamente el inventario.
Revisar sin repetir todo el curso anterior
Guarda este ejemplo como diagnostico.py. Antes de ejecutarlo escribe en el cuaderno qué valor esperas. El objetivo no es memorizarlo sino explicar qué entra en la función y por qué sale esa cifra.
articulos = [
{"codigo": "CU001", "cantidad": 3},
{"codigo": "LA001", "cantidad": 5},
def contar_unidades(registros): total = 0 for registro in registros: total += registro["cantidad"] return total
print(contar_unidades(articulos)) «`
El resultado es 8. La función recibe una lista, visita cada diccionario y acumula una de sus propiedades. No necesita pedir datos por teclado ni saber dónde se guardan. Esa separación será central en el curso. Si cambias la cantidad del primer registro a cero obtendrás 5. Una lista vacía produce cero porque el bucle no llega a ejecutarse.
Delimitar la primera versión
La versión final funcionará desde la terminal y la utilizará una persona cada vez. No llevará usuarios, contraseñas, conexión a internet ni sincronización entre ordenadores. Son exclusiones conscientes. Una aplicación pequeña que puedes verificar aporta más aprendizaje que un proyecto enorme del que solo entiendes fragmentos. Tampoco automatizaremos borrados: los ejercicios de archivos se harán en carpetas de prueba.
El recorrido comienza con herramientas de Python que facilitan trabajar con datos. Después separaremos responsabilidades, validaremos entradas y escribiremos pruebas. Los capítulos de archivos y CSV prepararán la transición a una base de datos. La integración completa aparecerá en los capítulos diecinueve y veinte. Hasta entonces cada ejemplo indicará su archivo o se entenderá como una práctica independiente.
Un criterio de aceptación para cada función
Un criterio de aceptación describe una comprobación que otra persona podría repetir. Para el alta: introducir CU001, «Cuaderno» y 3 en una base vacía debe crear un registro. Para la consulta: buscar «cuad» debe encontrarlo sin exigir las mismas mayúsculas. Para la importación: un archivo con un registro incorrecto no debe dejar guardada una mitad del lote. Escribe estos criterios antes de programarlos.
Errores habituales
Confundir un inventario con una lista de nombres hace que olvides los identificadores. Dos artículos pueden tener nombres parecidos pero no deben compartir código. Otro error consiste en cambiar las reglas a medida que escribes cada pantalla. Si permites cero en una función y lo rechazas en otra tendrás un fallo de coherencia aunque ambos fragmentos se ejecuten sin errores de Python.
También conviene evitar datos personales o importantes durante el aprendizaje. Un archivo inventado permite probar duplicados y fallos sin miedo a perder información. Conserva el gestor anterior intacto y registra las decisiones nuevas en una hoja aparte. Esa comparación te ayudará a distinguir conocimientos que ya dominas de las herramientas que estás incorporando ahora.
Lo que deberías recordar
- El curso continúa el gestor de tareas anterior.
- Un requisito debe poder comprobarse.
- Cada artículo tendrá un código único.
- La primera versión será local y para una persona.
Ejercicio práctico
Crea la carpeta programar-con-python y ejecuta diagnostico.py con los dos registros del ejemplo. Anota el resultado previsto y el obtenido. Repite con una lista vacía y con una cantidad igual a cero. Después añade un tercer artículo con dos unidades y comprueba que el total sube a diez.
Redacta cinco requisitos del inventario usando la forma «al introducir… el programa debe…». Incluye un alta válida, un código repetido, una cantidad negativa, una búsqueda sin resultados y una importación con una fila incorrecta. No programes todavía esas operaciones. La entrega de hoy es una especificación pequeña que podrás recuperar en la última lección.
Para comprobar tu trabajo pide a otra persona que lea los requisitos o léelos como si desconocieras tu idea. Si no puedes decidir si una prueba pasa o falla falta precisión. Sustituye expresiones como «debe ir bien» por resultados concretos. Escribe además dos funciones que decides dejar fuera de esta versión y explica qué complicación evitará cada exclusión.
Siguiente: Preparar un entorno de trabajo separado.








