Construir una máquina de café en Python desde la terminal es una forma divertida de practicar funciones, módulos, bucles y control de flujo en un mismo proyecto. Aquí aprendes a estructurar el archivo principal, separar la lógica en módulos y manejar la entrada del usuario con input y condicionales.
¿Cómo se estructura el archivo principal de una máquina de café en Python?
Todo proyecto en Python necesita un punto de partida claro, y por convención ese archivo se llama main.py. Ahí vive el flujo principal y desde ahí se invoca todo lo demás.
Dentro de main.py defines una función main() que no recibe argumentos y contiene un bucle while True. Sí, leíste bien: la condición siempre es verdadera. Y aquí viene lo interesante: el bucle no se vuelve infinito porque tú decides cuándo romperlo con un break en el momento adecuado.
¿Para qué sirve while True en Python? Crea un bucle que se repite indefinidamente hasta que un break lo interrumpe. Es útil cuando no sabes cuántas veces se ejecutará el ciclo, como en un menú interactivo.
¿Cómo capturar la opción del usuario con input?
La función input pide al usuario que escriba algo en la terminal y devuelve siempre un string. Por eso, al comparar la opción elegida, debes hacerlo contra texto: "1", "2", "3", no contra números enteros.
Dentro del bucle se muestra el menú, se guarda la elección en una variable opcion y se evalúa con if, elif y else:
- Opción
"1": pedir un café.
- Opción
"2": ver el historial de pedidos.
- Opción
"3": salir con un mensaje de despedida y break.
- Cualquier otra entrada: imprimir Opción inválida y volver a pedir.
Mientras no tengas implementada una funcionalidad, usa pass para que Python no marque error y puedas seguir avanzando.
¿Por qué usar if __name__ == "__main__" en proyectos con varios archivos?
Cuando trabajas con múltiples módulos, necesitas asegurarte de que el programa arranque siempre desde el archivo correcto. Python resuelve esto con una línea muy específica al final del archivo principal:
python
if name == "main":
main()
Esa condición compara el nombre interno del archivo en ejecución con la cadena "__main__". Solo se cumple cuando ejecutas directamente main.py, lo que garantiza que el flujo principal arranque únicamente desde donde tú lo planeaste y no por accidente al importar el archivo desde otro módulo.
¿Cómo separar el menú y los pedidos en módulos distintos?
La idea es que cada archivo tenga una responsabilidad clara. Esto hace el código más legible y fácil de mantener.
¿Cómo construir el módulo del menú?
Creas un archivo llamado menu.py con una función mostrar_menu() que imprime las opciones disponibles. Usa \n al inicio del print para dejar un salto de línea y mejorar la lectura en terminal.
El menú incluye:
- Pedir un café.
- Ver el historial de pedidos.
- Salir.
Luego, desde main.py, importas la función con from menu import mostrar_menu y la invocas dentro del bucle antes de pedir la opción al usuario. Al ejecutar el programa, ya verás el saludo Bienvenido a la máquina de café junto con las tres opciones.
¿Qué hace from menu import mostrar_menu? Importa solo la función mostrar_menu desde el archivo menu.py, sin traer todo el módulo. Así puedes llamarla directamente como si estuviera en el mismo archivo.
¿Cómo manejar el pedido del café con un diccionario?
La lógica del pedido vive en un archivo aparte llamado pedidos.py. Dentro defines la función pedir_cafe() que imprime los tipos de café disponibles y pide al usuario que elija uno con input.
Las opciones se guardan en un diccionario donde la clave es el número de opción y el valor es el nombre del café:
1: expreso.
2: cappuccino.
3: latte.
4: americano.
Usar un diccionario te permite acceder al café elegido directamente con cafes[opcion], sin escribir cuatro if distintos. Es más limpio y escalable: si quieres agregar más cafés, solo añades entradas al diccionario.
¿Qué viene después de capturar el pedido?
La siguiente etapa consiste en guardar cada pedido en un archivo para que después puedas leerlo desde la opción de historial. Esa parte conecta directamente con la lectura y escritura de archivos vista en la clase anterior y se desarrolla en la próxima sección del proyecto.
Mientras tanto, ya tienes el esqueleto funcionando: un menú que se muestra, un usuario que elige, y tres caminos posibles controlados por condicionales. ¿Qué cafés agregarías tú al diccionario? Cuéntame en los comentarios.