Pregunta 1¿Qué imprime este código?n = 3
while n > 0:
print(n)
n -= 1
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.
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).
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
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.
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.
# 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».
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ón | Por qué |
|---|---|---|
| Procesar cada elemento de una lista, dict, etc. | for | La iteración de principio a fin se lee de forma natural |
| Repetir exactamente N veces de 0 a N-1 | for + range(N) | El conteo se indica explícitamente como un número |
| Terminar con una condición compleja donde el conteo no se conoce | while | La condición misma dirige el bucle |
| Reintentar hasta que una respuesta externa tenga éxito | while + break | Puedes salir inmediatamente al éxito |
| Procesar la entrada del usuario o una cola hasta vaciarla | while | Termina 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.
Verificación de conocimientos
Responde cada pregunta una a una.
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?