La solicitud

De Laura Bennett, Directora de Finanzas
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 2 de 3. Cada línea de la factura es (nombre del producto, cantidad, texto del precio). Asigna a result el total de la factura como float: la suma sobre las líneas de la cantidad por el precio ya leído, redondeada a 2 decimales.
- Guarda un número en
resultpendiente
Paso 3 de 3. Asigna a result una lista de strings, uno por línea de la factura en orden, con la forma exacta Walnut Dining Table x1 = $1,249.00: el nombre, un espacio, x y la cantidad, ' = $', y luego el total de la línea (cantidad por precio ya leído) con separador de miles y 2 decimales.
- Guarda una lista de 3 en
resultpendiente
Paso 1 · tu código
Cargando el editor…
Solución de referencia
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
Cargando el editor…
Solución de referencia
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
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Laura, y por qué
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 comprobarstartswith("$"), no, así que quita los espacios primero. - Usar
{line_total:.2f}sin la coma, que muestra1249.00en lugar de1,249.00.
¡Linterna encendida!
Practicaste: functionsstring methodsfloat conversionf stringscomposition
- Resuelto
- Sin pistas
- Al primer intento
