Volver al índiceBucle for

En esta lección se tratan los bucles for:


El bucle 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


Contadores y acumuladores

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.

Acumulador

Este es un ejemplo de programa con acumulador:

suma = 0
for i in range(1, 11):
  suma = suma + i
print "La suma de los números de 1 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).

Contador

Este es un ejemplo de programa con contador:

cuenta = 0
for i in range(1, 1001):
  if i % 7 == 0:
    cuenta = cuenta + 1
print "Desde 1 hasta 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


Bucles anidados

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
Autor: Bartolomé Sintes Marco
Última modificación de esta página: 24 de mayo de 2012

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.