EJERCICIO-Ejercicio Simplificado: Simulador de Cajero Automático Básico
Ejercicio Simplificado: Simulador de Cajero Automático Básico
Has sido contratado por un banco para crear un programa muy simple que simule un cajero automático. Tu tarea es desarrollar un algoritmo que permita retirar dinero, pero solo con dos tipos de billetes: de 50 y de 100.
Condiciones:
El cajero solo tiene billetes de 50 y 100.
El usuario solo puede retirar cantidades que sean múltiplos de 50 (por ejemplo: 50, 100, 150, 200, etc.). Si pide una cantidad que no es múltiplo de 50, debe mostrar un mensaje de error.
El objetivo es calcular cuántos billetes de cada denominación se deben entregar, usando la menor cantidad de billetes posible (siempre priorizando los billetes de mayor valor).
# Inventario inicial - 10 billetes de cada denominación
billetes_100 = 10
billetes_50 = 10
# Programa principal
print("=== CAJERO AUTOMÁTICO ===")
# Mostrar inventario actual
print("\n--- Inventario Actual ---")
print(f"Billetes de 100: {billetes_100}")
print(f"Billetes de 50: {billetes_50}")
print("--------------------------")
# Pedir la cantidad a retirar
cantidad = int(input("\n¿Cuánto dinero quieres retirar? "))
# Verificar monto mínimo
if cantidad < 50:
print("Error: El monto mínimo es 50")
# Verificar si es múltiplo de 50
elif cantidad % 50 != 0:
print("Error: Solo puedes retirar cantidades múltiplos de 50")
else:
# Calcular cuántos billetes de cada uno necesitamos
billetes_100_necesarios = cantidad // 100
resto = cantidad % 100
billetes_50_necesarios = resto // 50
# Verificar si hay suficientes billetes
if billetes_100_necesarios > billetes_100:
print("Error: No hay suficientes billetes de 100 disponibles")
elif billetes_50_necesarios > billetes_50:
print("Error: No hay suficientes billetes de 50 disponibles")
else:
# Actualizar el inventario
billetes_100 -= billetes_100_necesarios
billetes_50 -= billetes_50_necesarios
# Mostrar resultado
print(f"\nRetirando {cantidad}:")
if billetes_100_necesarios > 0:
print(f"• {billetes_100_necesarios} billete(s) de 100")
if billetes_50_necesarios > 0:
print(f"• {billetes_50_necesarios} billete(s) de 50")
# Mostrar inventario final
print("\n--- Inventario Final ---")
print(f"Billetes de 100: {billetes_100}")
print(f"Billetes de 50: {billetes_50}")
print("------------------------")
print("\n¡Gracias por usar nuestro cajero!")📝 Explicación Simplificada:
Inicializamos el inventario con 10 billetes de cada tipo
Mostramos el inventario actual
Pedimos la cantidad una sola vez (no hay ciclo)
Verificamos errores:
Si es menor a 50
Si no es múltiplo de 50
Si no hay billetes suficientes
Si todo está bien:
Calculamos los billetes necesarios
Actualizamos el inventario
Mostramos los billetes entregados
Mostramos el inventario final
Terminamos con un mensaje de agradecimiento
📋 Ejemplo de ejecución:
=== CAJERO AUTOMÁTICO ===
--- Inventario Actual ---
Billetes de 100: 10
Billetes de 50: 10
--------------------------
¿Cuánto dinero quieres retirar? 250
Retirando 250:
• 2 billete(s) de 100
• 1 billete(s) de 50
--- Inventario Final ---
Billetes de 100: 8
Billetes de 50: 9
------------------------
¡Gracias por usar nuestro cajero!🎯 Características:
✅ Sin
try(no maneja errores de entrada no numérica)✅ Sin ciclo infinito (solo una ejecución)
✅ Termina después de entregar el dinero
✅ Muestra inventario antes y después
✅ Más simple y directo
Nota: Si el usuario escribe algo que no es un número (como "abc"), el programa fallará. Pero como pediste sin try, así se queda.
EXPLICACIÓN DETALLADA DEL CÓDIGO
# Inventario inicial - 10 billetes de cada denominación
billetes_100 = 10
billetes_50 = 10→ Aquí creamos dos "cajitas" para guardar cuántos billetes tenemos:
billetes_100 = 10→ Tenemos 10 billetes de 100billetes_50 = 10→ Tenemos 10 billetes de 50
# Programa principal
print("=== CAJERO AUTOMÁTICO ===")→ Mostramos el título del cajero automático.
# Mostrar inventario actual
print("\n--- Inventario Actual ---")
print(f"Billetes de 100: {billetes_100}")
print(f"Billetes de 50: {billetes_50}")
print("--------------------------")→ Mostramos cuántos billetes tenemos antes de que el usuario retire dinero.
→ \n → Salto de línea para que se vea más ordenado.
# Pedir la cantidad a retirar
cantidad = int(input("\n¿Cuánto dinero quieres retirar? "))→ input() → Le preguntamos al usuario cuánto dinero quiere
→ int() → Convertimos su respuesta en un número (ej: "250" → 250)
→ cantidad → Guardamos ese número en una variable
# Verificar monto mínimo
if cantidad < 50:
print("Error: El monto mínimo es 50")→ SI la cantidad es menor que 50 → Mostramos error
→ Ejemplo: Si escribe "30" → "Error: El monto mínimo es 50"
# Verificar si es múltiplo de 50
elif cantidad % 50 != 0:
print("Error: Solo puedes retirar cantidades múltiplos de 50")→ SINO, SI no es múltiplo de 50 → Mostramos error
→ % → Operador que da el resto de una división
→ Ejemplo: 75 % 50 = 25 (no es cero) → Error
else:
# Calcular cuántos billetes de cada uno necesitamos
billetes_100_necesarios = cantidad // 100
resto = cantidad % 100
billetes_50_necesarios = resto // 50→ SINO (si pasó todas las validaciones) → Calculamos los billetes
→ // → División entera (sin decimales)
→ Ejemplo con 250:
250 // 100 = 2→ Necesitamos 2 billetes de 100250 % 100 = 50→ Sobra 50 pesos50 // 50 = 1→ Necesitamos 1 billete de 50
# Verificar si hay suficientes billetes
if billetes_100_necesarios > billetes_100:
print("Error: No hay suficientes billetes de 100 disponibles")
elif billetes_50_necesarios > billetes_50:
print("Error: No hay suficientes billetes de 50 disponibles")→ Verificamos si tenemos suficientes billetes
→ Ejemplo: Si pide 1500 billetes de 100 → Error (solo tenemos 10)
else:
# Actualizar el inventario
billetes_100 -= billetes_100_necesarios
billetes_50 -= billetes_50_necesarios→ SI tenemos billetes suficientes → Restamos del inventario
→ -= → Significa "resta y guarda el resultado"
→ Ejemplo:
billetes_100 = 10 - 2 = 8billetes_50 = 10 - 1 = 9
# Mostrar resultado
print(f"\nRetirando {cantidad}:")
if billetes_100_necesarios > 0:
print(f"• {billetes_100_necesarios} billete(s) de 100")
if billetes_50_necesarios > 0:
print(f"• {billetes_50_necesarios} billete(s) de 50")→ Mostramos qué billetes entregamos
→ Solo mostramos los billetes que realmente usamos
# Mostrar inventario final
print("\n--- Inventario Final ---")
print(f"Billetes de 100: {billetes_100}")
print(f"Billetes de 50: {billetes_50}")
print("------------------------")→ Mostramos cuántos billetes nos quedaron después del retiro
print("\n¡Gracias por usar nuestro cajero!")→ Este mensaje se muestra SIEMPRE al final, haya habido error o no.
📋 FLUJO DEL PROGRAMA:
Mostrar inventario inicial
Pedir cantidad
Verificar si es válida
Si es válida → Calcular billetes
Verificar si hay billetes suficientes
Si hay → Entregar y actualizar inventario
Mostrar inventario final
Despedirse
🎯 RESUMEN:
El programa hace UNA SOLA operación y termina. No vuelve a preguntar. Es simple y directo.
Cajero Automático con Múltiples Denominaciones
# Inventario inicial - 10 billetes de cada denominación billetes_1000 = 10 billetes_500 = 10 billetes_200 = 10 billetes_100 = 10 billetes_50 = 10 # Programa principal print("=== CAJERO AUTOMÁTICO ===") # Mostrar inventario actual print("\n--- Inventario Actual ---") print(f"Billetes de 1000: {billetes_1000}") print(f"Billetes de 500: {billetes_500}") print(f"Billetes de 200: {billetes_200}") print(f"Billetes de 100: {billetes_100}") print(f"Billetes de 50: {billetes_50}") print("--------------------------") # Pedir la cantidad a retirar cantidad = int(input("\n¿Cuánto dinero quieres retirar? ")) # Verificar monto mínimo if cantidad < 50: print("Error: El monto mínimo es 50") # Verificar si es múltiplo de 50 elif cantidad % 50 != 0: print("Error: Solo puedes retirar cantidades múltiplos de 50") else: # Calcular cuántos billetes de cada uno necesitamos temp_1000 = min(billetes_1000, cantidad // 1000) resto = cantidad - (temp_1000 * 1000) temp_500 = min(billetes_500, resto // 500) resto = resto - (temp_500 * 500) temp_200 = min(billetes_200, resto // 200) resto = resto - (temp_200 * 200) temp_100 = min(billetes_100, resto // 100) resto = resto - (temp_100 * 100) temp_50 = min(billetes_50, resto // 50) resto = resto - (temp_50 * 50) # Verificar si se puede dispensar exactamente la cantidad solicitada if resto != 0: print("Error: No hay una combinación de billetes disponible para el monto solicitado") else: # Actualizar el inventario billetes_1000 -= temp_1000 billetes_500 -= temp_500 billetes_200 -= temp_200 billetes_100 -= temp_100 billetes_50 -= temp_50 # Mostrar resultado print(f"\nRetirando {cantidad}:") if temp_1000 > 0: print(f"• {temp_1000} billete(s) de 1000") if temp_500 > 0: print(f"• {temp_500} billete(s) de 500") if temp_200 > 0: print(f"• {temp_200} billete(s) de 200") if temp_100 > 0: print(f"• {temp_100} billete(s) de 100") if temp_50 > 0: print(f"• {temp_50} billete(s) de 50") # Mostrar inventario final print("\n--- Inventario Final ---") print(f"Billetes de 1000: {billetes_1000}") print(f"Billetes de 500: {billetes_500}") print(f"Billetes de 200: {billetes_200}") print(f"Billetes de 100: {billetes_100}") print(f"Billetes de 50: {billetes_50}") print("------------------------") print("\n¡Gracias por usar nuestro cajero!")
Este código ahora incluye todas las denominaciones solicitadas (50, 100, 200, 500 y 1000) y verifica que exista una combinación exacta de billetes antes de realizar el retiro. Si no hay una combinación que satisfaga exactamente el monto solicitado, no se dispensará ningún billete.
El algoritmo intenta usar primero los billetes de mayor denominación y luego va bajando progresivamente a los de menor denominación, lo que es la forma estándar de operar en los cajeros automáticos.
Comentarios
Publicar un comentario