Bucle forEn esta lección se tratan los bucles for:
En general, un bucle es una estructura de control que repite un bloque de instrucciones. Un bucle for es un bucle que repite el bloque de instrucciones un número prederminado de veces. El bloque de instrucciones que se repite se suele llamar cuerpo del bucle y cada repetición se suele llamar iteración.
La sintaxis de un bucle for es la siguiente:
for variable in lista (o cadena) : cuerpo del bucle
El cuerpo del bucle se ejecuta tantas veces como elementos tenga la lista (o caracteres tenga la cadena). Por ejemplo, el programa
for i in [0,1,2,3,4] : print "Hola",
produce el resultado siguiente:
Hola Hola Hola Hola Hola
Este programa también daría el mismo resultado
for i in "amigo" : print "Hola",
Si la lista está vacía, el bucle no se ejecuta ninguna vez:
for i in [] : print "Hola",
produce el resultado siguiente (nada):
La lista se puede a su vez generar con una función range(). El programa anterior se puede escribir así:
for i in range(5): print "Hola",
Cambiando el argumento de la función range(), el programa saludará muchas más veces.
for i in range(20): print "Hola",
Ahora el programa produce el resultado siguiente:
Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola
Un bucle for se limita a repetir el bloque de instrucciones, pero además, en cada iteración, la variable va tomando cada uno de los valores de la lista. Por ejemplo, el programa:
for i in range(5): print "Hola. Ahora i vale",i,"y su cuadrado", i**2
produce el resultado siguiente:
Hola. Ahora i vale 0 y su cuadrado 0
Hola. Ahora i vale 1 y su cuadrado 1
Hola. Ahora i vale 2 y su cuadrado 4
Hola. Ahora i vale 3 y su cuadrado 9
Hola. Ahora i vale 4 y su cuadrado 16
La lista puede contener cualquier tipo de elementos, no sólo números. El bucle se repetirá siempre tantas veces como elementos tenga la lista y la variable irá tomando los valores de uno en uno. Por ejemplo, el programa:
for i in ['Alba', 'Benito', 'Carmen', 27]: print "Hola. Ahora i vale",i
produce el resultado siguiente:
Hola. Ahora i vale Alba
Hola. Ahora i vale Benito
Hola. Ahora i vale Carmen
Hola. Ahora i vale 27
Volver al principio de la página
En muchos programas se necesitan variables que cuenten cuántas veces ha ocurrido algo (contadores) o que acumulen valores (acumuladores). Las situaciones pueden ser muy diversas, por lo que simplemente hay aquí un par de ejemplos para mostrar la idea.
Este es un ejemplo de programa con acumulador:
suma = 0 for i in range(10): suma = suma + i print "La suma de los números de 0 a 10 es", suma
En cada iteración, el valor de i se añade a la variable suma. Es imprescindible definir el valor inicial del acumulador antes del bucle (en este caso, el acumulador es la variable suma y debe valer 0).
Este es un ejemplo de programa con contador:
cuenta = 0 for i in range(1000): if i % 7 == 0: cuenta = cuenta + 1 print "Entre 0 y 1000 hay", cuenta, "múltiplos de 7"
En cada iteración, el programa comprueba si i es múltiplo de 7. Si lo es, la variable cuenta aumenta una unidad. Es imprescindible definir el valor inicial del acumulador antes del bucle (en este caso, el acumulador es la variable cuenta y debe valer 0).
Volver al principio de la página
Un bucle anidado es un bucle situado en el cuerpo de otro bucle. Por ejemplo el programa:
for i in range(3): for j in range(2): print "i vale", i, "y j vale", j
escribiría:
i vale 0 y j vale 0
i vale 0 y j vale 1
i vale 1 y j vale 0
i vale 1 y j vale 1
i vale 2 y j vale 0
i vale 2 y j vale 1
En este caso, el bucle externo (el controlado por i) se ejecuta 3 veces y y el bucle interno (el controlado por j) se ejecuta dos veces por cada valor de i. Por ello la instrucción print se ejecuta en total 6 veces (3 veces que se ejecuta el bucle externo x 2 veces que se ejecuta cada vez el bucle interno = 6 veces).
Se pueden anidar tanto bucles como se desee.
La variable del bucle externo puede controlar el bucle interno. Por ejemplo, el programa:
for i in range(4): for j in range(i): print "i vale", i, "y j vale", j
escribiría:
i vale 1 y j vale 0
i vale 2 y j vale 0
i vale 2 y j vale 1
i vale 3 y j vale 0
i vale 3 y j vale 1
i vale 3 y j vale 2
La variable i toma los valores de 0 a 3 y la variable j toma los valores de 0 a i, por lo que cada vez el bucle interno se ejecuta un número diferente de veces:
En Python se puede utilizar la misma variable en los dos bucles anidados porque Python las trata como si fueran independientes. El programa siguiente:
for i in range(3): print "i (externa) vale", i for i in range(2): print "i (interna) vale", i
escribiría:
i (externa) vale 0
i (interna) vale 0
i (interna) vale 1
i (externa) vale 1
i (interna) vale 0
i (interna) vale 1
i (externa) vale 2
i (interna) vale 0
i (interna) vale 1
Cuando se está ejecutando el bucle interno, la variable del bucle externo es inaccesible, pero cuando se vuelve al bucle externo, la variable vuelve a ser accesible con su valor anterior.
De todas formas, este uso puede dar lugar a errores y no es habitual en otros lenguajes de programación, por lo que se aconseja utilizar siempre nombres de variables distintas.
Volver al principio de la página
Esta página forma parte del curso "Introducción a la programación con Python" disponible en http://www.mclibre.org
Esta obra está bajo una licencia de Creative
Commons.