Lecciones del módulo (1/4)
Bucles for y range
El bucle for en Python se usa para iterar sobre una secuencia de elementos:
una lista, una cadena, un rango, un diccionario... cualquier cosa que sea "iterable".
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !El patrón es siempre el mismo: for <variable> in <iterable>: seguido del
bloque indentado que se ejecutará una vez por cada elemento.
range(...): generación de intervalos enteros
range produce una secuencia perezosa (lazy) de enteros. Tres formas:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8 (step)
range(5, 0, -1) # 5, 4, 3, 2, 1 (negative step)range es exclusivo en el extremo derecho, al igual que slice. Es un objeto perezoso:
no asigna memoria para todos los números, los produce uno a la vez.
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)Iterar con un índice: enumerate
Cuando necesitas el elemento y su índice juntos, usa enumerate:
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate produce pares (index, value) que asignamos directamente a dos
variables mediante desempaquetado de tuplas (tuple unpacking).
Iterar dos secuencias en paralelo: zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip se detiene en la secuencia más corta.
range() y la pereza de Python
En Python, la función range() no asigna una lista real en memoria: devuelve un generador perezoso (lazy generator) que produce números uno a la vez a medida que se solicitan (por ejemplo, en un bucle for). Esto permite iterar sobre millones de enteros sin inflar la RAM. Para inspeccionar los valores de un rango como una lista, puedes convertirlo explícitamente con list(range(5)).
Pruébalo tú
Calcula la suma de los números del 1 al 100 (inclusive) usando un bucle for sobre range(...), asigna la suma a `total` y evalúala.
Mostrar pista
range(1, 101) genera 1, 2, ..., 100 (exclusivo en la derecha).
Solución disponible después de 3 intentos
Ejercicio de repaso
Dada la lista `words = ['uno', 'due', 'tre']`, construye una lista `pairs` de cadenas como '0:uno', '1:due', '2:tre' usando enumerate. Evalúa `pairs`.
Mostrar pista
enumerate(words) devuelve (index, value) en cada iteración.
Solución disponible después de 3 intentos
Desafío adicional
Calcula la suma de todos los números pares del 2 al 20 inclusive usando un bucle `for` sobre un `range`. Guarda la suma final en `even_sum` y evalúala.
Mostrar pista
Usa range(2, 21, 2) para iterar solo sobre enteros pares del 2 al 20.
Solución disponible después de 3 intentos