Revista Tecnología

Introducción a Python: Ciclos

Publicado el 17 mayo 2018 por Technodyan

Este post es parte del Curso de introducción a Python 3:

  1. Introducción a Python: Porque programar con Python
  2. Instalación de Python 3 y IDLE
  3. Primer programa: “Hola Mundo”
  4. Tipos de datos en Python
  5. Asignación y uso de variables
  6. Valores booleanos
  7. Colecciones de datos en Python: Listas y Tuplas
  8. Condicionales: If, else, elif
  9. Ciclos en Python
  10. Definición y uso de funciones en Python
  11. Importación y uso de módulos en Python
  12. Uso de strings en Python

Introducción

Los ciclos repetitivos o bucles son operaciones secuenciales que nos permiten repetir ciertas operaciones sobre valores concretos que varian con cada vuelta del ciclo, lo que genera una iteración.

En Python existen dos tipos de bucles:

  • While
  • For

Ciclos

Ciclos while

Los ciclos while en Python son aquellos que se ejecutan mientras la condición que especifiquemos sea igual a True. Su sintaxis es la siguiente:

while EXPRESION_BOOLEANA:
    CODIGO_A_EJECUTAR

Por ejemplo, el siguiente código que imprimirá los números del 1 al 10:

Al igual que con las estructuras de control, deberemos indentar el código después de while para indicar que se ejecutará en el ciclo. El ciclo terminará de ejecutarse cuando la condición especificada deje de ser True, en este caso, cuando el valor de n sea igual a 10.

Ejemplo donde imprimimos una lista por completo aprovechando la función len() para conocer su tamaño:

Los ciclos while suelen usarse cuando desconocemos la duración exacta del ciclo.

Ciclos for

Los ciclos for, a diferencia de los ciclos while, tienen una duración determinada y una sintaxis diferente que nos permite asignar una variable temporal que cambiará de valor con cada iteración. Los podemos implementar de la siguiente manera:

for VAR in OBJETO_ITERABLE:
    CODIGO_A_EJECUTAR

Donde VAR es la variable temporal y OBJETO_ITERABLE cualquier objeto que podamos recorrer, como una lista, una tupla o un rango.

Por ejemplo, para imprimir una serie de números del 1 al 10:

La función range() genera un rango de numeros determinado entre un limite inferior y un limite superior, como el limite superior es el tope del rango, el rango termina en el número anterior, en este caso, el rango generado termina en el número 10.

Dentro del ciclo for la variable temporal numero toma el valor de cada uno de los números dentro de range(), por lo que su valor cambia desde 1 hasta 10 según la iteración del ciclo. Cuando el ciclo termina, la variable numero deja de existir.

Un ejemplo de un ciclo for aplicado a una lista:

Podemos realizar lo mismo utilizando indices, gracias a la función len():

Ciclos infinitos

While

Una situación imprescindible de los ciclos while es que la condición que los mantiene ejecutandose deje de ser verdadera en algún punto.

En el código anterior el ciclo puede terminar ya que el valor de n cambia dentro del cuerpo del ciclo, por lo que en algún momento el valor de n es igual a 10 y la condición deja de ser True. Sin embargo, si eliminamos la línea 3 del programa, entonces, además de que imprimiriamos el mismo valor una y otra vez, el ciclo sería infinito, ya que n nunca cambiaría su valor y por lo tanto la condición siempre sería verdadera.

Es importante que el elemento que permite que la condición inicial sea verdadera pueda cambiar para evitar caer en ciclos inifnitos.

Si por el contrario, lo que buscamos por alguna razón es crear un ciclo While infinito, la manera más facil de lograrlo es utilizando directamente el booleano True.

For

Aunque los ciclos for suelen tener una cantidad definida de iteraciones desde que los iniciamos, esto depende de que el objeto iterable que le indiquemos sea finito, algo que siempre será así si utilizamos tuplas y rangos, pero que puede cambiar si estamos recorriendo una lista, como se ve en el siguiente ciclo for infinito:

En este caso el tamaño de la lista recorrida nunca deja de crecer, por lo que nunca se llegará a una última iteración.

Break y continue

Python nos provee de dos herramientas de uso exclusivo dentro de ciclos:

  • break
  • continue

El uso de la palabra reservada break nos permite interrumpir la ejecución de un ciclo en cualquier momento, algo útil para salir de ciclos infinitos:

Por ejemplo, el siguiente ciclo que será interrumpido en la quinta iteración:

O el siguiente ciclo, que terminará al encontrar un número par:

Mientras que el uso de continue procede a la siguiente iteración del ciclo, ignorando el código siguiente. El siguiente programa recorrerá toda la lista y la función print() siempre imprimirá la variable numero, pero gracias a continue sólo se imprimirán valores impares:

Ciclos anidados

Al igual que ocurre con las estructuras condicionales, podemos anidar ciclos dentro de otros ciclos.

Por ejemplo, el siguiente ciclo que imprime un número cada vez que se imprimen todas las vocales:

La salida del programa será la siguiente:

Numero 1
A 1
E 1
I 1
O 1
U 1
Numero 2
A 2
E 2
I 2
O 2
U 2
Numero 3
A 3
E 3
I 3
O 3
U 3

Como puedes ver, el ciclo anidado se ejecuta por completo cada vez que el ciclo principal da una vuelta, algo a tener en cuenta cuando utilices ciclos anidados ya que pueden aumentar considerablemente la cantidad de operaciones que realices en tu programa, afectando su rendimiento.

Otro ejemplo utilizando while:

Salida:

1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
10 100

En este código, ambos ciclos aumentan unitariamente el valor de suma1 y suma2, respectivamente, pero al realizarse esta operación sobre suma2 dentro de un ciclo anidado, su valor termina siendo 10 veces mayor que el de suma1.

Conclusión

Aunque se suele utilizar ciclos for cuando sabemos cuando terminara un ciclo de ejecutarse y los ciclos while cuando no tenemos esta certeza, practicamente cualquier operación puede realizarse con cualquiera de los dos ciclos, por lo que dependerá de ti elegir el que prefieras y sea más adecuado para la ocasión, siempre teniendo en cuenta la legibilidad del código.

Los ciclos nos ofrecen varias herramientas para utilizarlos, como break y continue, que te pueden servir para complementar tus ciclos y asegurarte de que siempre lleguen a un fin, sin embargo, si en tus ciclos dependes solamente de break para tener la certeza de que llegaran a un fin, deberías pensar de nuevo el planteamiento del ciclo. De igual forma ocurre con los ciclos anidados; es importante tomarte tu tiempo para analizar tu código y preguntarte si no podrías resolver el problema minimizando el número de operaciones.

En la siguiente entrada te mostraré la definición de funciones en Python, y como encapsular piezas de código para reutilizarlas cuantas veces quieras.


Volver a la Portada de Logo Paperblog