Un bucle que vigila una condición
Mientras que for itera sobre una secuencia conocida, while sigue iterando mientras una condición sea verdadera. Recurres a él cuando no sabes de antemano cuántas iteraciones necesitarás — reintentar hasta que algo funcione, leer entrada hasta que el usuario diga basta, hacer polling a un servicio hasta que responda.
La forma es simple:
Eso imprime de 0 a 4. Python comprueba la condición al inicio de cada iteración. Si es verdadera, el cuerpo se ejecuta. Luego comprueba otra vez. Cuando la condición se vuelve falsa, el bucle termina.
Fíjate en que count += 1 importa. Sin eso, la condición se mantendría verdadera para siempre — un bucle infinito. Esa es la trampa principal con while, y la razón principal para preferir for cuando puedas usarlo.
Cuándo while es la herramienta correcta
Unos cuantos casos de uso clásicos:
Reintentar hasta el éxito.
Leer entrada hasta que el usuario salga.
Procesar una cola.
El hilo común: estás vigilando un cambio de estado en vez de iterar sobre elementos.
while True está bien
Verás este patrón mucho:
Esto es Python idiomático cuando la condición de salida "real" está dentro del cuerpo del bucle, no en algo limpio que puedas testear al principio. Es más fácil de leer que inventarse una bandera should_continue que actualizas en un sitio y compruebas en otro.
La única regla: asegúrate de que haya un break (o return, o una excepción lanzada) que el código eventualmente alcance. Un while True: incondicional sin salida es la forma clásica de bloquear un programa.
Evitar el bucle infinito
Los bucles infinitos ocurren cuando la condición se mantiene verdadera para siempre. Los sospechosos habituales:
- Olvidarse de actualizar la variable.
while count < 5:necesita algo dentro del cuerpo que cambiecount. - Actualizar la variable equivocada.
while i < 10:y luegoj += 1dentro — fácil de pasar por alto si tu código tiene más de unas pocas variables. - Comparación de coma flotante.
while x != 1.0:puede hacer bucle para siempre sixsolo se acerca a 1.0. Usa<=oabs(x - 1.0) < toleranceen su lugar.
Si acabas atrapado en un bucle infinito en una terminal, pulsa Ctrl+C. Eso envía una señal de interrupción, y Python para lo que esté haciendo.
break, continue y else
while soporta las mismas tres herramientas de "flujo" que for:
breaksale del bucle inmediatamente.continuesalta a la siguiente iteración (así que la condición se comprueba de nuevo).elsese ejecuta si el bucle terminó sin unbreak.
Esa es una comprobación primitiva de primalidad. Si el break interno dispara, el número es compuesto. Si el bucle sale de forma natural (la condición se vuelve falsa), el else corre y declara el número primo.
while vs for: ¿cuál elijo?
Un test mental rápido:
- ¿Tienes una colección que recorrer? →
for. - ¿Necesitas iterar un número fijo de veces? →
for i in range(n):. - ¿Estás iterando hasta que cambie una condición? →
while.
En código Python temprano verás que for cubre el 90% de los bucles. while aparece cuando estás haciendo cosas como polling, reintentos o construyendo un REPL simple. Si estás usando while para iterar sobre una lista con un índice, es señal de que deberías pasarte a for + enumerate.
Un programa práctico con while
Un juego de adivinar un número es un ejemplo clásico porque el número de iteraciones depende de cómo juegue el usuario:
No puedes saber de antemano cuántos intentos hará falta — depende de las respuestas del usuario. Esa es la razón de ser de while.
Mirando adelante
Ya has visto los dos tipos de bucle que te da Python. Siguiente: range() en detalle — aparece en casi cada bucle for de estilo contador, y los matices pequeños valen la pena entender antes de pasar a las colecciones.
Preguntas frecuentes
¿Cuándo debería usar un bucle while en lugar de un bucle for?
Usa while cuando no sepas de antemano cuántas iteraciones necesitas — por ejemplo, reintentar hasta que algo funcione, o leer entrada hasta que el usuario escriba 'quit'. Usa for cuando estés recorriendo una colección conocida.
¿Cómo evito un bucle infinito en Python?
Asegúrate de que algo dentro del bucle eventualmente haga la condición falsa. La causa más común de bucles infinitos es olvidarse de actualizar la variable de la que depende la condición. Si te pilla uno, pulsa Ctrl+C en la terminal para pararlo.
¿Es while True mala práctica?
while True mala práctica?No inherentemente. while True: con un break claro dentro es un patrón perfectamente normal para "itera hasta que toquemos una condición de salida específica". Es más limpio que inventarse una bandera booleana que tienes que gestionar en dos sitios.