lección 6
Proyecto mini: un programa que resuelve un problema real
Combina todo lo aprendido (variables, if/else, bucles, funciones) para crear un programa completo que resuelve un problema de verdad.
⏱ 60 min
Has llegado al final de la Skill 2 y es hora de demostrar todo lo que sabes. En las lecciones anteriores aprendiste los cuatro pilares de la programación: variables (memoria), decisiones (if/else), bucles (repetición) y funciones (reutilización). Ahora vas a combinarlos todos en un programa completo que resuelve un problema REAL. No es un ejercicio de juguete — es un programa que podrías usar de verdad.
### El problema: gestor de gastos personales
El proyecto que vas a construir es un gestor de gastos personal por consola. El programa permite registrar gastos, verlos clasificados por categoría, calcular totales y mostrar estadísticas. Es un problema real — mucha gente necesita exactamente esto para controlar sus finanzas. Y combina absolutamente todo lo que has aprendido.
Antes de escribir ni una línea de código, vamos a pensar. Recuerda la lección 1: si no puedes explicar tu programa en una servilleta, es demasiado complejo. Vamos a desglosar el problema en partes pequeñas:
- 01.El programa muestra un MENÚ con opciones (bucle while — se repite hasta que el usuario elija salir).
- 02.El usuario puede AÑADIR un gasto (input + variables + almacenamiento en lista).
- 03.El usuario puede VER todos los gastos (bucle for para recorrer la lista).
- 04.El usuario puede ver un RESUMEN por categoría (bucle + condicional + acumulador).
- 05.Cada operación es una FUNCIÓN separada (organización y reutilización).
### Paso 1: la estructura de datos
Necesitamos guardar los gastos. Cada gasto tiene tres datos: concepto (qué compraste), cantidad (cuánto costó) y categoría (comida, transporte, ocio...). En Python, podemos guardar cada gasto como un "diccionario" (pares clave:valor) y todos los gastos en una lista. No te preocupes si no has visto diccionarios formalmente — son intuitivos:
1# Estructura: lista de diccionarios2# Cada gasto es un diccionario con 3 campos3gastos = [] # Empieza vacío45# Ejemplo de cómo se verá cuando tenga datos:6# gastos = [7# {"concepto": "Café", "cantidad": 2.50, "categoria": "comida"},8# {"concepto": "Metro", "cantidad": 1.50, "categoria": "transporte"},9# {"concepto": "Netflix", "cantidad": 12.99, "categoria": "ocio"},10# ]1112# Acceder a datos de un gasto:13# gastos[0]["concepto"] → "Café"14# gastos[0]["cantidad"] → 2.50
Un diccionario es como una ficha: tiene campos con nombre. Una lista de diccionarios es como un archivador de fichas.
### Paso 2: las funciones
Vamos a construir el programa función por función. Cada función hace UNA cosa. Esto es diseño modular — si mañana quieres cambiar cómo se muestra la lista de gastos, solo tocas una función sin afectar al resto.
1def mostrar_menu():2 """Muestra las opciones disponibles."""3 print("")4 print("=" * 35)5 print(" 💰 GESTOR DE GASTOS PERSONALES")6 print("=" * 35)7 print(" 1. Añadir gasto")8 print(" 2. Ver todos los gastos")9 print(" 3. Resumen por categoría")10 print(" 4. Buscar gastos")11 print(" 5. Salir")12 print("-" * 35)131415def agregar_gasto(gastos):16 """Pide datos al usuario y añade un gasto a la lista."""17 print("")18 concepto = input(" ¿Qué compraste? ")19 cantidad = float(input(" ¿Cuánto costó? (€): "))20 print(" Categorías: comida, transporte, ocio, hogar, otros")21 categoria = input(" Categoría: ").lower()2223 gasto = {24 "concepto": concepto,25 "cantidad": cantidad,26 "categoria": categoria27 }28 gastos.append(gasto) # Añadir a la lista29 print(f" ✓ Gasto registrado: {concepto} ({cantidad:.2f}€)")303132def ver_gastos(gastos):33 """Muestra todos los gastos registrados."""34 if len(gastos) == 0:35 print(" No hay gastos registrados todavía.")36 return3738 print("")39 print(f" {'#':<4}{'Concepto':<20}{'Cantidad':<12}{'Categoría'}")40 print(" " + "-" * 50)4142 total = 043 for i in range(len(gastos)):44 g = gastos[i]45 print(f" {i+1:<4}{g['concepto']:<20}{g['cantidad']:<12.2f}{g['categoria']}")46 total = total + g["cantidad"]4748 print(" " + "-" * 50)49 print(f" TOTAL: {total:.2f}€ ({len(gastos)} gastos)")
Cada función tiene un propósito claro y un nombre que lo explica.
1def resumen_categorias(gastos):2 """Muestra el total gastado por categoría."""3 if len(gastos) == 0:4 print(" No hay gastos registrados.")5 return67 # Acumular por categoría8 categorias = {}9 for gasto in gastos:10 cat = gasto["categoria"]11 if cat in categorias:12 categorias[cat] = categorias[cat] + gasto["cantidad"]13 else:14 categorias[cat] = gasto["cantidad"]1516 # Mostrar resumen17 print("")18 print(" === RESUMEN POR CATEGORÍA ===")19 total_general = 020 for cat in categorias:21 total_cat = categorias[cat]22 total_general = total_general + total_cat23 print(f" {cat:<15} {total_cat:>8.2f}€")2425 print(f" {'TOTAL':<15} {total_general:>8.2f}€")262728def buscar_gastos(gastos):29 """Busca gastos por categoría o por importe mínimo."""30 print(" Buscar por: (1) categoría (2) importe mínimo")31 tipo = input(" Opción: ")3233 encontrados = []34 if tipo == "1":35 cat = input(" ¿Qué categoría? ").lower()36 for gasto in gastos:37 if gasto["categoria"] == cat:38 encontrados.append(gasto)39 elif tipo == "2":40 minimo = float(input(" ¿Importe mínimo? (€): "))41 for gasto in gastos:42 if gasto["cantidad"] >= minimo:43 encontrados.append(gasto)4445 if len(encontrados) == 0:46 print(" No se encontraron gastos con esos criterios.")47 else:48 print(f" Encontrados: {len(encontrados)} gastos")49 for g in encontrados:50 print(f" - {g['concepto']}: {g['cantidad']:.2f}€ ({g['categoria']})")
Las funciones de resumen y búsqueda usan bucles, condicionales y acumuladores — todo lo aprendido.
### Paso 3: el bucle principal
El corazón del programa es un bucle while que muestra el menú, pide una opción y llama a la función correspondiente. Se repite hasta que el usuario elija "salir". Este patrón (menú + while + if/elif) es la columna vertebral de miles de programas de consola:
1# Bucle principal del programa2gastos = [] # Lista donde se guardan todos los gastos34while True:5 mostrar_menu()6 opcion = input(" Tu elección (1-5): ")78 if opcion == "1":9 agregar_gasto(gastos)10 elif opcion == "2":11 ver_gastos(gastos)12 elif opcion == "3":13 resumen_categorias(gastos)14 elif opcion == "4":15 buscar_gastos(gastos)16 elif opcion == "5":17 print("")18 print(" ¡Hasta luego! Tus gastos NO se guardan al cerrar.")19 print(" (En la Skill 3 aprenderás a guardar en archivo)")20 break21 else:22 print(" ❌ Opción no válida. Elige entre 1 y 5.")
while True + break es un patrón clásico para menús: repite infinitamente hasta que el usuario elija salir.
Felicidades. Acabas de escribir un programa REAL de ~80 líneas que combina TODOS los conceptos de esta skill. Hagamos inventario de lo que has usado:
- Variables: gastos (lista), opcion, concepto, cantidad, categoria, total...
- Tipos: strings, floats, ints, listas, diccionarios, booleanos.
- Decisiones: if/elif/else para el menú, para clasificar, para buscar.
- Bucles: while True para el menú, for para recorrer gastos.
- Funciones: 5 funciones separadas, cada una con un propósito claro.
- Input/output: input() para pedir datos, print() para mostrar resultados.
- Patrón acumulador: sumar totales, contar gastos por categoría.
### Ideas para mejorar (por tu cuenta)
Si quieres practicar más, aquí tienes ideas para extender el proyecto. Cada una te obliga a pensar y combinar lo aprendido de formas nuevas:
- Añadir la opción de ELIMINAR un gasto (pedir el número y sacarlo de la lista).
- Mostrar el gasto más caro y el más barato.
- Calcular la media de gastos por día (pidiendo la fecha de cada gasto).
- Establecer un presupuesto mensual y avisar cuando se supere.
- Exportar los gastos como texto formateado (para copiar/pegar en un email).
Limitación: cuando cierras el programa, los gastos desaparecen. No hemos aprendido aún a guardar datos en archivos — eso viene en la Skill 3 (Python desde cero) donde aprenderás a leer y escribir ficheros. Por ahora, cada ejecución empieza de cero.
### ¿Qué viene después?
Has completado la Skill 2: Pensamiento lógico y programación. Ahora sabes PENSAR como un programador — descomponer problemas, usar variables para recordar datos, tomar decisiones con if/else, repetir acciones con bucles y organizar código en funciones. En la Skill 3 (Python desde cero) vas a profundizar en el lenguaje: instalar Python formalmente, trabajar con estructuras de datos avanzadas, leer y escribir archivos, usar módulos de otros programadores y construir scripts que procesen datos reales. La base lógica que tienes ahora hará que todo lo demás sea mucho más fácil de aprender.
## ejercicios
Proyecto: Gestor de gastos completo
Escribe el programa completo del gestor de gastos juntando todas las funciones explicadas en la lección. Debe tener menú, añadir gastos, verlos, resumen por categoría y salir.
Proyecto alternativo: Quiz de cultura general
Crea un juego de preguntas tipo test. Ten 5 preguntas con 3 opciones cada una. El programa pregunta una a una, el usuario elige, y al final muestra la puntuación. Usa una lista de diccionarios para las preguntas y funciones para organizar el código.
Proyecto alternativo: Agenda de contactos
Crea una agenda de contactos por consola: añadir contacto (nombre, teléfono, email), buscar por nombre, listar todos, y eliminar contacto. Mismo patrón que el gestor de gastos pero con datos diferentes.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...