Aprende leyendo en orden

Bucles while y cómo evitar bucles infinitos

Aprende los bucles while de Python y cómo evitar bucles infinitos definiendo condiciones de salida claras.

El capítulo anterior sobre for se centró en bucles donde el conteo o el objetivo se conoce de antemano.

La instrucción while que se cubre aquí es un bucle que repite «mientras una condición se mantenga», y se usa cuando el número de iteraciones no se conoce por adelantado. Manejo de reintentos, vaciado de colas, bucles de juego — aparece en todas partes en código real.

Lo básico de while — repetir mientras la condición sea True

while condición: ejecuta el bloque repetidamente mientras la condición sea True. Cada vez que el bucle gira, la condición se vuelve a evaluar, y en el momento en que se vuelve False, el bucle sale.

Es similar a for en forma, pero en lugar de sacar de un objetivo, itera sobre la condición misma.

El ciclo de evaluación de while
Inicioevaluar condiciónejecutar cuerpoactualizar variableFinTruereevaluarFalse

Condición → si es True, ejecutar el cuerpo → comprobar la condición de nuevo → salir cuando sea False. La regla cardinal de while: empuja la condición hacia False dentro del cuerpo.

# La forma básica — imprimir del 0 al 4
count = 0
while count < 5:
    print(count)
    count += 1
# 0 / 1 / 2 / 3 / 4

# Vaciar las tareas restantes de una cola
tasks = ["enviar correo", "hacer copia de seguridad", "desplegar"]
while tasks:
    task = tasks.pop(0)       # tomar del frente
    print(f"procesando: {task}")
# procesando: enviar correo / procesando: hacer copia de seguridad / procesando: desplegar

El segundo ejemplo se basa en el hecho de que while tasks: se vuelve False en el momento en que la lista está vacía, usando las reglas de veracidad vistas antes (una lista vacía es False).

Itera hasta que queden 0 consultas.

① Define remaining = 3 (el conteo de elementos restantes).

② Usa while para imprimir «Atendiendo X restantes» mientras remaining > 0, decrementando remaining en 1 cada vez.

③ Después de que el bucle salga, imprime «Todo atendido».

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

Evitar bucles infinitos — proporciona siempre una condición de terminación

El mayor escollo con while es el bucle infinito. Si olvidas la actualización que invierte la condición a False, el programa nunca se detiene. Incluso en esta consola del navegador, eso congela la página hasta que expira unos segundos (o decenas de segundos) más tarde.

# Mal: n nunca cambia dentro del cuerpo, así que nunca termina
# n = 10
# while n > 0:
#     print(n)
# (No lo ejecutes — congela el navegador / da timeout)

# Bien: decrementa n cada vez para que la condición eventualmente sea False
n = 10
while n > 0:
    print(n)
    n -= 1
El patrón para construir una condición de terminación
while n > 0ejecutar cuerpon -= 1actualizadotermina al finalwhile n > 0ejecutar cuerposin actualizaciónbucle infinito

Cada vez que escribas un while, comprueba que puedes responder «¿cómo se vuelve False la condición?»

Antes de ejecutarlo, señala el código y confirma que cada variable de la condición se actualiza en algún punto del cuerpo del bucle.

Implementa una cuenta atrás desde 5.

① Define count = 5.

② Dentro de while count > 0:, imprime count y decreméntalo con count -= 1.

③ Después de que el bucle salga, imprime «¡DESPEGUE!».

Editor Python

Ejecutar el código para ver el resultado

Usar break y continue dentro de while

El break / continue que viste con for funcionan igual dentro de while.

Incluso mientras la condición sea True, break sale decididamente del bucle y continue rehace la iteración actual — estos son los patrones típicos.

break y continue dentro de while
while condif condbreakfuera del buclewhile condif condcontinuereevaluar condTrueTruesalirTrueTruevolver
# Simulando reintentos: hasta 5 intentos, break al encontrar
responses = [None, None, "OK", "OK", "OK"]   # respuestas simuladas de una API externa
attempt = 0
found = False
while attempt < 5:
    attempt += 1
    response = responses[attempt - 1]
    if response is None:
        print(f"intento {attempt}: sin respuesta, reintentando")
        continue   # salta el resto de esta iteración
    print(f"intento {attempt}: respuesta recibida {response}, hecho")
    found = True
    break          # éxito, salir del bucle

if not found:
    print("se alcanzó el número máximo de intentos")

Poner attempt += 1 al principio del bucle es la clave. Con esta disposición, incluso si continue o break salen antes, el contador nunca se salta, así que se mantiene la garantía de «hasta 5 intentos».

Escribe un bucle de reintento de contraseña usando una lista predeterminada de resultados (sin aleatoriedad).

① Prepara attempts = ["wrong", "wrong", "right", "wrong"] (los resultados de los intentos).

② Empieza con i = 0 e itera con while i < len(attempts):.

③ Dentro, incrementa i en 1 (al principio), lee un resultado y:

 - Si es "right", imprime «Autenticado en el intento X» y break.

 - En caso contrario imprime «intento X fallido».

④ Mantén un booleano en una bandera found, y después del bucle imprime «Bloqueado» solo cuando no se haya encontrado una respuesta correcta.

Editor Python

Ejecutar el código para ver el resultado

Elegir entre for y while

for y while son ambos bucles, pero se adaptan a situaciones distintas. Cuando no puedas decidir, recuerda esta tabla.

Cuando quieres…Mejor opciónPor qué
Procesar cada elemento de una lista, dict, etc.forLa iteración de principio a fin se lee de forma natural
Repetir exactamente N veces de 0 a N-1for + range(N)El conteo se indica explícitamente como un número
Terminar con una condición compleja donde el conteo no se conocewhileLa condición misma dirige el bucle
Reintentar hasta que una respuesta externa tenga éxitowhile + breakPuedes salir inmediatamente al éxito
Procesar la entrada del usuario o una cola hasta vaciarlawhileTermina de forma natural en el momento en que se vacía

En este artículo cubrimos lo básico de while, las condiciones de terminación que evitan bucles infinitos, el control del flujo con break / continue y cómo elegir entre for y while.

Con if / for / while cubiertos, has aprendido el control de flujo fundamental.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué imprime este código?
n = 3
while n > 0:
print(n)
n -= 1

Pregunta 2¿Qué es lo más importante para evitar un bucle infinito en while?

Pregunta 3¿Cuál es la forma más adecuada de elegir entre for y while?