Bucle while

En esta lección se tratan los bucles while.

El bucle while

Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (es decir, mientras la condición tenga el valor True).

La sintaxis del bucle while es la siguiente:

while condicion:
    cuerpo del bucle

La ejecución de esta estructura de control while es la siguiente:

La variable o las variables que aparezcan en la condición se suelen llamar variables de control. Las variables de control deben definirse antes del bucle while y modificarse en el bucle while.

Diagrama de flujo

El diagrama de flujo siguiente muestra la ejecución de un bucle while ...:

DIAGRAMA DE FLUJO: BUCLE WHILE Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al bucle while. INICIO Evalúa la condición ... CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE y vuelve a evaluar la condición. Si la condición es False, termina el bucle while .. False FIN El programa llega al bucle while. INICIO Evalúa la condición ... CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE y vuelve a evaluar la condición. CONDICIÓN Si la condición es False, termina el bucle while.. False FIN


Si incluimos en este esquema la definición y modificación de las variables de control que intervienen en la condición, el diagrama de flujo sería el siguiente:

DIAGRAMA DE FLUJO: BUCLE WHILE Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al bucle while. INICIO Efectúa la asignación. ASIGNACIÓN Evalúa la condición ... CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE ... efectúa el cambio ... CAMBIO y vuelve a evaluar la condición. CONDICIÓN Si la condición es False, termina el bucle while.. False FIN El programa llega al bucle while. INICIO Efectúa la asignación. ASIGNACIÓN Evalúa la condición ... CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE ... efectúa el cambio ... CAMBIO y vuelve a evaluar la condición. CONDICIÓN Si la condición es False, termina el bucle while.. False FIN

Ejemplos de bucles while

Por ejemplo, el siguiente programa escribe los números del 1 al 3:

Ejemplo de bucle while 1

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2
3
Programa terminado

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle while 1 - Paso 1

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")

Se ejecuta la primera instrucción del programa.

En este caso, da el valor 1 a la variable i. La variable se utilizará como variable de control en el bucle while posterior.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 2

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")

A continuación se ejecuta el bucle. Un bucle está controlado por la condición. Si la condición se cumple, se ejecutan las instrucciones del cuerpo del bucle.

En este caso la condición es que la variable de control sea inferior a 3. Como i vale 1, la condición se cumple, así que se pasa a ejecutar las instrucciones del bucle, en este caso dos instrucciones.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 3

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 1.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 4

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1

A continuación se añade 1 a la variable de control i.

En este caso, como la variable de control i valía 1, ahora toma el valor 2.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 5

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 3. Como i vale 2, la condición se cumple, así que se ejecutan de nuevo las instrucciones del cuerpo del bucle.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 6

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 2.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 7

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2

A continuación se añade 1 a la variable de control i.

En este caso, como la variable de control i valía 2, ahora toma el valor 3.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 8

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 3. Como i vale 3, la condición se cumple, así que se ejecutan de nuevo las instrucciones del cuerpo del bucle.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 9

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2
3

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 3.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 10

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2
3

A continuación se añade 1 a la variable de control i.

En este caso, como la variable de control i valía 3, ahora toma el valor 4.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 11

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2
3

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 3. Como i vale 4, la condición ya no se cumple, por lo que el bucle se termina.

Anterior Siguiente

Ejemplo de bucle while 1 - Paso 12

i = 1
while i <= 3:
    print(i)
    i += 1
print("Programa terminado")
1
2
3
Programa terminado

La última instrucción del programa imprime el texto "Programa terminado".

Anterior

El ejemplo anterior se podría haber programado con un bucle for. La ventaja de un bucle while es que la variable de control se puede modificar con mayor flexibilidad, como en el ejemplo siguiente:

Ejemplo de bucle while 2

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13
40
Programa terminado

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle while 2 - Paso 1

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")

Se ejecuta la primera instrucción del programa.

En este caso, da el valor 1 a la variable i. La variable se utilizará como variable de control en el bucle while posterior.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 2

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")

A continuación se ejecuta el bucle. Un bucle está controlado por la condición. Si la condición se cumple, se ejecutan las instrucciones del cuerpo del bucle.

En este caso la condición es que la variable de control sea inferior a 50. Como i vale 1, la condición se cumple, así que se pasa a ejecutar las instrucciones del bucle, en este caso dos instrucciones.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 3

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 1.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 4

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1

A continuación se modifica la variable de control i, multiplicando su valor por 3 y sumando 1.

En este caso, como la variable de control i valía 1, ahora toma el valor 4 (3*1 + 1).

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 5

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 50. Como i vale 4, la condición se cumple, así que se ejecutan de nuevo las instrucciones del cuerpo del bucle.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 6

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 4.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 7

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4

A continuación se modifica la variable de control i, multiplicando su valor por 3 y sumando 1.

En este caso, como la variable de control i valía 4, ahora toma el valor 13 (3*4 + 1).

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 8

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 50. Como i vale 13, la condición se cumple, así que se ejecutan de nuevo las instrucciones del cuerpo del bucle.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 9

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 13.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 10

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13

A continuación se modifica la variable de control i, multiplicando su valor por 3 y sumando 1.

En este caso, como la variable de control i valía 13, ahora toma el valor 40 (3*13 + 1).

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 11

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 50. Como i vale 40, la condición se cumple, así que se ejecutan de nuevo las instrucciones del cuerpo del bucle.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 12

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13
40

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción imprime el valor de i, es decir, 40.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 13

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13
40

A continuación se modifica la variable de control i, multiplicando su valor por 3 y sumando 1.

En este caso, como la variable de control i valía 40, ahora toma el valor 121 (3*40 + 1).

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 14

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13
40

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 50. Como i vale 121, la condición ya no se cumple, por lo que el bucle se termina.

Anterior Siguiente

Ejemplo de bucle while 2 - Paso 15

i = 1
while i <= 50:
    print(i)
    i = 3 * i + 1
print("Programa terminado")
1
4
13
40
Programa terminado

La última instrucción del programa imprime el texto "Programa terminado".

Anterior

Otra ventaja del bucle while es que el número de iteraciones no está definida antes de empezar el bucle, por ejemplo porque los datos los proporciona el usuario. Por ejemplo, el siguiente ejemplo pide un número positivo al usuario una y otra vez hasta que el usuario lo haga correctamente:

Ejemplo de bucle while 3

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: 9
Gracias por su colaboración

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle while 3 - Paso 1

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4

Se ejecuta la primera instrucción del programa.

En este caso, se pide al usuario que escriba un número positivo. En el ejemplo, el usuario escribe un número negativo (-4) y ese número se guarda en la variable de control "numero".

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 2

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4

A continuación se ejecuta el bucle. Un bucle está controlado por la condición. Si la condición se cumple, se ejecutan las instrucciones del cuerpo del bucle.

En este caso la condición es que la variable de control sea inferior a 0. Como "numero" vale -4, la condición se cumple, así que se pasa a ejecutar las instrucciones del bucle, en este caso dos instrucciones.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 3

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción avisa que se ha escrito un número negativo.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 4

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8

A continuación, se vuelve a pedir al usuario que escriba un número positivo. En el ejemplo, el usuario escribe un número negativo (-8) y ese número se guarda en la variable de control "numero".

En este caso, la variable de control "numero" toma el valor -8.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 5

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 0. Como "numero" vale -8, la condición se cumple, así que se pasa a ejecutar las instrucciones del bucle, en este caso dos instrucciones.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 6

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8
¡Ha escrito un número negativo! Inténtelo de nuevo

A continuación se ejecutan las instrucciones del bloque.

La primera instrucción avisa que se ha escrito un número negativo.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 7

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: 9

A continuación, se vuelve a pedir al usuario que escriba un número positivo.

En el ejemplo, el usuario escribe por fin un número positivo (9) y ese número se guarda en la variable de control "numero". En este caso, la variable de control "numero" toma el valor 9.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 8

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: 9

A continuación se vuelve a evaluar la condición del bucle.

Se comprueba si la variable de control es inferior a 0. Como "numero" vale 9, la condición no se cumple, así que se pasa a ejecutar las instrucciones del bucle, por lo que el bucle se termina.

Anterior Siguiente

Ejemplo de bucle while 3 - Paso 9

numero = int(input("Escriba un número positivo: "))
while numero < 0:
    print("¡Ha escrito un número negativo! Inténtelo de nuevo")
    numero = int(input("Escriba un número positivo: "))
print("Gracias por su colaboración")
Escriba un número positivo: -4
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: -8
¡Ha escrito un número negativo! Inténtelo de nuevo
Escriba un número positivo: 9
Gracias por su colaboración

La última instrucción del programa agradece al usuario su colaboración.

Anterior

Bucles infinitos

Si la condición del bucle se cumple siempre, el bucle no terminará nunca de ejecutarse y tendremos lo que se denomina un bucle infinito. Aunque a veces es necesario utilizar bucles infinitos en un programa, normalmente se deben a errores que se deben corregir.

Los bucles infinitos no intencionados deben evitarse pues significan perder el control del programa. Para interrumpir un bucle infinito, hay que pulsar la combinación de teclas Ctrl+C. Al interrumpir un programa se mostrará un mensaje de error similar a éste:

Traceback (most recent call last):
  File "ejemplo.py", line 3, in <module>
    print(i)
KeyboardInterrupt

Por desgracia, es fácil programar involuntariamente un bucle infinito, por lo que es inevitable hacerlo de vez en cuando, sobre todo cuando se está aprendiendo a programar.

Estos algunos ejemplos de bucles infinitos: