Pregunta 1¿Qué imprime este código?n = 3
while n > 0:
print(n)
n -= 1
Bucles while y cómo evitar bucles infinitos
Lo básico de while que repite mientras la condición sea True, la práctica de actualizar la variable en el cuerpo para evitar bucles infinitos, reintentos con break / continue y for vs while.
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?