Bucles while en Python: cuando un bucle for no basta
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Una máquina expendedora no sabe cuántas monedas vas a meter. Se queda esperando: "mientras el total sea menor que el precio, sigue aceptando monedas". No puede usar un bucle for, porque no sabe de antemano cuántas iteraciones habrá. Necesita un bucle while.
En esta lección aprenderás a usar los bucles while en situaciones en las que necesitas repetir algo hasta que cambie una condición. También verás cómo evitar los bucles infinitos, cómo usar break para salir antes de tiempo y cuándo elegir while en lugar de for.
Al terminar, tendrás dos tipos de bucles en tu caja de herramientas: for, para recorrer colecciones conocidas, y while, para repetir hasta que se cumpla una condición.
¿Cómo funciona un bucle while en Python?
Un bucle while comprueba una condición antes de cada iteración. Si la condición es True, se ejecuta el cuerpo del bucle. Después, Python vuelve al principio y comprueba la condición otra vez. Esto se repite hasta que la condición pasa a ser False.
Piénsalo como un guardia en una puerta que revisa tu tarjeta de acceso cada vez que intentas entrar. Mientras tu tarjeta sea válida, puedes pasar. En cuanto deja de serlo, la puerta se queda cerrada.
1 2 3 4 5 Done!
Así funciona: Python comprueba count <= 5. Como count empieza en 1, la condición es True, así que se ejecuta el cuerpo: imprime count y le suma 1. Luego Python vuelve a comprobar. Esto continúa hasta que count llega a 6; en ese momento, 6 <= 5 es False y el bucle se detiene.
La parte clave es que algo dentro del bucle tiene que acabar haciendo que la condición sea `False`. Aquí, count += 1 hace que el contador crezca hasta pasar de 5. Sin esa línea, el bucle no terminaría nunca.
¿Cómo se cuenta y se acumula con bucles while?
Los bucles while son ideales para tareas en las que tienes que procesar datos hasta alcanzar un objetivo concreto. Planteas una condición y el bucle se repite hasta llegar a la meta.
After 10 doubles, the value is 1024
No sería fácil escribir esto con un bucle for, porque no sabemos de antemano cuántas veces habrá que duplicar. El bucle while sigue hasta que el valor pasa de 1000, y contamos cuántas veces se ejecutó.
Sum of 1 to 14 = 105
El bucle suma números consecutivos (1, 2, 3, ...) hasta que el total llega a 100 o lo supera. Después del bucle, number vale uno más que el último número sumado, porque la línea number += 1 se ejecuta después de cada suma. Por eso imprimimos number - 1.
¿Qué son los bucles infinitos y cómo funciona break?
Un bucle infinito es un bucle cuya condición nunca llega a ser False. A veces es un error. Pero otras veces es intencionado: creas un bucle infinito a propósito y usas break para salir cuando te conviene.
# DON'T RUN THIS - it never stops!
count = 1
while count <= 5:
print(count)
# Oops, forgot count += 1while True:
answer = "yes"
print("Looping...")
if answer == "yes":
break
print("Escaped!")while True crea un bucle que, en principio, se repite para siempre. La instrucción break sale del bucle de inmediato y salta a la primera línea que hay después de él. Este patrón es muy común en menús, bucles de juegos y validación de entradas.
Guess 1: 3 Too low! Guess 2: 9 Too high! Guess 3: 5 Too low! Guess 4: 7 Correct! You got it in 4 tries!
El bucle sigue ejecutándose hasta que alguien adivina el número secreto. No podemos predecir cuándo va a pasar, así que while True con break es el patrón natural. El break solo se ejecuta cuando guess == secret, así que el bucle termina justo en el momento adecuado.
¿Cómo se valida una entrada con un bucle while?
Uno de los usos más prácticos de los bucles while es la validación de entradas: pedir datos una y otra vez hasta que el usuario te dé algo válido. Es el patrón que hay detrás de cada formulario que dice "escribe un correo electrónico válido".
Enter your age: abc Please enter a number. Enter your age: -5 Please enter a number. Enter your age: 0 Age must be between 1 and 120. Enter your age: 25 Your age: 25
El bucle sigue preguntando hasta que obtiene una edad válida. Las entradas no válidas, como "abc" o los números negativos, muestran mensajes de error, y el bucle se repite. Solo cuando llega una edad válida la condición age <= 0 or age > 120 pasa a ser False y el bucle termina.
Fíjate en la instrucción continue: cuando la entrada no es un número, nos saltamos el resto del cuerpo del bucle y volvemos directamente al principio. Aprenderás más sobre continue en la próxima lección.
¿Cuándo usar while y cuándo usar for?
Tanto for como while sirven para repetir código, pero están pensados para situaciones distintas. Elegir el adecuado hace que tu código sea más claro y menos propenso a errores.
Usa for cuando... | Usa while cuando... |
|---|---|
| Recorres una colección | Esperas a que cambie una condición |
| Sabes cuántas veces repetir | NO sabes cuántas veces repetir |
| Procesas cada elemento de una lista | Repites hasta que pase algo |
| Ejemplo: imprimir el nombre de cada estudiante | Ejemplo: seguir preguntando hasta recibir una entrada válida |
I like apple I like banana I like cherry 3 9 27 81 243 First power of 3 >= 100: 243
El bucle for es perfecto para la lista de frutas: sabemos exactamente qué vamos a recorrer. El bucle while es perfecto para las potencias de 3: no sabemos de antemano cuántas multiplicaciones harán falta para pasar de 100.
names = ["Alice", "Bob", "Charlie"]
i = 0
while i < len(names):
print(names[i])
i += 1names = ["Alice", "Bob", "Charlie"]
for name in names:
print(name)Ejercicios de práctica
¡Ahora te toca escribir bucles while! Estos ejercicios se centran en el tipo de problemas en los que los bucles while brillan: un número de iteraciones desconocido, parar según una condición y acumular.
Recuerda: un bucle while necesita algo que cambie dentro de él. Si tu bucle no termina nunca, comprueba que estás actualizando la variable de la condición.
Usa un bucle while para imprimir una cuenta regresiva del 5 al 1, seguida de "Blastoff!" (¡despegue!) en la última línea.
Salida esperada:
5
4
3
2
1
Blastoff!Empezando en 1, duplica un número una y otra vez hasta que supere 500. Imprime cada valor por el camino (incluido el primer valor que supera 500). Después, imprime el resultado final.
Salida esperada:
1
2
4
8
16
32
64
128
256
512
First power of 2 over 500: 512Pista: usa un bucle while True con un break cuando el valor supere 500.
Sin ejecutar el código, predice exactamente lo que va a imprimir. Sigue con cuidado cada iteración y fíjate en cuándo se comprueba la condición y cuándo cambia x.
Después, ejecútalo para comprobar tu respuesta.
Este código debería contar cuántos dígitos tiene un número dividiéndolo entre 10 una y otra vez. Pero tiene un error: da una respuesta incorrecta para el número 9999. Corrige el código para que imprima:
9999 has 4 digitsNo cambies el número ni la instrucción print final.
La conjetura de Collatz es un problema matemático famoso. Empieza con cualquier entero positivo. Si es par, divídelo entre 2. Si es impar, multiplícalo por 3 y súmale 1. Repite hasta llegar a 1.
Empezando con n = 6, imprime cada valor de la secuencia (incluidos el 6 y el 1) y después imprime cuántos pasos hicieron falta.
Salida esperada:
6
3
10
5
16
8
4
2
1
Steps: 8Resumen: bucles while en Python
Aquí tienes todo lo que aprendiste sobre los bucles while:
| Patrón | Qué hace | Ejemplo |
|---|---|---|
while condition: | Repite hasta que la condición sea False | while count > 0: |
while True: + break | Repite sin fin; sales con break | Bucles de juegos, menús |
| Bucle contador | Cuenta hacia arriba o hacia abajo hasta un objetivo | while count <= 10: |
| Bucle acumulador | Va sumando un total o un resultado | while total < 100: |
| Bucle de validación | Repite hasta que la entrada sea válida | while age <= 0: |
Reglas clave para recordar:
Falsebreak sale del bucle de inmediatofor cuando sabes qué vas a recorrerwhile cuando necesitas repetir hasta que cambie una condición¿Qué sigue?
Ya viste cómo break sirve para salir de un bucle antes de tiempo. Pero hay dos instrucciones más para controlar bucles: continue (salta el resto de esta iteración) y pass (no hace nada). En la siguiente lección, [break, continue y pass en Python](/python/python-break-continue-pass), dominarás las tres y aprenderás cuándo conviene usar cada una.