Bucle while en Python: Tipos y usos

Publicado por Andrea Navarro el

En este artículo veremos diferentes usos del bucle while en Python. Explicaremos las diferentes formas y usos de esta estructura de control y los casos más típicos.

Condicional básico

Este bucle while básico contiene una condición, de modo que el bucle se repetirá mientras esta condición sea verdadera, después de lo cual continuará el flujo de ejecución del programa, aquellas instrucciones que están después del bucle.

puntos = 0
intentos = 0
while puntos <= 10:
    intentos += 1
    puntos  = puntos + int(input("Ingrese puntos: "))
print(f"Se logro finalizar en {intentos} intentos ")

En este ejemplo se deben cargar los puntos obtenidos en un juego, cada vez que se juega una partida se incrementa en uno los intentos realizados y se le solicita al usuario cargar los puntos. Cuando se alcancen los puntos necesarios para ganar, el bucle finaliza y se muestra el resultado de intentos.

Ingrese puntos: 3
Ingrese puntos: 4
Ingrese puntos: 2
Ingrese puntos: 5
Se logro finalizar en 4 intentos 

Condición controlada por usuario

En este tipo de bucle while en python, la condición compara un ingreso o acción generada por el usuario, permitiendo que éste controle cuándo finalizará el bucle.

Un ejemplo de este tipo de bucles es el que ocurre en menús interactivos o programas interactivos, donde una cierta tarea se ejecuta mientras el usuario ingrese entradas.

texto = "¿Desea realizar otra operación? S/N: " 
while input(texto) == "S":
    operacion = input("Ingrese la operación que desea realizar: ")
    # Condicionales y ejecución de cada operación

El usuario utiliza este menú interactivo para realizar diferentes operaciones, al finalizar una operación el sistema le pregunta si quiere realizar otra. El bucle continuará hasta que el usuario ingrese una entrada que finalice el while.

¿Desea realizar otra operación? S/N: S
Ingrese la operación que desea realizar: Suma
¿Desea realizar otra operación? S/N: S
Ingrese la operación que desea realizar: Resta
¿Desea realizar otra operación? S/N:  

Interrupción de bucle con break

La instrucción break permite detener el bucle en cualquier momento, al agregarlo junto con una condición dentro de while es posible tener controles internos.

Esto permite que en algunos casos no se ejecute completamente el bucle, sino que se interrumpa dependiendo de condiciones dadas, y no se vuelva a evaluar la condición principal.

dinero = 5430
cant = 0
while cant < 4:
    print(f"Extracciones realizadas {cant}")    
    extraccion = int(input("¿Cuánto dinero desea extraer?: ") )
    if dinero < extraccion:
        print("Fondos insuficientes")
        break
    dinero -= extraccion
    cant += 1

El código muestra un sistema donde un usuario tiene dinero que puede extraer en diferentes cantidades. La condición del while indica que solo se podrán hacer cuatro extracciones, luego finalizará el ciclo. Luego de cada extracción se resta el dinero correspondientes y se suma la cantidad de extracciones realizadas.

Extracciones realizadas 0
¿Cuánto dinero desea extraer?: 100
Extracciones realizadas 1
¿Cuánto dinero desea extraer?: 200
Extracciones realizadas 2
¿Cuánto dinero desea extraer?: 500
Extracciones realizadas 3
¿Cuánto dinero desea extraer?: 150

También se cuenta con una segunda condición, es posible que el usuario no haya utilizado todas sus extracciones pero que se haya quedado sin dinero para hacer la extracción solicitada. En ese caso se utiliza el break para salir del bucle. Esto significa que no se ejecutara el resto del ciclo, y el bucle no volverá a evaluar la condición.

¿Cuánto dinero desea extraer?: 2000
Extracciones realizadas 1
¿Cuánto dinero desea extraer?: 3400
Extracciones realizadas 2
¿Cuánto dinero desea extraer?: 1000
Fondos insuficientes

Continuación de bucle con continue

En este tipo de bucle, si se da cierta condición, es posible interrumpir el ciclo actual y ejecutar el siguiente utilizando continue. Aunque break y continue interrumpen el ciclo en ejecución, continue permite que se continúe al siguiente ciclo.

n_factura = "Ingrese número de factura: "
while int(input(n_factura)):
    if input("¿Está pagada? Y/n: " ) != "n":
        continue
    monto = input("Ingrese monto a pagar: ")
    # Código adicional para procesar factura 

En este ejemplo se procesan diferentes facturas cuyos números son ingresados por el usuario. Si las facturas no están pagadas, entonces se deben ingresar ciertos datos como el monto. En el caso que la factura si esté pagada no se requiere la ejecución del resto del bucle.

Para esto se utiliza el comando continue. A diferencia de break, rompe el ciclo actual pero permite que el bucle continue.

Ingrese número de factura: 45543
¿Está pagada? Y/n: n
Ingrese monto a pagar: 23451
Ingrese número de factura: 54324
¿Está pagada? Y/n: n
Ingrese monto a pagar: 20653
Ingrese número de factura: 35434  
¿Está pagada? Y/n: 
Ingrese número de factura

Else de bucle while

Los bucles while en Python permiten agregar una sentencia else al final, y ésta se ejecutará cuando no se cumpla la condición del while, y por lo tanto, termine el bucle. Sólo se ejecutará si el bucle ha finalizado normalmente y no por una sentencia break.

intentos = 0
while intentos < 3:
    clave = input("Ingrese su clave: ")
    if clave == "1234":
        print(" Acceso concedido.")
        break
    intentos += 1
else:
    print("Demasiados intentos. Cuenta bloqueada.")

Este código muestra un sistema de login, donde se le solicita al usuario su clave de ingreso. Mientras la clave no sea la correcta, se le seguirá solicitando que la ingrese hasta que se hayan superado los intentos disponibles. Si se ingresa la clave correcta antes de que se finalicen los intentos, se saldrá del bucle con un break.

Ingrese su clave: 455
Ingrese su clave: 1234

Por otro lado, si los intentos se cumplen y el usuario no ha ingresado la clave correcta, el bucle finaliza naturalmente y se ejecuta la sentencia else. En este caso bloqueando la cuenta del usuario.

Ingrese su clave: 1111
Ingrese su clave: 1122
Ingrese su clave: 1133
Demasiados intentos. Cuenta bloqueada.

Sentinela

Similar al bucle controlado por el usuario, este tipo de while espera al ingreso o aparición de un valor específico para detener el bucle. Esto puede utilizarse para cargar múltiples datos, o en menús interactivos.

texto = "Ingrese edad del encuestado o 0 para finalizar:  "
while int(input(texto)) != 0:
    print("Edad ingresada")
    #Código para almacenar edad
print("Final de la encuesta. Imprimiendo resultados ...")

Este código representa un sistema utilizado para guardar datos de una encuesta. El encuestador seguirá cargando, y la condición del bucle se quedará esperando por el valor especial 0 que finalizará el while.

Ingrese edad del encuestado o 0 para finalizar:  25
Edad ingresada
Ingrese edad del encuestado o 0 para finalizar:  36
Edad ingresada
Ingrese edad del encuestado o 0 para finalizar:  54
Edad ingresada
Ingrese edad del encuestado o 0 para finalizar:  23
Edad ingresada
Ingrese edad del encuestado o 0 para finalizar:  0
Final de la encuesta. Imprimiendo resultados ...

Controlador inverso

Este caso de bucle while va disminuyendo el valor de una variable hasta alcanzar una condición.

intentos = 3
print("Ingrese la respuesta de la pregunta 3")
while intentos > 0:       
    if int(input()) != 43:
        intentos -= 1
        print("Respuesta incorrecta. Inténtelo de nuevo")
    else:
        print("Respuesta correcta!")
        break
else:
    print("Evaluación no aprobada")

En este ejemplo se le pide al usuario que responda una pregunta, y se le dan tres intentos para completarlos. El bucle se ejecutará hasta que el usuario se quede sin intentos, y si es así, mostrará el mensaje de «Evaluación no aprobada«.

Ingrese la respuesta de la pregunta 3
40
Respuesta incorrecta. Inténtelo de nuevo
39
Respuesta incorrecta. Inténtelo de nuevo
38
Respuesta incorrecta. Inténtelo de nuevo
Evaluación no aprobada

Infinito con control interno

Este bucle while contiene una condición que siempre dará verdadero, su finalización se dará por una condición interna que contenga un break. Este tipo de bucles se utiliza cuando no se puede saber de antemano cuantas veces debe ejecutarse un bucle, por lo que no tiene sentido establecer una condición en el while.

while True:  # Bucle infinito
    print("=== Menú ===")
    print("1. Mostrar saludo")
    print("2. Mostrar despedida")
    print("3. Salir")
    opcion = input("Elige una opción: ")
    if opcion == "1":
        print("Haz seleccionado la opción 1")
        #Código opción 1
    elif opcion == "2":
        print("Haz seleccionado la opción 2")
        #Código opción 2
    elif opcion == "3":        
        break 
    else:
        print("Opción no válida. Intenta de nuevo.")

En este caso vemos un menú interactivo. El usuario debe ingresar la opción correspondiente a la acción que quiere realizar. Al finalizar el código correspondiente a la opción se vuelve a ejecutar el menú y así sucesivamente. Ya que no hay un límites de operaciones a realizar el bucle es especificado como infinito colocando un break en la opción correspondiente a la salida del menú.

while True:  # Bucle infinito
    print("=== Menú ===")
    print("1. Mostrar saludo")
    print("2. Mostrar despedida")
    print("3. Salir")
    opcion = input("Elige una opción: ")
    if opcion == "1":
        print("Haz seleccionado la opción 1")
        #Código opción 1
    elif opcion == "2":
        print("Haz seleccionado la opción 2")
        #Código opción 2
    elif opcion == "3":        
        break 
    else:
        print("Opción no válida. Intenta de nuevo.")

Aunque los bucles while son una parte básica de Python en este artículo hemos repasados algunos de los usos más comunes y las diferentes maneras de aplicarlos en nuestro código.

Espero que les sirva!


¿Querés aprender más? 📚

👉 Visitá nuestros cursos!
💬 Y si tenés dudas, o querés dejarnos tus comentarios sumate a la Comunidad JuncoTIC en Telegram!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora