Estructuras de control

Bucle while


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.