Pensamiento Computacional (090) · Unidad 3 — Estructuras de control
Ciclo for y range
for repite una vez por cada elemento de algo. range fabrica esos elementos, y arranca en 0 y termina antes del número que le des.
La explicación
Recorrer algo
print(letra)
Imprime s, o, l. La variable letra toma
cada valor, uno por vuelta. Su nombre lo elegís vos.
range fabrica números
range(2, 7) → 2, 3, 4, 5, 6
range(0, 10, 3) → 0, 3, 6, 9
range(5, 0, -1) → 5, 4, 3, 2, 1
range(5) no incluye el 5;
da cinco números, del 0 al 4. Por eso range(n) sirve tan bien para recorrer algo de
n elementos: los índices van justo de 0 a n−1.Y de ahí sale el nombre del error más famoso de programación: el off-by-one, equivocarse por uno. Si tu ciclo procesa un elemento de más o de menos, empezá mirando el range.
Dos formas de recorrer
print(c)
for i in range(len(palabra)): # las posiciones
print(i, palabra[i])
La primera es más limpia y es la que conviene casi siempre. La segunda sólo cuando necesitás saber en qué posición estás.
Acumular
El patrón más usado de todos: una variable afuera que se va sumando adentro.
for n in range(1, 6):
total = total + n # adentro, una vez por vuelta
print(total) # 15
Un range que no da vueltas
range(3, 3) está vacío: el ciclo no se ejecuta ni una vez. No es un error, y
explica esos casos raros donde "el for no hace nada".
Escribir una función que reciba un número n y devuelva la suma de todos los pares desde 1 hasta n.
Las tres decisiones. Qué recorro, qué acumulo, y cuándo sumo.
total = 0 # acumulador, afuera
for i in range(1, n + 1): # el n+1 es para que n entre
if i % 2 == 0: # sólo los pares
total = total + i
return total
Por qué n + 1. Como range termina antes del segundo número,
range(1, n) dejaría afuera justo a n. Con n + 1 el
último valor que entra es n. Es el off-by-one en su forma más común.
Probemos con n = 10: suma 2 + 4 + 6 + 8 + 10 = 30.
range, que arranca en 2 y va de a 2:
total = 0
for i in range(2, n + 1, 2):
total = total + i
return total
if. Cuando puedas expresar la condición
en el propio range, sale mejor.
Control: con n = 2 tiene que dar 2, y con n = 1 tiene que dar 0. Los casos chicos son los que descubren los off-by-one.
Dónde se cae la mayoría
- Esperar que range(5) llegue hasta el 5. Llega hasta el 4.
- Poner el acumulador adentro del ciclo: se reinicia en cada vuelta y el resultado queda mal sin avisar.
- Usar range(len(x)) cuando alcanzaba con recorrer los elementos directo.
Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.
Practicar Ciclo for y range →