Estructuras de control

Bucle for


Los ciclos for son una estructura de control repetitiva que permite ejecutar uno o varios bloques de código un número determinado de veces, teniendo un mayor control sobre las iteraciones. En Python, el ciclo for necesita un valor inicial y un valor final. Además, opcionalmente puede especificarse el tamaño del paso entre cada repetición.

En resumen, un ciclo for es ideal cuando sabemos cuántas veces debe repetirse una acción, ya que permite definir un rango de valores por los que iterar. A continuación, veamos un ejemplo sencillo donde el programa imprime los números del 1 al 100:

for i in range(1, 101):
    print(i)

En Python se puede iterar prácticamente todo, como cadenas, listas, tuplas y diccionarios. Por ejemplo:

for letra in "Python":
    print(letra)

En este caso, la variable letra toma el valor de cada carácter de la cadena. Más adelante explicaremos con mayor profundidad qué significa que algo sea “iterable” o un “iterador”.


Iterables e iteradores:

Para entender completamente cómo funciona un for en Python, debemos comprender los conceptos de iterables e iteradores.

  • Iterable: Es un objeto que puede ser recorrido elemento por elemento (como listas, tuplas, cadenas o diccionarios).
  • Iterador: Es un objeto que permite recorrer un iterable, manteniendo una referencia al elemento actual y proporcionando el siguiente con la función next().

Podemos saber si un objeto es iterable usando la función isinstance() junto con el módulo collections.abc:

from collections.abc import Iterable

print(isinstance("cadena", Iterable))  # True
print(isinstance(123, Iterable))       # False

También podemos obtener un iterador usando la función iter():

mi_lista = [10, 20, 30]
it = iter(mi_lista)
print(next(it))  # 10
print(next(it))  # 20
print(next(it))  # 30

Si se intenta avanzar más allá del final, se lanza un error StopIteration.


Ejemplos de uso de for:

Iterar una cadena en orden inverso:
for letra in "Python"[::-1]:
    print(letra)
Saltar elementos:
for letra in "Python"[::2]:
    print(letra)
List Comprehension (compresión de listas):
cuadrados = [x**2 for x in range(10)]
print(cuadrados)

Uso de range():

Una forma muy común de usar for es con range(), que genera una secuencia de números. Puede recibir hasta tres parámetros:

range(inicio, fin, paso)
Ejemplos:
for i in range(5):  # De 0 a 4
    print(i)
for i in range(5, 20, 2):  # De 5 a 19, de dos en dos
    print(i)
for i in range(10, 0, -1):  # Cuenta regresiva
    print(i)

range() no crea una lista, sino un objeto especial que se puede convertir explícitamente en lista si lo deseamos:

list(range(5))  # [0, 1, 2, 3, 4]

Control de flujo en bucles: break, continue y pass con for

Python proporciona instrucciones especiales para modificar el flujo de ejecución dentro de un bucle:

Instrucción break:

La instrucción break interrumpe completamente la ejecución del ciclo, terminándolo en cuanto se cumple cierta condición

Ejemplo: salir del ciclo al llegar a un valor específico
for numero in range(10):
    if numero == 5:
        break
    print(numero)

En este caso, el ciclo se detiene cuando numero es igual a 5, sin imprimirlo ni continuar con las siguientes iteraciones.

Instrucción continue:

La instrucción continue omite el resto del código dentro del ciclo en la iteración actual y pasa directamente a la siguiente

Ejemplo: saltarse un valor específico
for numero in range(10):
    if numero == 5:
        continue
    print(numero)

Aquí se omite el número 5, pero el ciclo continúa normalmente con los demás valores.

Instrucción pass:

La instrucción pass se utiliza cuando se requiere una instrucción sintácticamente válida, pero que no haga nada. Puede servir como marcador de posición para código que será escrito más adelante, o cuando queremos que no ocurra ninguna acción ante una condición específica.

Ejemplo: no hacer nada si se cumple una condición
for numero in range(5):
    if numero == 2:
        pass
    print(numero)

Aunque el número 2 cumple la condición del if, pass no afecta el ciclo y simplemente continúa.


¿Cuándo usar while y cuándo for?

  • Usa while cuando no sabes cuántas veces se ejecutará el bucle.
  • Usa for cuando sí sabes cuántas veces debe ejecutarse.