Tip calculator con Python

El último programa del Problem Set 0 del curso CS50Python se llama Tip Calculator. Hoy te voy a explicar cómo implementar un programa que te permita saber cuánta propina tienes que dejar en un restaurante. Lo único que necesitas saber es el monto de la cuenta, y el porcentaje que deseas dejar de propina.

Te copio el enunciado del problema traducido al español:

En Estados Unidos, es costumbre dejar una propina al camarero después de cenar en un restaurante, normalmente una cantidad equivalente al 15% o más del coste de la comida. Pero no te preocupes, ¡a continuación te ofrecemos una calculadora de propinas!

def main():
    dollars = dollars_to_float(input("How much was the meal? "))
    percent = percent_to_float(input("What percentage would you like to tip? "))
    tip = dollars * percent
    print(f"Leave ${tip:.2f}")


def dollars_to_float(d):
    # TODO


def percent_to_float(p):
    # TODO


main()

Bueno, hemos escrito la mayor parte de una calculadora de propinas para ti. Desafortunadamente, no tuvimos tiempo de implementar dos funciones:

  • dollars_to_float, que debería aceptar una cadena como entrada (formateada como $##.##, donde cada # es un dígito decimal), quitar el $ inicial, y devolver la cantidad como un float. Por ejemplo, dado $50.00 como entrada, debería devolver 50.0.
  • percent_to_float, que debe aceptar una cadena como entrada (formateada como ##%, donde cada # es un dígito decimal), eliminar el % final y devolver el porcentaje como un flotante. Por ejemplo, dado 15% como entrada, debería devolver 0.15.

Supongamos que el usuario introducirá los valores en los formatos esperados.

Okay, a partir de este problema las cosas se empiezan a complicar poco a poco, pero para bien. Ya vemos que en el enunciado del problema, nos dan una base sobre la cual apoyarnos para comenzar a programar. Mientras que en ejercicios anteriores como este, la iniciativa de crear las funciones energy(mass) y square(n) vino de mí misma, en el problema de hoy la estructura del programa se encuentra presente en el enunciado del problema.

Acá puedes ver un "demo" de lo que se espera que haga el programa :

0:00
/0:16

Demo del programa tip.py

Muy bien. Ahora voy a copiar la solución que yo decidí implementar y, como siempre, voy a explicar la resolución paso a paso:

def main():
    dollars = dollars_to_float(input("How much was the meal? "))
    percent = percent_to_float(input("What percentage would you like to tip? "))
    tip = dollars * percent
    print(f"Leave ${tip:.2f}")  
  

def dollars_to_float(d):
    d_int = float(d.replace("$", ""))
    return d_int / 100
  

def percent_to_float(p):
    return float(p.replace("%", ""))
  

main()

En mi programa tip.py hay 3 funciones, main(), dollars_to_float(d) y percent_to_float(p). El objetivo principal de utilizar funciones es que esto permite darle una mejor estructura al programa, haciendo que sea más fácil de leer y en consecuencia, que el programa esté mejor diseñado. Es una buena práctica darle orden a nuestros programas para que, si otra persona debe retomar el código que hacemos, se le haga fácil entender lo que hemos programado.

En posts anteriores ya he explicado que main() es la función principal del programa, y es la que "llama" a las demás funciones. Podemos ver que se ejecutan las funciones dollars_to_float(d) y percent_to_float(p), y que el argumento de cada función es el input del usuario. Primero, se le pregunta al usuario cuánto costó la comida, y en segundo lugar, se le pregunta al usuario cuál porcentaje de propina desea dar. Luego, se define la variable tip, que es la multiplicación del resultado de la ejecución de las dos funciones anteriores, y por último, se muestra en pantalla (gracias a la función print()) el monto que se debe dejar de propina, una vez realizado el cálculo.

La función dollars_to_float(d) permite recuperar el input del usuario, convertirlo en un número decimal (recordemos que el input del usuario se recibe como cadena de caracteres o string), para luego reemplazar el símbolo de dólar (USD) por nada '""', y devolver este resultado dividido entre 100. Por ejemplo, si el usuario introduce 320$, la función va a devolver 3.20.

La función percent_to_float(p) va a convertir el input del usuario en un número decimal, y quitar el símbolo de porcentaje (%). Esto quiere decir que, si el usuario introduce "10%", la función va a devolver el número decimal 10.00.

Entonces, volvamos a un ejemplo básico. Imaginemos que el monto de la cuenta que el usuario introduce es de 320$. Luego el usuario introduce 15% como porcentaje que desea dejar de propina. Si ejecutamos mi programa tip.py, lo primero que va a suceder es que los 320$ se convierten en 3.2, que al multiplicarlos por el porcentaje (15), nos da como resultado 48. El resultado que se verá en pantalla sera "Leave $48.00"

Un dato curioso que es nuevo, y que no hemos visto en problemas anteriores, es la implementación de la función print() dentro de la función main() :

print(f"Leave ${tip:.2f}")

Todo lo que está dentro de los paréntesis se ve un poco enigmático, pero lo voy a explicar paso a paso :

La f"" permite incluir expresiones de python dentro de llaves: {}. Esto permite que la cadena de caracteres sea mucho más concisa. Luego vemos que dentro de las llaves se encuentra la expresión {tip:.2f}. Esto permite introducir dentro de la cadena de caracteres el resultado de la implementación de tip, y gracias a la especificación .2f, se mostrará el resultado con 2 decimales, con un formato de flotante (float, decimal en español).

Ahora ya sabes cómo implementar un programa en python que te permita calcular el monto de tus propinas. Muy útil para la próxima vez que vayas a un restaurante, ¿eh?

😉


¿Te gusta esta publicación? Compártela con tu amiga(o) favorita(o) 😬
¿Tienes un consejo? Déjame un comentario 📜
Para todo lo demás, consígueme aquí

Subscribe to cachapa frita

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe