Solución: Simulador de Cajero Automático con Ciclo

 

Solución: Simulador de Cajero Automático con Ciclo

python
# Inventario inicial - 10 billetes de cada denominación
billetes_1000 = 10
billetes_500 = 10
billetes_200 = 10
billetes_100 = 10
billetes_50 = 10

# Función para calcular el dinero total disponible
def calcular_total_disponible():
    return (billetes_1000 * 1000 + billetes_500 * 500 + 
            billetes_200 * 200 + billetes_100 * 100 + billetes_50 * 50)

# Programa principal
print("=== CAJERO AUTOMÁTICO ===")

# Ciclo principal que se ejecuta hasta que el cajero se quede sin dinero
while calcular_total_disponible() > 0:
    # Mostrar inventario actual y dinero disponible
    print(f"\n--- Dinero disponible: ${calcular_total_disponible()} ---")
    print("--- 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
    try:
        cantidad = int(input("\n¿Cuánto dinero quieres retirar? (0 para salir) "))
    except ValueError:
        print("Error: Por favor ingresa un número válido")
        continue

    # Opción para salir
    if cantidad == 0:
        print("¡Gracias por usar nuestro cajero!")
        break

    # Verificar monto mínimo
    if cantidad < 50:
        print("Error: El monto mínimo es 50")
        continue

    # Verificar si es múltiplo de 50
    if cantidad % 50 != 0:
        print("Error: Solo puedes retirar cantidades múltiplos de 50")
        continue

    # Verificar si hay suficiente dinero en el cajero
    if cantidad > calcular_total_disponible():
        print("Error: El cajero no tiene suficiente dinero")
        continue

    # Calcular cuántos billetes de cada denominación se necesitan
    b1000 = min(billetes_1000, cantidad // 1000)
    resto = cantidad - (b1000 * 1000)
    
    b500 = min(billetes_500, resto // 500)
    resto = resto - (b500 * 500)
    
    b200 = min(billetes_200, resto // 200)
    resto = resto - (b200 * 200)
    
    b100 = min(billetes_100, resto // 100)
    resto = resto - (b100 * 100)
    
    b50 = min(billetes_50, resto // 50)
    resto_final = resto - (b50 * 50)

    # Verificar si se puede dispensar exactamente la cantidad solicitada
    if resto_final != 0:
        print("Error: No hay una combinación de billetes disponible para el monto solicitado")
        continue

    # Actualizar el inventario
    billetes_1000 -= b1000
    billetes_500 -= b500
    billetes_200 -= b200
    billetes_100 -= b100
    billetes_50 -= b50

    # Mostrar resultado
    print(f"\n✓ Retirando ${cantidad}:")
    if b1000 > 0:
        print(f"  • {b1000} billete(s) de 1000")
    if b500 > 0:
        print(f"  • {b500} billete(s) de 500")
    if b200 > 0:
        print(f"  • {b200} billete(s) de 200")
    if b100 > 0:
        print(f"  • {b100} billete(s) de 100")
    if b50 > 0:
        print(f"  • {b50} billete(s) de 50")

# Mensaje cuando el cajero se queda sin dinero
if calcular_total_disponible() == 0:
    print("\n⚠️  El cajero se ha quedado sin dinero. ¡Vuelve más tarde!")
    print("¡Gracias por usar nuestro cajero!")

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

4 tipos de colecciones de datos más

Calculadora de edad