1. Faro

Nivel 10 · Desafío final: construye la calculadora de caja

La solicitud

De Kevin Nguyen, Director de Ingeniería

“La página de pago está caída y soporte está dando los totales a mano. ¿Puedes programar el cálculo para que peguen un carrito y obtengan el total exacto, con cupón y envío incluidos?”

Tu objetivo

Paso 1 de 3. Asigna a result el subtotal del carrito como float: lamp_price por lamp_qty más pillow_price por pillow_qty, redondeado a 2 decimales.

  • Guarda un número 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

        Juntar los fundamentos

        El código de análisis real rara vez es una línea ingeniosa. Es una cadena corta de pasos sencillos, cada uno fácil de comprobar: calcular algo, ajustarlo según una regla, presentarlo. Este Desafío final es exactamente esa cadena, y usa todo el capítulo: variables, aritmética, redondeo, limpieza de strings, condiciones y f-strings.

        Paso 1: el subtotal

        Una línea del carrito es precio por cantidad. Un subtotal es la suma de las líneas:

        subtotal = lamp_price * lamp_qty + pillow_price * pillow_qty

        Redondea una vez, al final, a dos decimales. Redondear primero cada línea puede hacer que el total se desvíe un centavo en carritos más grandes.

        Paso 2: un cupón escrito por una persona

        La gente escribe los códigos de cupón de todas las formas posibles: pine10, PINE10, Pine10 . Si comparas el texto sin limpiar con "PINE10", la mayoría fallan. Normaliza primero y compara después:

        code = coupon.strip().upper()
        if code == "PINE10":
            discounted = subtotal * 0.9
        else:
            discounted = subtotal

        Un descuento del 10% significa que el cliente paga el 90%, así que multiplicar por 0.9 es lo mismo que subtotal - subtotal * 0.10. Ambas son correctas; elige la que te resulte más clara.

        Fíjate en la rama else. Sin ella, discounted no existiría cuando el cupón es incorrecto, y la línea siguiente fallaría con un NameError. Todos los caminos de tu if deben dejar definidas las variables que usarás después.

        Paso 3: envío y un total legible

        La regla de envío depende del importe con descuento, que es una decisión de negocio habitual: el cliente tiene que gastar $75 después de los descuentos para ganar el envío gratis. Cuando ya tienes el número final, dale formato para las personas:

        total = discounted + shipping
        f"Total: ${total:.2f}"   # 'Total: $181.78'

        El formato :.2f redondea y también rellena, así que 181.8 se mostraría como 181.80. Para los agentes de soporte esa consistencia importa: un total que a veces muestra un decimal parece un error.

        Pensar como un analista

        Antes de escribir código para una regla así, anota la regla con palabras sencillas y comprueba los casos límite con quien la pidió:

        • ¿El cupón se aplica antes o después del envío? (Aquí: antes, solo a los productos.)
        • ¿El envío gratis se juzga antes o después del descuento? (Aquí: después.)
        • ¿Qué pasa en exactamente $75? (Aquí: gratis.)

        La mayoría de los «errores» en los cálculos de negocio no son fallos de Python. Son reglas que nunca se definieron del todo. Hacer estas preguntas pronto es una parte importante del trabajo.

        Errores comunes

        • Comparar el cupón sin limpiarlo, de modo que " pine10 " nunca coincide.
        • Aplicar el envío al subtotal antes del descuento, lo que cambia quién recibe el envío gratis.
        • Devolver el número en lugar del texto con formato en el último paso. La tarea pide el string Total: $181.78, así que result debe ser un str.

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