¡Hola! Si quieres aprender cómo funcionan los ciclos while en Python para usarlos en tu código, este artículo es para ti.

Los ciclos while son estructuras de programación muy poderosas que puedes usar en tus programar para repetir una secuencia de sentencias o instrucciones (statements en inglés).

En este artículo, aprenderás:

  • Qué son los ciclos while.
  • Para qué se usan.
  • Cuándo deberías usarlos.
  • Cómo funcionan detrás de escenas.
  • Cómo escribir un ciclo while en Python.
  • Qué son los ciclos infinitos y cómo interrumpirlos.
  • Para qué se usa while True y su sintaxis general.
  • Cómo usar una sentencia break para detener un ciclo while.

Aprenderás cómo funcionan los ciclos while detrás de escenas con ejemplos, tablas y diagramas.

¿Listo(a)? Comencemos. 🔅

🔹 Propósito y uso de los ciclos while

Comencemos con el propósito de los ciclos while. ¿Para qué se usan?

Los usamos para repetir una secuencia de instrucciones o sentencias un número indefinido de veces. Este tipo de ciclo se ejecuta mientras una condición dada es True (verdadera) y solo se detiene si la condición es False (falsa).

💡 Dato: la palabra while significa "mientras" en español.

Cuando escribimos un ciclo while, no definimos explícitamente cuántas iteraciones serán completadas, solo escribimos una condición que debe ser verdadera (True) para continuar el proceso y falsa (False) para detenerlo.

💡 Dato: si la condición del ciclo while nunca es falsa (False), entonces tendremos un ciclo infinito, el cual es un ciclo que en teoría nunca se detiene sin que sea interrumpido de forma externa. Por ejemplo, si se interrumpe con un atajo de teclado.

Estos son algunos ejemplos de casos reales en los cuales usaríamos un ciclo while:

  • Valores ingresados por el usuario: cuando le pedimos al usuario que ingrese un valor, debemos verificar si ese valor es válido. No podemos saber con anticipación cuántas veces el usuario deberá ingresar el valor antes de que el programa pueda continuar. Por lo tanto, un ciclo while sería ideal para esta situación.
  • Búsqueda: buscar un elemento en una estructura de datos es otro ejemplo perfecto en el cual se debería usar un ciclo while porque no podemos saber con anticipación cuántas iteraciones se necesitarán para encontrar el valor que buscamos. Por ejemplo, el algoritmo de Búsqueda Binaria puede implementarse con un ciclo while.
  • Desarrollo de juegos: en un juego, podríamos usar un ciclo while para mantener la lógica principal ejecutándose continuamente hasta que el jugador pierda o el juego termine. No podemos anticipar cuándo ocurrirá esto, así que es otro ejemplo perfecto de una situación en la cual un ciclo while sería muy útil.

🔸 Cómo funcionan los ciclos while

Ahora que ya sabes para qué se usan los ciclos while, veamos su lógica principal y cómo funcionan detrás de escenas cuando se ejecuta el código.

Aquí tenemos un diagrama:

image-7
Ciclo while

Analicemos este proceso en más detalle:

  • El proceso inicia cuando se encuentra un ciclo while durante la ejecución del programa.
  • Se evalúa la condición para determinar si es verdadera o falsa (True o False).
  • Si la condición es verdadera (True), la secuencia de instrucciones o sentencias que pertenecen al ciclo while se ejecutan.
  • Nuevamente se evalúa y verifica la condición del ciclo while.
  • Si la condición es verdadera (True) nuevamente, la secuencia de instrucciones en el cuerpo del ciclo while se ejecutan y el proceso se repite.
  • Cuando la condición es falsa (False), el ciclo se detiene y el programa continúa más allá del ciclo while.

Una de las características más importantes de los ciclos while es que las variables usadas en la condición del ciclo no se actualizan automáticamente.

Nosotros tenemos que actualizar sus valores explícitamente en nuestro código para asegurarnos de que el ciclo se detendrá en algún momento, cuando la condición sea falsa (False).

🔹 Sintaxis general de los ciclos while

Genial. Ahora que ya sabes cómo funcionan los ciclos while, veamos el código y cómo puedes escribir un ciclo while en Python.

Esta es la sintaxis básica:

image-8
Ciclo while (sintaxis)

Estos son los elementos principales (en orden):

  • La palabra clave while (seguida de un espacio).
  • Una condición que determina si el ciclo continuará su ejecución o no en base a su valor (True o False).
  • Dos puntos (:) al final de la primera línea.
  • La secuencia de instrucciones o sentencias que se repetirán. A este bloque de código se le denomina el "cuerpo" del ciclo y debe estar indentado. Si una línea de código no está indentada, no se considerará parte del ciclo.
image-9

💡 Dato: La guía de estilo de Python (PEP 8) recomienda usar 4 espacios por nivel de indentación (sangría). La tabulación solo debe ser usada para ser consistente con código existente que ya haya sido escrito con tabuladores (tabs).

🔸 Ejemplos de ciclos while

Ahora que ya sabes cómo funcionan los ciclos while y cómo escribirlos en Python, veamos cómo funcionan detrás de escenas con algunos ejemplos.

Cómo funciona un ciclo while básico

Aquí tenemos un ciclo while básico que muestra el valor de i en el terminal mientras el valor de i es menor que 8 (i < 8).

i = 4

while i < 8:
    print(i)
    i += 1

Si ejecutamos el código, vemos el siguiente resultado:

4
5
6
7

Veamos qué ocurre detrás de escenas cuando se ejecuta el código:

image-10
  • Iteración 1: inicialmente, el valor de i es 4, así que la condición i < 8 evalúa a True y el ciclo inicia su ejecución. El valor de i se muestra (4) y este valor se incrementa en 1. El ciclo inicia nuevamente.
  • Iteración 2: ahora el valor de i es 5, así que la condición i < 8 evalúa a True. El cuerpo del ciclo se ejecuta, el valor de i se muestra (5) y el valor de i se incrementa en 1. El ciclo inicia nuevamente.
  • Iteraciones 3 y 4: el mismo proceso se repite para la tercera y la cuarta iteración, así que los números 6 y 7 se muestran en el terminal.
  • Antes de iniciar la quinta iteración, el valor de i es 8. Ahora la condición del ciclo while i < 8 evalúa a False y el ciclo while se detiene inmediatamente.

💡 Dato: si la condición del ciclo while es falsa (False) antes de iniciar la primera iteración, el ciclo no se ejecuta. Se omite y se continúa con la ejecución del programa principal.

Valores ingresados por el usuario y el ciclo while

Ahora veamos un ejemplo de un ciclo while en un programa que recibe un valor del usuario. Usaremos la función input() para pedirle al usuario que ingrese un número entero y ese número solo será agregado a una lista si es par.

Este es el código:

# Definimos la lista
nums = []

# El ciclo se ejecutará mientras el tamaño (length)
# de la lista nums sea menor que 4.= 
while len(nums) < 4:
    # Le pedimos al usuario que ingrese un valor y lo guardamos en una variable como un número entero 
    valor_ingresado = int(input("Ingrese un numero entero: "))
    # Si el valor es un número par, lo agregamos a la lista
    if valor_ingresado % 2 == 0:
        nums.append(valor_ingresado)

La condición del ciclo while es len(nums) < 4, así que el ciclo se ejecutará mientras el tamaño (longitud) de la lista nums es estrictamente menor que 4.

Analicemos este programa en más detalle:

  • Comenzamos definiendo una lista vacía y la asignamos a una variable llamada nums.
nums = []
  • Luego, definimos un ciclo while que se ejecutará mientras len(nums) < 4.
while len(nums) < 4:
  • Le pedimos al usuario que ingrese un valor con la función input() y guardamos ese valor en la variable valor_ingresado.
valor_ingresado = int(input("Ingrese un numero entero: "))

💡 Dato: necesitamos convertir el valor ingresado por el usuario a un número entero con la función int() antes de asignarlo a una variable porque la función input() siempre retorna una cadena de caracteres (fuente).

  • Verificamos si este valor es par o impar:
if valor_ingresado % 2 == 0:
  • Si es par, lo agregamos a la lista nums.
nums.append(valor_ingresado)
  • Si es impar, el ciclo inicia nuevamente y la condición se verifica para determinar si el ciclo debe continuar o no.

Si ejecutamos el código e ingresamos valores, podemos ver el siguiente resultado:

Ingrese un numero entero: 3
Ingrese un numero entero: 4    
Ingrese un numero entero: 2    
Ingrese un numero entero: 1
Ingrese un numero entero: 7
Ingrese un numero entero: 6    
Ingrese un numero entero: 3
Ingrese un numero entero: 4    

Esta tabla resume lo que ocurre detrás de escenas cuando se ejecuta el código:

image

💡 Dato: el valor inicial de len(nums) es 0 porque la lista inicialmente está vacía. La última columna de la tabla muestra el tamaño (length) de la lista al final de la iteración actual. Este valor se usa para verificar la condición antes de que comience la próxima iteración.

Como puedes ver en la tabla, el usuario ingresa números enteros pares en la segunda, tercera, sexta y octava iteración y estos valores son agregados a la lista nums.

Antes de que inicie una novena iteración, se verifica la condición nuevamente pero ahora es falsa (False) porque la lista nums tiene cuatro elementos (length 4), así que el ciclo while se detiene.

Si verificamos el valor de la lista nums cuando se completa el proceso, podemos ver lo siguiente:

>>> nums
[4, 2, 6, 4]

Exactamente lo que esperábamos. El ciclo while se detuvo cuando la condición len(nums) < 4 fue falsa (False).

Ahora que ya sabes cómo funcionan los ciclos while y has visto algunos ejemplos prácticos, veamos más detalles sobre un elemento clave de este tipo de ciclos: la condición.

🔹 Datos para la condición de un ciclo while

Antes de que comencemos a trabajar con ciclos while, deberías sabes que la condición del ciclo while tiene un rol muy importante en su funcionalidad y resultado.

image-25

Debes tener mucho cuidado al momento de escoger un operador de comparación porque esta es una fuente muy común de errores en el código (bugs).

Por ejemplo, estos son errores comunes:

  • Usar < (menor que) en lugar de <= (menor o igual que) (o viceversa).
  • Usar > (mayor que) en lugar de >= (mayor o igual que) (o viceversa).

Esto puede cambiar el número de iteraciones del ciclo e incluso su resultado y efecto en el programa.

Veamos un ejemplo:

Si escribimos este ciclo while con la condición i < 9:

i = 6

while i < 9:
    print(i)
    i += 1

Vemos el siguiente resultado cuando se ejecuta el código:

6
7
8

El ciclo completa tres iteraciones y luego se detiene cuando i es igual a 9.

Esta tabla muestra lo que ocurre detrás de escenas cuando se ejecuta el código:

image-1
  • Antes de la primera iteración del ciclo, el valor de i es 6, así que la condición i < 9 es verdadera (True) y el ciclo inicia su ejecución. Se muestra el valor de i y luego se incrementa en 1.
  • En la segunda iteración del ciclo, el valor de i es 7, así que la condición i < 9 es verdadera (True). El cuerpo del ciclo se ejecuta, se muestra el valor de i y luego se incrementa este valor en 1.
  • En la tercera iteración del ciclo, el valor de i es 8, así que la condición i < 9 es verdadera (True). El cuerpo del ciclo se ejecuta, se muestra el valor de i y luego se incrementa este valor en 1.
  • La condición se verifica nuevamente antes de que inicie una cuarta iteración, pero ahora el valor de i es 9, así que i < 9 es falsa (False) y el ciclo se detiene.

En este caso, usamos < como el operador de comparación en la condición, pero ¿qué crees que pasará si usamos <=?

i = 6

while i <= 9:
    print(i)
    i += 1

Vemos el siguiente resultado:

6
7
8
9

El ciclo completa una iteración más porque ahora estamos usando el operador "menor o igual que" <=, así que la condición sigue siendo verdadera (True) cuando i es igual a 9.

Esta tabla muestra lo que ocurre detrás de escenas:

image-2

Se completan cuatro iteraciones. Se verifica la condición nuevamente antes de iniciar una quinta iteración. Pero ahora el valor de i es 10, así que la condición i <= 9 es falsa (False) y el ciclo se detiene.

🔸 Ciclos while infinitos

Ahora que ya sabes cómo funcionan los ciclos while, ¿qué crees que ocurrirá si la condición nunca es falsa?

image-109

¿Qué son los ciclos while infinitos?

Recuerda que los ciclos while no actualizan las variables automáticamente (nosotros debemos hacerlo explícitamente en nuestro código).

Por lo tanto, no hay ninguna garantía de que el ciclo se detenga a menos que escribamos el código necesario para que la condición sea falsa (False) en algún momento durante la ejecución del ciclo.

Si no lo hacemos y la condición siempre es verdadera (True), entonces tendremos un ciclo while infinito, el cual es un ciclo while que (en teoría) nunca se detiene.

Los ciclos infinitos normalmente son causados por un error (bug) en el código, pero también pueden ser causados intencionalmente cuando queremos repetir una secuencia de instrucciones indefinidamente hasta que se encuentre una sentencia break.

💡 Dato: un "bug" es un error en el programa que causa resultados incorrectos o inesperados.

Veamos estos dos tipos de ciclos infinitos en los siguientes ejemplos.

Ejemplo de un ciclo infinito

Este es un ejemplo de un ciclo infinito no intencional causado por un error (bug) en el programa:

# Definir una variable
i = 5

# Ejecutar este ciclo mientras i es menor que 15
while i < 15:
    # Mostrar un mensaje
    print("¡Hola mundo!")

Analiza este código por un momento.

¿No notas que falta algo en el cuerpo del ciclo?

¡Si, correcto!

El valor de la variable i nunca se actualiza (siempre es 5). Por lo tanto, la condición i < 15 siempre es verdadera (True) y el ciclo nunca se detiene.

Si ejecutamos este código, el resultado será una secuencia infinita de mensajes ¡Hola mundo! porque el cuerpo del ciclo print("¡Hola mundo!") se ejecutará (en teoría) un número infinito de veces.

¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
¡Hola mundo!
.
.
.
# Continúa indefinidamente

Para detener el programa, necesitaremos interrumpir el ciclo manualmente con el atajo de teclado CTRL + C.

Cuando lo hacemos, veremos un error KeyboardInterrupt:

image-116

Para corregir este ciclo, necesitaremos actualizar el valor de i en el cuerpo del ciclo para asegurarnos de que la condición i < 15 será falsa (False) en algún momento durante la ejecución del programa.

Esta es una posible solución, incrementar el valor de i en 2 para cada iteración:

i = 5

while i < 15:
    print("¡Hola mundo!")
    # Actualizar el valor de i
    i += 2

Genial. Ahora ya sabes cómo corregir ciclos infinitos causados por errores (bugs). Solo necesitas escribir el código que garantice que la condición será falsa (False) en algún momento durante la ejecución del programa.

Ahora veamos más sobre los ciclos infinitos intencionales y cómo funcionan.

🔹 Cómo crear un ciclo infinito con while True

Podemos generar un ciclo infinito intencionalmente con while True. En este caso, el ciclo se ejecutará indefinidamente hasta que el proceso sea detenido explícitamente con CTRL + C o hasta que se encuentre una sentencia break (en un momento veremos más sobre esta sentencia).

Esta es la sintaxis básica:

image-4

En lugar de escribir una condición luego de la palabra clave while, escribimos el valor de verdad directamente para indicar que la condición siempre va a ser verdadera (True).

Aquí tenemos un ejemplo:

>>> while True:
	print(0)

	
0
0
0
0
0
0
0
0
0
0
0
0
0
Traceback (most recent call last):
  File "<pyshell#2>", line 2, in <module>
    print(0)
KeyboardInterrupt

En este caso, el ciclo se ejecuta hasta que se presiona CTRL + C, pero Python también tiene una sentencia break que podemos usar directamente en nuestro código para detener este tipo de ciclo while.

La sentencia break

Esta sentencia se usa para detener un ciclo while inmediatamente. Debes considerarla como una señal de tránsito roja de "stop" (detenerse) que puedes usar en tu código para controlar la funcionalidad del ciclo while.

image-110

Según la documentación de Python:

La sentencia break, como en C, termina el bucle for o while más anidado.

Este diagrama muestra la lógica básica de una sentencia break:

image-5
La sentencia break

Esta es la lógica básica de una sentencia break:

  • El ciclo while solo inicia si la condición es verdadera (True).
  • Si se encuentra una sentencia break durante la ejecución del ciclo, el ciclo se detiene inmediatamente.
  • Si la sentencia break no se encuentra, el ciclo continúa su ejecución normal y se detiene cuando la condición es falsa (False).

Podemos usar break para detener un ciclo while cuando una condición se cumple en un momento en particular de su ejecución, así que normalmente la encontrarás en un condicional.

Este es un ejemplo:

while True:
    # Código
    if <condición>:
    	break
    # Código

Esto detiene el ciclo inmediatamente si la condición del condicional es verdadera (True).

💡 Dato: en teoría, puedes incluir una sentencia break en cualquier lugar del cuerpo del ciclo. No necesariamente debe estar en un condicional, pero normalmente la usamos para detener el ciclo si una condición es verdadera (True).

Aquí tenemos un ejemplo de break en un ciclo while True:

image-6

💡 Dato: no se incluyen acentos en el ejemplo para evitar cualquier incompatibilidad con los caracteres que no son estándar en inglés.

Veámoslo con más detalle:

La primera línea define un ciclo while True que se ejecuta indefinidamente hasta que se encuentra una sentencia break (o hasta que se interrumpe con CTRL + C).

while True:

La segunda línea le pide al usuario ingresar un valor. Este valor se convierte a un entero y se asigna a la variable valor_ingresado.

valor_ingresado = int(input("Ingrese un numero entero: "))

La tercera línea verifica si el valor ingresado es impar.

if valor_ingresado % 2 != 0:

Si es impar, se muestra el siguiente mensaje: Este numero es impar y la sentencia break detiene el ciclo inmediatamente.

print("Este numero es impar")
break

Si el valor ingresado es impar, se muestra el mensaje Este número es par y el ciclo comienza nuevamente.

print("Este numero es par")

El ciclo se ejecuta indefinidamente hasta el usuario ingrese un número entero impar porque es la única forma de encontrar y ejecutar la sentencia break en este código.

Aquí tenemos un ejemplo con valores ingresados por el usuario:

Ingrese un numero entero: 4
Este numero es par
Ingrese un numero entero: 6
Este numero es par
Ingrese un numero entero: 8
Este numero es par
Ingrese un numero entero: 3
Este numero es impar
>>> 

🔸 En resumen

  • Los ciclos while son estructuras de programación que nos permiten repetir una secuencia de instrucciones o sentencias mientras una condición es verdadera (True). Se detienen cuando la condición es falsa (False).
  • Cuando escribes un ciclo while, debes asegurarte de realizar todas las actualizaciones necesarias en tu código para que el ciclo se detenga en algún momento durante la ejecución del programa.
  • Un ciclo infinito es un ciclo que se ejecuta indefinidamente y solo se detiene con intervención externa o cuando encuentra una sentencia break.
  • Puedes detener un ciclo while infinito con CTRL + C.
  • Puedes generar un ciclo infinito intencionalmente con while True.
  • La sentencia break puede ser usada para detener un ciclo while inmediatamente.

Espero que te haya gustado mi tutorial y que te haya sido de utilidad. Te invito a seguirme en Twitter (@EstefaniaCassN). ⭐