El Día 001 del reto 100 Días de Python construye una calculadora de propinas para la línea de comandos. El programa recopila el total de la cuenta, el porcentaje de propina y el número de personas que dividen la cuenta, y luego calcula la parte de cada persona.
Mientras que el Día 000 se enfocó en recopilar texto y combinarlo en una oración, el Día 001 pasa a trabajar con números, un salto pequeño pero importante para los principiantes, ya que Python trata la entrada numérica de forma distinta al texto simple. Este proyecto introduce la conversión de tipos, las operaciones matemáticas básicas y la salida de moneda con formato, todo dentro de una calculadora práctica y real que podrías usar la próxima vez que dividas la cuenta de un restaurante.
Esta guía recorre el código fuente completo del Día 001, explica exactamente cómo funciona el cálculo de la propina y muestra cómo ejecutar el proyecto tú mismo.
Descripción del Proyecto
El programa pide tres valores:
- El total de la cuenta
- El porcentaje de propina
- El número de personas que dividen la cuenta
Convierte la cuenta a float y los demás valores a int. La propina se calcula como un porcentaje del subtotal, se suma a la cuenta y se divide entre el número de personas.
Welcome to the tip calculator!
What was the total bill?
$120
How much tip would you like to give? $10, $12, or $15?
15
How many people to split the bill?
4
Each person should pay: $34.50
Código Fuente
El proyecto del Día 001 está en day001/main.py, dentro del repositorio 100daysofpython:
def main():
print("Welcome to the tip calculator!")
sub_total = float(input("What was the total bill?\n$"))
tip = int(input("How much tip would you like to give? $10, $12, or $15?\n"))
people = int(input("How many people to split the bill?\n"))
tip_amount = sub_total * (tip / 100)
total_bill = sub_total + tip_amount
pay_per_person = total_bill / people
final_amount = f"{pay_per_person:.2f}"
print(f"Each person should pay: ${final_amount}")
if __name__ == "__main__":
main()
Cómo Funciona el Programa
Recopilar y Convertir los Datos Numéricos
input() siempre devuelve una cadena de texto, incluso cuando el usuario escribe números. Envolver la llamada en float() o int() convierte ese texto en un número utilizable:
sub_total = float(input("What was the total bill?\n$"))
tip = int(input("How much tip would you like to give? $10, $12, or $15?\n"))
people = int(input("How many people to split the bill?\n"))
sub_total usa float() porque una cuenta puede incluir centavos, mientras que tip y people usan int() ya que un porcentaje entero y un número entero de personas bastan para este proyecto.
Calcular la Propina y el Total
El cálculo se separa en pasos claros y legibles:
tip_amount = sub_total * (tip / 100)
total_bill = sub_total + tip_amount
pay_per_person = total_bill / people
tip / 100 convierte un porcentaje entero como 15 en un decimal como 0.15, que luego se multiplica por el subtotal para encontrar el monto de la propina en dólares.
Dar Formato a la Salida
final_amount = f"{pay_per_person:.2f}"
print(f"Each person should pay: ${final_amount}")
El especificador de formato :.2f redondea un número a exactamente dos decimales, lo cual es esencial para mostrar correctamente una cantidad de dinero; sin él, Python podría imprimir algo como 34.5 o 34.499999999999996 en lugar de un limpio 34.50.
Ejecutar la Función Principal
El script envuelve su trabajo en main() y usa la protección del módulo principal para que la función se ejecute solo cuando el archivo se ejecuta directamente:
if __name__ == "__main__":
main()
Qué Enseña Este Proyecto
El Día 001 ofrece práctica con:
- Convertir datos de texto en valores
floateint - Elegir el tipo numérico adecuado para cada dato
- Realizar cálculos de porcentajes
- Dar formato de moneda a los números con f-strings y
:.2f - Estructurar un script con
main()y la protección del módulo principal
También muestra por qué importa elegir el tipo correcto: la cuenta requiere soporte para decimales, mientras que el porcentaje de propina y el número de personas pueden ser números enteros.
Ejecutar el Proyecto
git clone https://github.com/victorhugo81/100daysofpython.git
cd 100daysofpython/day001
python main.py
Si los entornos de Python son nuevos para ti, consulta Entornos Virtuales de Python: Guía de Configuración y Mejores Prácticas.
Posibles Siguientes Pasos
Cuando entiendas el código existente, intenta ampliarlo:
- Valida que la propina ingresada sea un porcentaje razonable, en lugar de aceptar cualquier número
- Redondea
pay_per_personhacia arriba al centavo más cercano para que al grupo nunca le falte dinero - Deja que el usuario elija un porcentaje de propina personalizado en lugar de escoger entre las opciones sugeridas
- Agrega una línea de resumen que muestre el total de la cuenta con propina incluida, no solo la parte de cada persona
Errores Comunes de Principiantes
Algunos obstáculos que debes vigilar al adaptar este proyecto:
- Olvidar convertir los datos por completo. Si omites
float()oint(), Python trata cada respuesta como una cadena de texto, ysub_total + tip_amountlanzaría unTypeErroren lugar de hacer la operación matemática. - Usar
int()donde se necesitafloat(). Si usasint()por accidente en el monto de la cuenta, los centavos que se escriban se descartarían en silencio en lugar de redondearse. - Omitir el formato
:.2f. Las operaciones con números de punto flotante pueden producir resultados como34.499999999999996por la forma en que las computadoras almacenan los decimales; dar formato a dos decimales oculta esa imprecisión y muestra un precio limpio y de aspecto correcto.
Conclusión
El Día 001 del reto 100 Días de Python pasa de la entrada basada en texto a los cálculos numéricos, mostrando cómo float() e int() convierten los datos del usuario en números utilizables, y cómo el formato con f-strings convierte un cálculo en bruto en una salida de moneda limpia y legible.
Consulta el código fuente del Día 001 en GitHub y sigue explorando el índice de proyectos del repositorio mientras construyes más programas en Python, un día y un proyecto pequeño a la vez.
