En programación, frecuentemente necesitamos ejecutar un bloque de instrucciones varias veces. A esto se le conoce como estructura repetitiva, bucle o ciclo.
Estas estructuras nos permiten repetir automáticamente una acción un número determinado de veces o mientras se cumpla una condición.
Python ofrece dos tipos principales de estructuras repetitivas:
while
: para repeticiones basadas en condiciones.for
: para repeticiones sobre secuencias o rangos definidos.
Más adelante exploraremos a fondo el bucle for
. Ahora nos enfocaremos en while
.
Bucle while:
El bucle while
se utiliza cuando no sabemos con certeza cuántas veces se repetirá el bloque de código, sino que dependerá del cumplimiento de una condición lógica.
Sintaxis básica:
while condición:
# Bloque de código que se ejecuta mientras la condición sea verdadera
Ejemplo: Contar del 1 al 5
contador = 1
while contador <= 5:
print(contador)
contador += 1
Explicación:
- La condición
contador <= 5
se evalúa antes de cada iteración. - Si la condición es
True
, se ejecuta el bloque. - Cuando la condición deja de cumplirse (
False
), el bucle termina.
Tipos de bucles:
- De condición: como
while
, donde la cantidad de repeticiones depende de una evaluación lógica. - De conteo: como
for
, cuando conocemos el número exacto de repeticiones.
Cuidado con los bucles infinitos:
Un bucle infinito ocurre cuando la condición nunca se vuelve falsa, lo que hace que el programa repita indefinidamente. Ejemplo:
while True:
print("Esto nunca termina...")
Evita esto asegurándote de que algo dentro del bucle eventualmente cambie el valor de la condición.
Uso de else con while:
Python permite usar else
junto con while
. El bloque else
se ejecuta solo si el bucle termina de forma natural (es decir, sin break
).
x = 3
while x > 0:
print(x)
x -= 1
else:
print("El bucle terminó correctamente.")
Si dentro del while
hubiera un break
, el bloque else
no se ejecutaría.
Bucles while en una sola línea:
Si el cuerpo del bucle es simple, puede escribirse en una sola línea:
x = 5
while x > 0: x -= 1; print(x)
Sin embargo, esta forma reduce la legibilidad y no es recomendada para código complejo.
Bucles while anidados:
Un bucle puede contener dentro de sí otro bucle. Esto se llama bucle anidado, y se utiliza para generar combinaciones o trabajar con estructuras de datos múltiples.
i = 0
while i <= 2:
j = 0
while j <= 2:
print(i, j)
j += 1
i += 1
Este código imprime todas las combinaciones posibles de números del 0 al 2.
Ejemplo creativo: Árbol de Navidad
altura = 5
nivel = 1
while nivel <= altura:
print(" " * (altura - nivel) + "*" * (2 * nivel - 1))
nivel += 1
Este código imprime un árbol de Navidad usando espacios y asteriscos.
Control de flujo en bucles: break, continue y pass con while
Python proporciona instrucciones especiales para modificar el flujo de ejecución dentro de un bucle:
Instrucción break:
Termina el bucle inmediatamente, sin importar si la condición aún es verdadera.
x = 10
while x > 0:
print(x)
if x == 5:
break
x -= 1
print("Bucle interrumpido.")
Instrucción continue:
Salta el resto del código en la iteración actual y continúa con la siguiente.
x = 10
while x > 0:
x -= 1
if x == 5:
continue
print(x)
Instrucción pass:
No hace nada. Es útil como marcador temporal para mantener la sintaxis válida.
x = 10
while x > 0:
if x == 5:
pass # Aquí se podría colocar código en el futuro
print(x)
x -= 1
Recomendaciones finales:
- Siempre asegúrate de que la condición de un
while
eventualmente será falsa, a menos que busques un bucle infinito. - Usa
break
con cuidado: puede hacer el código difícil de entender si no está bien justificado. - Aprovecha
else
si necesitas detectar cuándo un bucle ha finalizado normalmente.