Cómo funcionan los bucles en Python

Desde programacion.net, esperamos que esta serie de iniciación a Python te esté gustando tanto o más, como a nosotros hacerla. Solo recordarte que el objetivo de esta serie es enseñarte de una manera suave, los principales conceptos que necesitas aprender con el fin de avanzar en tu viaje de iniciación a Python.

¿Recuerdas el día en el que tenías que regar 10 flores? ¿O cuando tuviste que llenar 20 vasos de agua? Estabas realizando la misma tarea para cada flor o para cada vaso de agua. Tal repetición se denomina bucle en la programación.

Para que veas la importancia de los bucles, solo decirte que imagines que debes desarrollar un programa que debe imprimir la misma declaración 100.000 veces. ¿Te atreverías a repetir esa declaración 100.000 veces, de forma manual? Yo desde luego que no, y doy por sentado que tú tampoco. Estoy seguro de que tienes cosas mucho más importantes que hacer. Por lo tanto, en eso reside la belleza de bucle.

Sin más preámbulos, vamos a ver la forma en la que Python trata los bucles.

Bucle While

En este tipo de iteración, siempre y cuando la prueba se evalúe como true, la declaración o bloque de instrucciones se seguirán ejecutando. Por lo tanto, el flujo ejecutará todas las sentencias dentro del bloque de bucle y si el condicionante del mismo es false, se ejecutarán las siguientes sentencias después del while. Si el condicionante da siempre como resultado true, en ese caso, obtendremos lo que se denomina como un bucle infinito.

La sintaxis general para la instrucción While es muy simple, y luce de la siguiente manera:

while test:      # loop test
    statements   # loop body

¿Recuerdas el término bucle infinito que he mencionado antes? Es decir, el bucle que nunca se detiene ya que el condicionante es siempre true, ¿lo recuerdas? Veamos un ejemplo de un bucle de este tipo:

while 1:
    print 'I'm an infinite loop. Ctrl-C to stop me!'

El valor 1 es otra forma de valor booleano true. Por lo tanto, si escribes while true, será lo mismo que la instrucción While del ejemplo. Como verás, obtendrás infinitas impresiones de declaraciones.

Para terminar el bucle, simplemente presiona Ctrl-C con tu teclado. La siguiente imagen muestra cómo el programa se ejecuta infinitamente y es interrumpido por el atajo de teclado (es decir, el Ctrl-C).

Ahora vamos a proseguir en nuestra hermosa tarea de regar 10 flores con Python. Se haría de la siguiente manera:

flowers = 1
while flowers <= 10:
    print 'Water the flower # ' + str(flowers)
    flowers = flowers + 1

El resultado del programa lo puedes ver en la siguiente captura:

Antes de seguir adelante, quiero aclarar algunos puntos del anterior script de Python. Es posible que te preguntes que es str() y por qué lo hemos usado aquí. La documentación dice que:

Return a string containing a nicely printable representation of an object. For strings, this returns the string itself. The difference with repr(object) is that str(object) does not always attempt to return a string that is acceptable to eval(); its goal is to return a printable string. If no argument is given, returns the empty string, ''.

En otras palabras, str() devuelve una representación imprimible en forma de cadena del objeto que deseemos. Pero, ¿por qué? Vamos a ver que pasaría con el anterior script si no usasemos str().

Traceback (most recent call last):
  File "test.py", line 3, in 
    print 'Water the flower # ' + flowers
TypeError: cannot concatenate 'str' and 'int' objects

Por lo tanto, la cuestión es que un str no se puede concatenar con un int.

Otro punto que quiero mencionar es el uso de flowers = flowers + 1. Si no usamos tal declaración, tendríamos un bucle infinito en el que el valor de las flores siempre sería 1 y, por lo tanto, siempre inferior a 10 (siempre true).

Bucle For

El bucle for es una iteración que recorre los elementos de una secuencia ordenada como listas, diccionarios, tuplas, cadenas, etc.

La sintaxis del bucle for en Python es tal que así:

for var in sequence:
    statement(s)

Explicaré un poco mejor esto. La variable var hace referencia a al variable que se va a recorrer en el bucle. En el momento que dicha variable se complete mediante su recorrido, se saldrá del bucle. Vamos a ver algunos ejemplos de cómo utilizar el bucle for en Python.

languages = ['Arabic', 'English', 'French', 'Spanish']
counter = 0
for lang in languages:
    print 'This language is in the list: ' +  languages[counter]
    counter = counter + 1

¿Qué corre si inicializamos counter=1? En ese caso, obtendrás el error que se muestra a continuación, ya que el índice estará fuera de rango de la lista.

Traceback (most recent call last):
  File "test.py", line 4, in < module >
    print 'This language is in the list: ' +  languages[counter]
IndexError: list index out of range

Pongamos a prueba tus conocimientos. ¿Qué salida tendría este bucle? (recuerda que Python empieza a contar desde cero):

for x in range(1,5):
    print x

Sentencias utilizadas en bucles for y while

Las subsecciones de más abajo hacen referencia a ciertas sentencias que se suelen utilizar en bucles:

break

La sentencia break obliga al bucle a termina, y la ejecución del programa continúa en la siguiente sentencia. Puedes ver un ejemplo del uso de break más abajo.

numbers = [1,2,3,4,5,6,7,8,9,10]
value = 1
while value in numbers:
    if value == 5:
        break
    print 'I'm # ' + str(value)
    value = value + 1
  
print 'Sorry, I had to quit the loop when the value became 5'

continue

Esta sentencia devuelve la ejecución al inicio del bucle, ignorando cualquier sentencia que haya en el propio bucle. Vamos a ver el código:

numbers = [1,2,3,4,5,6,7,8,9,10]
value = 1
while value in numbers:
    if value < 5:
        print 'I'm # ' + str(value)
        value = value + 1
        continue
        print 'I'm in the if-condition, why are you ignoring me?!'
    elif value == 5:
        break
 
print ('I have reached the last statement in the program and need to exit')

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP