bucle for y la función range()

El bucle while se mantiene en bucle mientras su condición es True (que es la razón de su nombre «mientras«), pero ¿qué pasa si quieres ejecutar un bloque de código sólo un cierto número de veces? Puedes hacerlo con una sentencia de bucle for y la función range().

En código, una sentencia for se parece a for i in range(5): e incluye lo siguiente:

  • La palabra clave for
  • Un nombre de variable (en nuestro caso la nombramos i)
  • La palabra clave in
  • Una llamada al método range() con un máximo de tres enteros pasados
  • Dos puntos
  • A partir de la siguiente línea, un bloque de código indentado (llamado cláusula for)

Vamos a crear un nuevo programa llamado fiveTimes.py para ayudarte a ver un bucle for en acción.

print('My name is')
for i in range(5):
    print('Jimmy Five Times (' + str(i) + ')')

Puedes ver la ejecución de este programa en https://autbor.com/fivetimesfor/. El código de la cláusula del bucle for se ejecuta cinco veces. La primera vez que se ejecuta, la variable i se pone a 0. La llamada print() de la cláusula imprimirá Jimmy Five Times (0). Después de que Python termine una iteración a través de todo el código dentro de la cláusula del bucle for, la ejecución vuelve al principio del bucle, y la sentencia for incrementa i en uno. Por eso range(5) da como resultado cinco iteraciones a través de la cláusula osea el código dentro del bucle for, con i siendo puesto a 0, luego a 1, luego a 2, luego a 3 y luego a 4. La variable i irá hasta, pero no incluirá, el entero pasado a range().

Cuando se ejecuta este programa, debería imprimir Jimmy Five Times seguido del valor de i cinco veces antes de salir del bucle for.

My name is
Jimmy Five Times (0)
Jimmy Five Times (1)
Jimmy Five Times (2)
Jimmy Five Times (3)
Jimmy Five Times (4)
Diagrama de flujo de fiveTimes.py

Como otro ejemplo de bucle for, considera esta historia sobre el matemático Carl Friedrich Gauss. Cuando Gauss era un niño, un profesor quería dar a la clase algo de trabajo. El profesor les dijo que sumaran todos los números del 0 al 100. Al joven Gauss se le ocurrió un ingenioso truco para averiguar la respuesta en pocos segundos, pero tú puedes escribir un programa en Python con un bucle for que haga este cálculo por ti.

➊ total = 0
➋ for num in range(101):
    ➌ total = total + num
➍ print(total)  

El resultado debería ser 5.050. Cuando el programa se inicia por primera vez, la variable total se pone a 0 ➊. El bucle for ➋ ejecuta entonces total = total + num100 veces. Para cuando el bucle haya terminado sus 100 iteraciones, todos los enteros de 0 a 100 se habrán añadido al total. En este punto, el total se imprime en la pantalla ➍. Incluso en los ordenadores más lentos, este programa tarda menos de un segundo en completarse.

(El joven Gauss descubrió una forma de resolver el problema en segundos. Hay 50 pares de números que suman 101: 1 + 100, 2 + 99, 3 + 98, y así sucesivamente, hasta 50 + 51. Como 50 × 101 es 5.050, la suma de todos los números del 0 al 100 es 5.050. Un niño inteligente).

Un equivalente bucle while al bucle for

Puedes usar un bucle while para hacer lo mismo que un bucle for; los bucles for son más concisos. Reescribamos fiveTimes.py para usar un bucle while equivalente a un bucle for.

print('My name is')
i = 0
while i < 5:
    print('Jimmy Five Times (' + str(i) + ')')
    i = i + 1

Puedes ver la ejecución de este programa en https://autbor.com/fivetimeswhile/. Si ejecutas este programa, la salida debería ser la misma que la del programa fiveTimes.py, que utiliza un bucle for.

Explicación y ejemplo de la función range() y argumentos

Algunas funciones pueden ser llamadas con múltiples argumentos separados por una coma, y range() es una de ellas. Esto le permite cambiar el entero pasado a range() para seguir cualquier secuencia de enteros, incluyendo el comienzo en un número distinto de cero.

for i in range(12, 16):
    print(i)

El primer argumento será donde comienza la variable del bucle for, y el segundo argumento será «hasta donde», pero sin incluir el número en el que hay que detenerse (16 incluye hasta el 15).

12
13
14
15

La función range() también puede ser llamada con tres argumentos. Los dos primeros argumentos serán los valores de inicio y parada, y el tercero será el argumento paso. El paso es la cantidad en que se incrementa la variable después de cada iteración.

for i in range(0, 10, 2):
    print(i)

Así, al llamar a range(0, 10, 2) se contará de cero a ocho en intervalos de dos.

0
2
4
6
8

La función range() es flexible en la secuencia de números que produce para los bucles for. Por ejemplo, puedes incluso usar un número negativo para el argumento del paso para hacer que el bucle for cuente hacia abajo en lugar de hacia arriba.

for i in range(5, -1, -1):
    print(i)

Este bucle for tendría la siguiente salida:

5
4
3
2
1
0

La ejecución de un bucle for para imprimir i con range(5, -1, -1) debería imprimir desde cinco hasta cero.

Sentencias break y continue en un bucle for

También puede utilizar las sentencias break y continue dentro de los bucles for. La sentencia continue continuará hasta el siguiente valor del contador del bucle for, como si la ejecución del programa hubiera llegado al final del bucle y volviera al principio. De hecho, puede utilizar las sentencias continue y break sólo dentro de los bucles while y for. Si intentas usar estas sentencias en otro lugar, Python te dará un error.

Deja una respuesta