Iteraciones (bucles) en Python: bucles FOR (con listas, range, contadores, acumuladores, diccionarios) y bucles WHILE.
Un bucle es una estructura de control que repite un bloque de instrucciones un número limitado de veces (siempre que la programación sea correcta). Mostramos a continuación varias formas de implementar bucles en el lenguaje de programación Python.
Bucle FOR en Python
Un bucle for repite el bloque de instrucciones un número determinado de veces, indicado en su construcción. El bloque de instrucciones que se repite se llama cuerpo del bucle y cada repetición se llama iteración.
La sintaxis del bucle for en Python es la siguiente:
1 2 |
for variable in elemento_iterable: cuerpo_bucle |
El elemento iterable puede ser una cadena, una lista, un range, un diccionario, etc.
Un ejemplo:
1 2 3 4 |
print("Iniciamos un bucle for con una lista de números") for i in [1, 2, 5, 12,10, 3]: print(f"Iterando en elemento {i}") print("Finalizó el bucle for") |
Si compilamos el código Python anterior, devolverá:
Iniciamos un bucle for con una lista de números
Iterando en elemento 1
Iterando en elemento 2
Iterando en elemento 5
Iterando en elemento 12
Iterando en elemento 10
Iterando en elemento 3
Finalizó el bucle for
En este caso, el bucle for se repite 6 veces, dado que es el número de elementos que tiene la lista.
En Python no es necesario definir la variable de control del bucle for, en el caso anterior «i».
Otro ejemplo de bucle for, ahora con una lista con cadenas de texto:
1 2 3 4 |
print("Iniciamos un bucle for con una lista de cadenas de texto") for i in ["España", "Francia", "Portugal", "Italia", "Alemania"]: print(f"Iterando en elemento {i}") print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for con una lista de cadenas de texto
Iterando en elemento España
Iterando en elemento Francia
Iterando en elemento Portugal
Iterando en elemento Italia
Iterando en elemento Alemania
Finalizó el bucle for
Python admite también iterar por todos los caracteres de una cadena de texto. Por ejemplo:
1 2 3 4 |
print("Iniciamos un bucle for con un texto y su iteración por cada carácter") for i in "Por carácter": print(f"Iterando en elemento {i}") print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for con un texto y su iteración por cada carácter
Iterando en elemento P
Iterando en elemento o
Iterando en elemento r
Iterando en elemento
Iterando en elemento c
Iterando en elemento a
Iterando en elemento r
Iterando en elemento á
Iterando en elemento c
Iterando en elemento t
Iterando en elemento e
Iterando en elemento r
Finalizó el bucle for
El típico bucle de un contador incremental, en Python, se puede realizar usando range. Un ejemplo:
1 2 3 4 |
print("Iniciamos un bucle for con range") for i in range(4): print(f"Iterando en elemento {i}") print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for con range
Iterando en elemento 0
Iterando en elemento 1
Iterando en elemento 2
Iterando en elemento 3
Finalizó el bucle for
Por supuesto, podremos obtener el valor del número de veces a iterar solicitándolo por consola al usuario. Por ejemplo:
1 2 3 4 5 |
numVeces = int(input("¿Cuántas veces quiere que sume 4 + 9? ")) print("Iniciamos un bucle for con range y valor pedido por consola") for i in range(numVeces): print(f"La suma de 4 + 9 es: {4+9}") print("Finalizó el bucle for") |
¿Cuántas veces quiere que sume 4 + 9? 3
Iniciamos un bucle for con range y valor pedido por consola
La suma de 4 + 9 es: 13
La suma de 4 + 9 es: 13
La suma de 4 + 9 es: 13
Finalizó el bucle for
El uso de contadores y acumuladores en los bucles es muy habitual. Un ejemplo del uso de un contador en un bucle for podría ser:
1 2 3 4 5 6 |
print("Iniciamos un bucle for con range y contamos las veces que se ejecuta") contador = 0 for i in range(3): print(f"Iterando con {i}") contador += 1 print(f"Finalizó el bucle for, se ejecutó {contador} veces") |
Devolverá:
Iniciamos un bucle for con range y contamos las veces que se ejecuta
Iterando con 0
Iterando con 1
Iterando con 2
Finalizó el bucle for, se ejecutó 3 veces
Y un ejemplo de un acumulador, en un bucle for:
1 2 3 4 5 6 |
print("Iniciamos un bucle for con range y sumamos su iterador") suma = 0 for i in range(4): print(f"Iterando con {i}") suma += i print(f"Finalizó el bucle for, suma de sus iteradores: {suma}") |
Iniciamos un bucle for con range y sumamos su iterador
Iterando con 0
Iterando con 1
Iterando con 2
Iterando con 3
Finalizó el bucle for, suma de sus iteradores: 6
Con Python, también podremos establecer el mínimo, máximo e incremento en un bucle for. Por ejemplo, para iterar desde el 4 al 8 de dos en dos:
1 2 3 4 |
print("Iniciamos un bucle for con range, mínimo, máximo, intervalo") for i in range(4, 8, 2): print(f"Iterando con {i}") print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for con range, mínimo, máximo, intervalo
Iterando con 4
Iterando con 6
Finalizó el bucle for
Podemos comprobar que, en este caso, el incremento no es en uno, sino en dos.
Si el elemento actual es irrelevante (no lo necesitamos), podemos «suprimirlo» usando «_». Por ejemplo:
1 2 3 4 |
print("Iniciamos un bucle for con range, sin elemento actual (i)") for _ in range(1, 3): print(f"Iterando sin elemento actual") print("Finalizó el bucle for") |
Iniciamos un bucle for con range, sin elemento actual (i)
Iterando sin elemento actual
Iterando sin elemento actual
Finalizó el bucle for
También podremos salir del bucle si lo necesitamos, usando «break». Por ejemplo:
1 2 3 4 5 6 7 |
print("Iniciamos un bucle for con range, mínimo, máximo, intervalo y break para forzar salida") for i in range(2, 8, 1): if i > 5: print(f"Se forzó la finalización del bucle for con break") break print(f"Iterando con {i}") print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for con range, mínimo, máximo, intervalo y break para forzar salida
Iterando con 2
Iterando con 3
Iterando con 4
Iterando con 5
Se forzó la finalización del bucle for con break
Finalizó el bucle for
Podremos comprobar que cuando i es mayor que 5 se sale del bucle for.
También se puede añadir una iteración manual con continue en un bucle for en Python. Por ejemplo:
1 2 3 4 5 6 7 |
print("Iniciamos un bucle for con una lista para mostrar sólo los números pares") numeros = [1, 2, 5, 8, 3, 0, 28, 11] for i in numeros: if i % 2 != 0: continue print("{0} es par".format(i)) print("Finalizó el bucle for") |
El ejemplo anterior mostrará por pantalla sólo los números que sean pares. Si un número no es par, pasará a la siguiente iteración con continue. El ejemplo anterior devolverá:
Iniciamos un bucle for con una lista para mostrar sólo los números pares
2 es par
8 es par
0 es par
28 es par
Finalizó el bucle for
Python también admite una estructura for especial: for … else. En este caso, si se ejecuta una sentencia break en el bucle for se ejecutará lo que haya en el else, sino se ejecuta un break no se ejecutará lo que haya en el else. Por ejemplo:
1 2 3 4 5 6 7 8 9 |
print("Iniciamos un bucle for..else con range, mínimo, máximo, intervalo y break para forzar salida y que continúe por el else") for i in range(2, 8, 1): if i > 5: print(f"Se forzó la finalización del bucle for con break") break print(f"Iterando con {i}") else: print("Se salió del bucle anterior con break") print("Finalizó el bucle for..else") |
En el ejemplo anterior, cuando i > 5 se ejecutará un break, por lo que a continuación se ejecutará lo que haya en el else. Devolviendo:
Iniciamos un bucle for..else con range, mínimo, máximo, intervalo y break para forzar salida y que continúe por el else
Iterando con 2
Iterando con 3
Iterando con 4
Iterando con 5
Se forzó la finalización del bucle for con break
Finalizó el bucle for..else
Con for en Python podremos recorrer diccionarios y sus índices, por ejemplo:
1 2 3 4 5 6 |
print("Iniciamos un bucle for recorriendo un diccionario y mostrando su índice") paises = {"España": 34, "Francia": 33, "Italia": 39, "Portugal": 351, "Alemania": 49, "Andorra": 376, "Bélgica": 32} for i in paises: print(i) print("Finalizó el bucle for") |
Devolverá:
Iniciamos un bucle for recorriendo un diccionario y mostrando su índice
España
Francia
Italia
Portugal
Alemania
Andorra
Bélgica
Finalizó el bucle for
Por supuesto, también podemos mostrar sus valores:
1 2 3 4 5 6 |
print("Iniciamos un bucle for recorriendo un diccionario y mostrando sus valores") paises = {"España": 34, "Francia": 33, "Italia": 39, "Portugal": 351, "Alemania": 49, "Andorra": 376, "Bélgica": 32} for i in paises.values(): print(i) print("Finalizó el bucle for") |
Devolviendo:
Iniciamos un bucle for recorriendo un diccionario y mostrando sus valores
34
33
39
351
49
376
32
Finalizó el bucle for
Otros ejemplos de bucle for para recorrer listas:
1 2 3 4 5 |
colores = ["Verde", "Azul", "Rojo", "Amarillo", "Naranja", "Marrón", "Negro"] print("Inicio del bucle for recorriendo elementos de lista") for color in colores: print (color) print("Fin del bucle for") |
Devolverá:
Inicio del bucle for recorriendo elmentos de lista
Verde
Azul
Rojo
Amarillo
Naranja
Marrón
Negro
Fin del bucle for
La lista anterior podríamos recorrerla de esta otra forma:
1 2 3 4 5 |
colores = ["Verde", "Azul", "Rojo", "Amarillo", "Naranja", "Marrón", "Negro"] print("Inicio del bucle for recorriendo elementos de lista con range") for i in range(0, len(colores)): print (colores[i]) print("Fin del bucle for") |
Bucle WHILE en Python
Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (mientras tenga valor True). La sintaxis del bucle while en Python es la siguiente:
1 2 |
while condición: cuerpo_bucle |
La variable o variables que se usen para la condición se llamar variables de control. Estas variables deben definirse antes del bucle while y modificarse en el cuerpo del bucle.
Por ejemplo, un bucle while que muestra tres números del 0 al 2:
1 2 3 4 5 6 |
i = 0 print("Inicio del bucle while") while i <= 2: print(f"Iterando en {i}") i += 1 print("Fin del bucle while") |
Devolverá:
Inicio del bucle while
Iterando en 0
Iterando en 1
Iterando en 2
Fin del bucle while
Como podemos comprobar en el ejemplo, la variable i se define con un valor antes del bucle y se le establece otro valor en el bucle, para que no sea infinito. Si ejecutáramos el ejemplo anterior sin la sentencia i += 1, se produciría un bucle infinito, el bucle no acabaría nunca.
El ejemplo anterior podría haberse programado de igual forma con un bucle for. Pero la ventaja de usar un bucle while es que la variable de control se puede modificar con mayor flexibilidad, por ejemplo:
1 2 3 4 5 6 7 8 |
i = 2 j = 0 print("Inicio del bucle while") while i <= 260: j += 1 print(f"El valor de la variable de control en la iteración {j}: {i}") i = i * i print("Fin del bucle while") |
Devolverá:
Inicio del bucle while
El valor de la variable de control en la iteración 1: 2
El valor de la variable de control en la iteración 2: 4
El valor de la variable de control en la iteración 3: 16
El valor de la variable de control en la iteración 4: 256
Fin del bucle while
En los bucles while se puede dar el caso de que nunca se acceda al bucle, por ejemplo:
1 2 3 4 5 6 |
i = 0 print("Inicio del bucle while") while i > 0: print(f"Iterando en {i}") i += 1 print("Fin del bucle while") |
En este caso, no entrará en el bucle, por lo que devolverá:
Inicio del bucle while
Fin del bucle while
El bucle while no necesita definir el número de iteraciones antes de empezar, como ocurre con el bucle for. Por ejemplo:
1 2 3 4 5 6 7 8 9 10 |
numeroEntrada = int(input("Introduzca un número: ")) print("Inicio del bucle while") while numeroEntrada <= 0: print("Ha introducido un número negativo o cero, por favor, introduzca un número mayor que cero") numeroEntrada = int(input("Introduzca un número: ")) print(f"Fin del bucle while") print("Continuamos con otro bucle for, con número de repeticiones mayor que cero") for i in range(numeroEntrada): print(f"Iteramos con bucle for, iteración {i}") print(f"Fin del bucle for") |
Si introducimos un número mayor de 0 devolverá:
Introduzca un número: 3
Inicio del bucle while
Fin del bucle while
Continuamos con otro bucle for, con número de repeticiones mayor que cero
Iteramos con bucle for, iteración 0
Iteramos con bucle for, iteración 1
Iteramos con bucle for, iteración 2
Fin del bucle for
En cambio, si introduciremos un número menor o igual a cero, nos mostrará un mensaje y volverá a preguntar un número. Esto se repetirá hasta que introduzcamos un número mayor que cero:
Introduzca un número: -1
Inicio del bucle while
Ha introducido un número negativo o cero, por favor, introduzca un número mayor que cero
Introduzca un número: