Aprender a programar resulta más concreto cuando el programa responde a una pregunta sencilla. En este ejercicio vamos a sumar tres gastos ficticios y mostrar un total. Es una práctica independiente, conectada con el enfoque de aprender construyendo de No es magia, es código; no es un extracto del libro.

Un problema pequeño, con una respuesta comprobable

Antes de escribir código, define la entrada y la salida. La entrada será una lista con el concepto y el importe de cada gasto. La salida será un total con dos decimales. Con los datos del ejemplo, podemos calcular a mano que el resultado debe ser 17,00 euros. Esa referencia nos ayudará a comprobar el programa.

from decimal import Decimal

gastos = [
    {"concepto": "Cuaderno", "importe": Decimal("4.50")},
    {"concepto": "Transporte", "importe": Decimal("2.50")},
    {"concepto": "Material", "importe": Decimal("10.00")},
]

def total_gastos(movimientos):
    return sum((g["importe"] for g in movimientos), Decimal("0.00"))

total = total_gastos(gastos)
print(f"Total: {total:.2f} EUR")

Guarda el ejemplo en un archivo llamado gastos.py y ejecútalo con Python 3 en tu ordenador. No necesita paquetes adicionales. La salida será «Total: 17.00 EUR»: el punto decimal forma parte del formato elegido en este pequeño ejemplo.

Qué hace cada pieza

La lista reúne varios movimientos. Cada diccionario conserva un concepto y un importe, de modo que no dependemos de recordar qué representa cada posición. La función recibe esos movimientos y devuelve la suma; mostrar el resultado queda fuera de ella. Así podemos reutilizar el cálculo sin obligarlo a imprimir siempre un mensaje.

Decimal permite trabajar con números decimales. Aquí lo construimos a partir de cadenas como "4.50", en lugar de convertir primero el importe a float. La documentación oficial explica por qué determinados decimales no tienen una representación exacta en coma flotante binaria.

Consultar la documentación oficial de Decimal

Comprobar algo más que el caso feliz

assert total_gastos(gastos) == Decimal("17.00")
assert total_gastos([]) == Decimal("0.00")
assert total_gastos([
    {"concepto": "Prueba", "importe": Decimal("0.10")},
    {"concepto": "Prueba", "importe": Decimal("0.20")},
]) == Decimal("0.30")

Estas comprobaciones documentan lo que esperamos: sumar la lista, devolver cero cuando está vacía y manejar el ejemplo de los céntimos. Si una condición no se cumple, Python detiene esa ejecución con un AssertionError. Son comprobaciones para practicar, no un mecanismo de validación de datos de usuarios.

El siguiente reto

Añade una categoría a cada movimiento y calcula cuánto corresponde a cada una. Antes de programar, escribe el resultado esperado con dos o tres ejemplos. Después decide cómo tratarías un importe vacío o un texto que no representa una cantidad.

Este programa utiliza datos controlados y una sola moneda. Una aplicación real necesitaría validar entradas, decidir cómo tratar devoluciones y monedas, guardar la información y gestionar los errores. No hace falta resolverlo todo hoy: comprender bien un cálculo pequeño es un punto de partida para construir con criterio.

Conocer No es magia, es código

LVX Studio · Tecnología y creación← Volver al blog