W3docs

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 tiempo
  • continue — saltar a la siguiente iteración
  • La cláusula else — código que se ejecuta cuando el bucle termina normalmente
  • Bucles while anidados
  • El marcador de posición pass
  • Bucles infinitos y cómo evitarlos
  • Cuándo elegir while vs for

Sintaxis básica

while condition:
    # block executed while condition is True

Python 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

python— editable, runs on the server

Salida:

1
2
3
4
5

Aquí 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
1

while 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.

python— editable, runs on the server

Salida:

0
1
2
3
4

Cuando 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
7

Cuando 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 3

Bucles 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 += 1

Salida:

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 += 1

Sin 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 i

Sin 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ónPreferir
Conoces el número de iteraciones o tienes una secuenciafor
Iteras hasta que cambia una condiciónwhile
Necesitas leer la entrada hasta que el usuario salgawhile True + break
Quieres el índice y el valor de una listafor + enumerate()
Quieres vaciar o consumir una estructura de datoswhile

Usa for cuando puedas; cambia a while cuando la condición de fin es dinámica o desconocida al inicio del bucle.


Práctica

Práctica
What does the else clause of a while loop do?
What does the else clause of a while loop do?
Práctica
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
Práctica
Which of the following would cause a while loop to run forever?
Which of the following would cause a while loop to run forever?
Was this page helpful?