1. Faro

Nivel 9 · Desafío final: procesa la exportación del proveedor

La solicitud

De Laura Bennett, Directora de Finanzas

“La herramienta de facturas de nuestro proveedor exporta los precios como texto con signos de dólar, comas y espacios sueltos. Necesito números reales para comprobar el total de una factura, y líneas de recibo que pueda pegar en un correo.”

Tu objetivo

Paso 1 de 3. Define parse_price(text) que quite los espacios, elimine '$' y ',' y devuelva un float. Asigna a result el valor de [parse_price(t) for t in raw_prices].

  • Guarda una lista de 4 en resultpendiente

Paso 1 · tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    Paso 2 · tu código

    Python

    Cargando el editor…

      ResultadoPresiona Ejecutar para ver el tuyo

      Mote revisa tu resultado

      Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

      Paso 3 · tu código

      Python

      Cargando el editor…

        ResultadoPresiona Ejecutar para ver el tuyo

        Mote revisa tu resultado

        Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

        La lección

        Texto que debería ser número

        Las exportaciones de herramientas de facturación, hojas de cálculo y páginas web suelen guardar los números como texto con formato: "$1,249.00", " 34.50", "12,000". No puedes sumarlos. float("$1,249.00") falla con ValueError: could not convert string to float. Antes de cualquier análisis, el texto tiene que convertirse en número, y la forma más limpia de hacerlo es una función pequeña y bien probada.

        Paso 1: un trabajo, una función

        def parse_price(text):
            cleaned = text.strip().replace("$", "").replace(",", "")
            return float(cleaned)

        Cada método devuelve un string nuevo, así que la cadena se lee de izquierda a derecha: recorta los espacios, quita el signo de dólar, quita los separadores de miles y luego convierte. Pruébala con los casos incómodos, como un espacio inicial o una cantidad de cinco cifras, antes de fiarte de ella. Si un valor no se puede leer (por ejemplo "N/A"), float() lanza un error, y normalmente eso es lo que quieres: un fallo ruidoso es mejor que un total erróneo en silencio.

        Paso 2: funciones dentro de expresiones

        Una vez que existe parse_price, el total es una sola expresión. Cada línea de la factura es una tupla de tres valores, que puedes desempaquetar directamente en la comprehension:

        sum(qty * parse_price(price) for name, qty, price in invoice)

        Esto es composición: pequeñas funciones usadas como bloques de construcción dentro de expresiones más grandes. No copies la cadena .strip().replace(...) en el total. Si el formato de la exportación cambia (por ejemplo, aparece un código de moneda), querrás arreglar exactamente un solo sitio.

        El nombre name no se usa en el total, pero el desempaquetado necesita una variable por cada posición. La convención de Python es llamar _ a una variable sin usar, como en for _, qty, price in invoice.

        Paso 3: dar formato para las personas

        Los analistas producen números para personas, y las personas leen $1,249.00 con mucha más facilidad que 1249.0. La especificación de formato ,.2f añade un separador de miles y fija dos decimales:

        f"{1249.0:,.2f}"      # '1,249.00'
        f"{138.0:,.2f}"       # '138.00'

        Mantén el número como número hasta el último momento y luego dale formato. Una lista de strings con formato es estupenda para un correo, pero ya no puedes sumarla.

        Una pequeña función auxiliar como receipt_line(name, qty, price_text) mantiene corta la comprehension y le da nombre a la regla de formato. Eso compensa el día en que alguien pida la misma línea en otro informe.

        Hábitos que conviene mantener

        • Lee una vez, en el borde de tu código, y luego trabaja con números limpios.
        • Mantén separados los valores sin procesar y los limpios hasta que hayas comprobado la limpieza.
        • Contrasta: los totales de línea del paso 3, convertidos de nuevo a números, deben sumar el total del paso 2.

        Errores comunes

        • Quitar la coma pero no el signo de dólar (o al revés), de modo que float() falla.
        • Olvidar .strip(). float(" 34.50") en realidad tolera los espacios de alrededor, pero otros pasos de limpieza, como comprobar startswith("$"), no, así que quita los espacios primero.
        • Usar {line_total:.2f} sin la coma, que muestra 1249.00 en lugar de 1,249.00.

        Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.