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)

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 + num
➌ 100 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.