Solución al Problema de la Máquina Expendedora-Lógica de Resolución Paso a Paso
Lógica de Resolución Paso a Paso del Problema de la Máquina Expendedora
Paso 1: Entender el Flujo Principal del Programa
Problema: La máquina debe funcionar continuamente hasta que el usuario diga "PARA"
Lógica:
Necesitamos un ciclo que se repita infinitamente
En cada repetición, preguntamos al usuario qué quiere hacer
Solo debemos salir del ciclo cuando reciba la palabra "PARA"
Ejemplo visual:
INICIO │ ├─ ¿Qué quieres hacer? (espera comando) │ ├─ Si comando es "PARA" → TERMINAR │ └─ Si no es "PARA" → procesar y volver a preguntar
Paso 2: Identificar los Tipos de Comandos
Problema: El usuario puede ingresar 4 tipos diferentes de comandos
Lógica: Clasificar lo que el usuario escribe:
"PARA" → Detener el programa
"RETIRAR" → Devolver dinero y cancelar
Número → Es una moneda que está insertando
Código (Letra+Número) → Quiere comprar un producto
Cómo distinguirlos:
"PARA" y "RETIRAR" son palabras específicas
Número: verificar si lo escrito son solo dígitos
Código: verificar si tiene formato letra + número (ej: "A1", "B3")
Paso 3: Gestionar el Dinero (Variable Acumuladora)
Problema: Necesitamos recordar cuánto dinero ha metido el usuario
Lógica:
Crear una variable
total_dineroque empiece en 0Cada vez que meta moneda válida, sumar a
total_dineroCuando compre producto o retire, reiniciar
total_dineroa 0
Ejemplo:
total_dinero = 0 Usuario mete 5 pesos → total_dinero = 5 Usuario mete 10 pesos → total_dinero = 15 Usuario compra producto de 12 pesos → total_dinero = 0 (reinicia)
Paso 4: Validar Monedas Aceptadas
Problema: Solo aceptar monedas de 1, 2, 5, 10, 20 pesos
Lógica:
Cuando el usuario ingrese un número, verificar si está en la lista permitida
Si está en [1, 2, 5, 10, 20] → aceptar y sumar al total
Si no está → rechazar y no sumar nada
Ejemplo:
Usuario escribe "5" → ¿5 está en [1,2,5,10,20]? SÍ → aceptar Usuario escribe "50" → ¿50 está en [1,2,5,10,20]? NO → rechazar
Paso 5: Procesar la Compra de Productos
Problema: Cuando el usuario selecciona un producto, verificar si le alcanza el dinero
Lógica:
Verificar que el código del producto exista
Obtener el precio del producto
Comparar: ¿
total_dinero >= precio?SI: entregar producto, calcular cambio, reiniciar
NO: decir cuánto dinero falta
Ejemplo:
Producto "A1" cuesta 15 pesos Usuario tiene 20 pesos → 20 >= 15 → SÍ alcanza Entregar producto y 5 pesos de cambio
Paso 6: Manejar el Comando RETIRAR
Problema: El usuario puede arrepentirse y querer su dinero de vuelta
Lógica:
Si el usuario escribe "RETIRAR"
Verificar si hay dinero acumulado
Si hay dinero: devolverlo y reiniciar
total_dineroSi no hay dinero: informar que no hay nada que devolver
Paso 7: Reiniciar Después de Cada Transacción
Problema: Después de comprar o retirar, la máquina debe estar lista para el siguiente cliente
Lógica:
Cada vez que suceda:
Compra exitosa
Comando RETIRAR
Debemos poner
total_dinero = 0Así el siguiente cliente empieza desde 0
Flujo Completo Paso a Paso
Escenario 1: Compra Exitosa
1. total_dinero = 0 (inicio) 2. Usuario: "5" → moneda válida → total_dinero = 5 3. Usuario: "10" → moneda válida → total_dinero = 15 4. Usuario: "A1" (producto de 12 pesos) 5. Verificar: ¿15 >= 12? → SÍ 6. Calcular cambio: 15 - 12 = 3 7. Mensaje: "Producto A1 dispensado. Cambio: 3 pesos" 8. total_dinero = 0 (reinicio) 9. Volver al paso 1 (esperar siguiente cliente)
Escenario 2: Fondos Insuficientes
1. total_dinero = 0 2. Usuario: "5" → total_dinero = 5 3. Usuario: "B2" (producto de 20 pesos) 4. Verificar: ¿5 >= 20? → NO 5. Calcular faltante: 20 - 5 = 15 6. Mensaje: "Fondos insuficientes. Faltan 15 pesos" 7. total_dinero sigue en 5 (NO se reinicia) 8. Usuario puede seguir metiendo monedas
Escenario 3: Usuario Se Arrepiente
1. total_dinero = 0 2. Usuario: "10" → total_dinero = 10 3. Usuario: "5" → total_dinero = 15 4. Usuario: "RETIRAR" 5. Mensaje: "Devolviendo 15 pesos" 6. total_dinero = 0 (reinicio)
Estructuras de Control Clave
1. Ciclo Principal (While True)
while True: # Se repite para siempre comando = input("Ingrese comando: ") if comando == "PARA": break # Rompe el ciclo, termina programa # Procesar otros comandos...
2. Condicional para Validar Monedas
if valor_moneda in [1, 2, 5, 10, 20]: # Moneda aceptada else: # Moneda rechazada
3. Condicional para Verificar Fondos
if total_dinero >= precio_producto: # Sí alcanza, dispensar producto else: # No alcanza, informar faltante
4. Detección de Tipo de Comando
if comando == "PARA": # Para el programa elif comando == "RETIRAR": # Devolver dinero elif comando.isdigit(): # Si son solo números # Es una moneda elif len(comando) == 2 and comando[0].isalpha() and comando[1].isdigit(): # Es código de producto else: # Comando no válido
Esta lógica paso a paso garantiza que la máquina funcione correctamente para todos los casos que plantea el problema, manejando adecuadamente cada posible interacción del usuario.
Comentarios
Publicar un comentario