Bucles while en Python: Guía Completa
Domina los bucles while en Python: sintaxis, break, continue, cláusula else, bucles anidados, bucles infinitos y ejemplos prácticos con explicaciones claras.
Un bucle while ejecuta un bloque de código repetidamente mientras una condición sea True. A diferencia de un bucle for, que itera sobre una secuencia conocida de elementos, un bucle while es la opción adecuada cuando no sabes de antemano cuántas iteraciones necesitas — por ejemplo, al leer la entrada del usuario, vaciar una cola o reintentar una operación hasta que tenga éxito.
Este capítulo cubre:
- Sintaxis básica y cómo se evalúa la condición
break— salir del bucle antes de tiempocontinue— saltar a la siguiente iteración- La cláusula
else— código que se ejecuta cuando el bucle termina normalmente - Bucles
whileanidados - El marcador de posición
pass - Bucles infinitos y cómo evitarlos
- Cuándo elegir
whilevsfor
Sintaxis básica
while condition:
# block executed while condition is TruePython evalúa condition antes de cada iteración. Si es True, se ejecuta el bloque con sangría. Cuando el bloque finaliza, la condición se comprueba de nuevo. El bucle termina en cuanto la condición evalúa a False.
Contar del 1 al 5
Salida:
1
2
3
4
5Aquí i comienza en 1. Tras cada print, i aumenta en 1. Cuando i llega a 6, la condición i <= 5 se vuelve False y el bucle se detiene.
La variable contador debe actualizarse dentro del bucle. Olvidar i += 1 (o una actualización equivalente) significa que la condición nunca se vuelve False y obtienes un bucle infinito.
Ejemplo de cuenta regresiva
count = 5
while count > 0:
print(count)
count -= 1
print("Liftoff!")Salida:
5
4
3
2
1
Liftoff!El código después del bloque while se ejecuta una vez que el bucle ha terminado — en este caso print("Liftoff!") no está dentro del bucle.
Iterar hasta que una lista esté vacía
Cualquier objeto que tenga un valor boolean funciona como condición. Una lista vacía es falsy, por lo que puedes vaciar una lista de forma natural:
stack = [1, 2, 3]
while stack:
print(stack.pop())Salida:
3
2
1while stack es una abreviatura de while len(stack) > 0. Una vez que la lista está vacía, es falsy y el bucle termina.
La sentencia break
break sale del bucle inmediatamente, independientemente de la condición.
Salida:
0
1
2
3
4Cuando num es igual a 5, se activa break y el bucle termina — del 5 al 9 nunca se alcanzan.
Cuándo usar break: detener una búsqueda en cuanto encuentres una coincidencia; abortar un bucle cuando surge una condición de error; salir de un bucle de menú cuando el usuario elige "salir".
La sentencia continue
continue omite el resto de la iteración actual y salta directamente de vuelta a la comprobación de la condición.
i = 0
while i < 8:
i += 1
if i % 2 == 0:
continue
print(i)Salida:
1
3
5
7Cuando i es par, continue omite print(i) y el bucle vuelve a evaluar la condición con el i actualizado.
Importante: incrementa el contador antes de la comprobación con continue, no después. Si i += 1 se colocara después de continue, i permanecería par para siempre y el bucle se ejecutaría indefinidamente.
La cláusula else
El bucle while de Python admite un bloque else opcional. Se ejecuta solo si el bucle terminó de forma natural — es decir, la condición se volvió False — y se omite si el bucle se abandonó mediante break.
Finalización normal
i = 1
while i <= 3:
print(i)
i += 1
else:
print("Done!")Salida:
1
2
3
Done!Bucle interrumpido por break
i = 1
while i <= 5:
if i == 3:
break
print(i)
i += 1
else:
print("No break")Salida:
1
2"No break" nunca se imprime porque break terminó el bucle antes de que la condición pudiera volverse False.
Uso práctico: búsqueda lineal
La cláusula else es especialmente útil para patrones de búsqueda. El bloque else se ejecuta solo cuando el objetivo no fue encontrado:
numbers = [4, 7, 2, 9, 1]
target = 9
i = 0
while i < len(numbers):
if numbers[i] == target:
print("Found", target, "at index", i)
break
i += 1
else:
print(target, "not found")Salida:
Found 9 at index 3Bucles while anidados
Un bucle while puede contener otro bucle while en su interior. El bucle interno completa todas sus iteraciones por cada iteración individual del bucle externo.
row = 1
while row <= 3:
col = 1
while col <= 3:
print(row * col, end=" ")
col += 1
print()
row += 1Salida:
1 2 3
2 4 6
3 6 9 Atención: un break dentro del bucle interno solo sale del bucle interno. Para salir de ambos bucles a la vez, usa una variable bandera o reestructura el código en una función y usa return.
La sentencia pass
pass es un marcador de posición sin operación. Úsalo cuando un bucle while sea sintácticamente necesario pero el cuerpo aún no esté implementado:
i = 0
while i < 3:
pass # TODO: add logic later
i += 1Sin pass, Python lanzaría un IndentationError porque un bloque vacío es sintaxis inválida.
Bucles infinitos
Un bucle infinito se ejecuta para siempre porque su condición nunca se vuelve False. Esto es casi siempre un error — pero también hay usos intencionales.
Bucle infinito accidental
# WARNING: this loop never ends — do not run
i = 1
while i <= 5:
print(i)
# forgot to increment iSin i += 1, i permanece en 1, la condición siempre es True y el bucle se ejecuta hasta que detengas el programa manualmente (Ctrl+C).
Bucle infinito intencional con break
# WARNING: intentional infinite loop — requires Ctrl+C to stop outside an app
while True:
answer = input("Type 'quit' to exit: ")
if answer == "quit":
break
print("You typed:", answer)while True es un modismo deliberado para "seguir hasta que se detenga explícitamente". Siempre debes tener un break (o un return) en algún lugar dentro, o el programa se bloqueará.
Consulta el capítulo de Entrada del usuario en Python para conocer más patrones con bucles interactivos.
Bucles while vs bucles for
| Situación | Preferir |
|---|---|
| Conoces el número de iteraciones o tienes una secuencia | for |
| Iteras hasta que cambia una condición | while |
| Necesitas leer la entrada hasta que el usuario salga | while True + break |
| Quieres el índice y el valor de una lista | for + enumerate() |
| Quieres vaciar o consumir una estructura de datos | while |
Usa for cuando puedas; cambia a while cuando la condición de fin es dinámica o desconocida al inicio del bucle.