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
n = 1
while n < 1000:
n = n * 2
n # 1024El 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:
i = 0
while i < 5:
print(i)
i = i + 1Bucle infinito + condición de salida interna — útil cuando la condición se evalúa después de hacer algo:
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:
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ú
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).
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
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`.
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
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.
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