CodeForge

Python de Cero a Experto / Python intermedio

Reto: procesador de datos robusto

Reto40 min60 XP

Junta todo el módulo en un procesador de datos robusto para Mi Bolsillo: lee gastos desde JSON, VALIDA cada uno lanzando excepciones personalizadas, agrupa los válidos, y guarda un reporte —manejando con elegancia los datos malos sin caerse—. Es exactamente cómo se procesan datos reales: nunca confías en que lleguen perfectos, así que validas y manejas errores en cada paso. El código que no se rompe ante datos imperfectos.

Reto

Procesador robusto

Media35 min60 XP(×2 sin mirar la solución)

Qué debes construir

Un programa que procese una lista de gastos (algunos con datos inválidos) de forma robusta:

  1. Excepción personalizada GastoInvalidoError(Exception).
  2. validar_gasto(gasto): revisa que tenga nombre (no vacío), valor (número positivo) y categoria válida; lanza GastoInvalidoError con un mensaje claro si algo falla.
  3. Procesar la lista: valida cada gasto en un try/except; los válidos van a una lista, los inválidos se reportan (sin detener el proceso).
  4. Guardar los gastos válidos en un archivo JSON con json.dump.
  5. Un reporte con el total de válidos, el conteo de inválidos y el total por categoría.

Parte de estos datos (nota los dos gastos con problemas):

datos.py
entrada = [
  {"nombre": "Mercado", "valor": 87500, "categoria": "comida"},
  {"nombre": "Taxi", "valor": -12000, "categoria": "transporte"},  # valor negativo
  {"nombre": "Café", "valor": 4200, "categoria": "comida"},
  {"nombre": "", "valor": 5000, "categoria": "ocio"},              # nombre vacío
  {"nombre": "Cine", "valor": 18000, "categoria": "ocio"},
]

Reglas

  • Un gasto inválido NO debe detener el proceso: se captura, se reporta, y se sigue con los demás.
  • Usa una excepción personalizada y try/except por cada gasto.
  • Guarda el resultado con json.dump y usa with para el archivo.

35:00

Cuando estés listo, arranca el reloj.

Qué sigue

Módulo 5 conquistado: dominas el Python intermedio —excepciones, context managers, archivos, JSON/CSV y CLIs—. Tus programas ahora son robustos e interactúan con el mundo real. El módulo 6 trae el Python AVANZADO: generadores (yield), decoradores desde cero, typing moderno, pattern matching y asyncio —las técnicas elegantes que caracterizan al código experto en Python—.