Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 2 de 46/36 en el curso~8 min
Lecciones del módulo (2/4)

Bucles while

El bucle while repite un bloque mientras una condición permanezca verdadera. Usa while cuando no sepas de antemano cuántas iteraciones necesitarás: el número de rondas depende de algo que cambia dentro del bucle.

Sintaxis

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

El bloque indentado se ejecuta repetidamente. Antes de cada iteración, Python evalúa la condición: tan pronto como se vuelve falsa, el bucle termina y la ejecución continúa después del bloque.

Patrones comunes

Contador manual — equivalente a un for clásico en otros lenguajes:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Bucle infinito + condición de salida interna — útil cuando la condición se evalúa después de hacer algo:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break sale inmediatamente del bucle más interno.

El error clásico: el bucle infinito

Si la variable en la condición no cambia dentro del bucle, el programa nunca termina. Es el error número uno con while:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

En nuestros ejercicios hay un límite de tiempo de ejecución, por lo que un bucle infinito fallará con un mensaje claro en lugar de congelar el navegador. Pero en producción, un bucle infinito es un error grave.

Riesgo de bucles infinitos y condiciones de terminación

Un bucle while se ejecuta mientras su condición se evalúe como True. Si olvidas actualizar las variables que afectan a la condición, tu bucle se ejecutará infinitamente, congelando el tiempo de ejecución. Asegúrate siempre de que el cuerpo del bucle avance hacia la condición de salida.

Pruébalo tú

Ejercicio#python.m2.l2.e1
Intentos: 0Cargando...

Encuentra el número entero más pequeño `n >= 1` tal que 2**n supere el millón. Asígnalo a `result` y evalúalo (debería ser 20).

Cargando editor...
Mostrar pista

2**20 = 1,048,576 es el primero en superar 1,000,000.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m2.l2.e2
Intentos: 0Cargando...

Comenzando desde `n = 1000`, divide n a la mitad con división entera (n // 2) hasta que se convierta en 0. Cuenta cuántas iteraciones se necesitan en `steps`. Evalúa `steps`.

Cargando editor...
Mostrar pista

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: diez pasos.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m2.l2.e3
Intentos: 0Cargando...

Dada la variable `n = 32`, escribe un bucle `while` para contar cuántas veces puedes dividir `n` por 2 (usando la división entera `//`) antes de que `n` sea menor o igual a 1. Guarda el conteo en `divisions` y evalúalo.

Cargando editor...
Mostrar pista

La condición del while es n > 1. Dentro del bucle, divide n por 2 e incrementa divisions en 1.

Solución disponible después de 3 intentos