← CC2005

Estructuras de Repetición For

Semestre 02, 2026

El problema de repetir n veces

  • En el ciclo while la repetición depende de una condición.
  • A veces se sabe exactamente cuántas veces hay que repetir.
  • Para ese caso existe una estructura hecha a la medida.

Del 1 al 10 con while


x = 1

while x <= 10:
    print(x)
    x = x + 1
Lo importante

Funciona, pero hay que inicializar, evaluar y actualizar a mano. Son tres responsabilidades repartidas en tres líneas distintas, y olvidar la última produce un ciclo infinito.

La solución

El ciclo for fue diseñado exactamente para este caso.

El número de repeticiones se conoce de antemano.
La variable de control se gestiona sola.
El código es más corto y más fácil de leer.
No hay riesgo de ciclo infinito al recorrer un range.

El ciclo for

Definición

El ciclo for repite un bloque de código una vez por cada valor de una secuencia. La variable de control toma cada valor automáticamente en cada iteración.


for variable in secuencia:
    # bloque de código

Las tres partes de un for

1La variable de control
  • Toma el valor de cada elemento de la secuencia, sin que el programador la actualice.
2La secuencia
  • Un range, una lista, un string o cualquier otro recorrido de valores.
3El bloque
  • Las líneas indentadas que se ejecutan una vez por cada valor de la secuencia.

Recorrer, no contar

  • En otros lenguajes el for cuenta números.
  • En Python el for recorre los elementos de una secuencia, en el orden en que aparecen.
  • Contar del 1 al 10 es solo un caso particular, donde la secuencia la genera range.

Diferencia con while

Característicawhilefor
Cuándo se usaCantidad desconocidaCantidad conocida
Variable de controlManualAutomática
Condición de paradaLa escribe el programadorLa define la secuencia
Riesgo de ciclo infinitoSíNo con range

La función range

Definición

range genera una secuencia de números enteros. Es la forma más común de controlar cuántas veces se repite un for.

Se puede llamar de tres formas, según cuánta información se le dé.

Las tres firmas

1range(fin)
  • Arranca en cero y avanza de uno en uno.
2range(inicio, fin)
  • Arranca donde se le indique y avanza de uno en uno.
3range(inicio, fin, paso)
  • Arranca donde se le indique y avanza de paso en paso.

Range

Las tres formas comparten una regla.El fin nunca se incluye.

Atención

Esta es la fuente número uno de errores al empezar con for.

range con un argumento

range(fin)

01234565 valoresinicio 0fin
entra en la secuencia el fin, queda fuera no lo genera el range
Lo importante

El inicio es cero y el paso es uno aunque no se escriban. Lo único que hay que decir es dónde parar.

range con un argumento

Recorrer cinco valores empezando desde cero.


for i in range(5):
    print(i)

0
1
2
3
4
Cuántas vueltas da

Exactamente cinco, con la variable tomando los valores de 0 a 4. Es la forma más corta de repetir algo una cantidad conocida de veces.

range con dos argumentos

range(inicio, fin)

01234567896 valoresiniciofin
entra en la secuencia el fin, queda fuera no lo genera el range
Lo importante

Ahora el inicio es explícito. El fin se comporta igual que antes, así que el último valor de la secuencia es el anterior.

range con dos argumentos

Recorrer los valores del 2 al 7.


for i in range(2, 8):
    print(i)

2
3
4
5
6
7
Cuántas vueltas da

La cantidad de valores es la resta del fin menos el inicio. Aquí ocho menos dos da seis vueltas.

range con tres argumentos

range(inicio, fin, paso)

012345678910+3+3+3iniciofin
entra en la secuencia el fin, queda fuera no lo genera el range
Lo importante

El paso dice de cuánto es cada salto. El recorrido avanza 1, 4, 7 y el siguiente salto ya se pasaría del fin.

range con tres argumentos

Avanzar de tres en tres desde el 1.


for i in range(1, 10, 3):
    print(i)

1
4
7
Lo importante

El fin marca hasta dónde se puede llegar, no un valor que la secuencia deba alcanzar. Con paso 3 nunca cae justo en 10, y aun así el ciclo termina bien.

El paso puede ser negativo

range(10, 0, -2)

012345678910-2-2-2-2-2iniciofin
Lo importante

Con paso negativo la secuencia va hacia atrás y el inicio es mayor que el fin. El cero tampoco entra, por eso el último valor es 2.

El paso debe apuntar hacia el fin

Secuencia vacía


range(10, 1, 1)

Secuencia correcta


range(10, 1, -1)
Consecuencia

Si el paso se aleja del fin, la secuencia queda vacía y el ciclo no da ni una vuelta. No hay mensaje de error, el programa simplemente no hace nada.

Las tres firmas en una tabla

ExpresiónSecuencia generada
range(5)0, 1, 2, 3, 4
range(2, 8)2, 3, 4, 5, 6, 7
range(1, 10, 3)1, 4, 7
range(10, 0, -2)10, 8, 6, 4, 2
range(1, 1)vacía, el ciclo no se ejecuta

range no construye la lista

  • range no guarda todos los números en memoria.
  • Solo recuerda el inicio, el fin y el paso.
  • Calcula cada valor en el momento en que el ciclo lo pide.
Consecuencia

range(1, 1000000) ocupa la misma memoria que range(1, 5).

Contador básico

Imprimir los números del 1 al 5.


for x in range(1, 6):
    print("El valor de x es:", x)
Lo importante

Todo el control del ciclo cabe en la primera línea. No hay inicialización antes ni actualización adentro.

Tabla de ejecución

IteraciónxPantalla
11El valor de x es: 1
22El valor de x es: 2
33El valor de x es: 3
44El valor de x es: 4
55El valor de x es: 5

El ciclo termina solo cuando la secuencia se agota.

Suma acumulada

Sumar todos los números del 1 al 100.


total = 0

for numero in range(1, 101):
    total = total + numero

print("La suma es:", total)

total = 0

for numero in range(1, 101):
    total = total + numero

print("La suma es:", total)
total = 0

El acumulador se crea antes del ciclo y arranca en cero, porque todavía no se ha sumado nada.


total = 0

for numero in range(1, 101):
    total = total + numero

print("La suma es:", total)
for numero in range(1, 101):

La secuencia va del 1 al 100. El fin se escribe 101 justamente porque el último valor queda fuera. El ciclo da cien vueltas exactas.


total = 0

for numero in range(1, 101):
    total = total + numero

print("La suma es:", total)
total = total + numero

El patrón acumulador. La variable toma su propio valor anterior y le agrega el dato de esta vuelta. Así se arrastra un resultado de una iteración a la siguiente.


total = 0

for numero in range(1, 101):
    total = total + numero

print("La suma es:", total)
print("La suma es:", total)

El resultado se imprime fuera del ciclo, con la suma ya completa. La salida es 5050. Si esta línea estuviera indentada, el programa mostraría cien resultados parciales.

Cuenta regresiva

Contar desde 10 hasta 1 y mostrar el despegue.


for i in range(10, 0, -1):
    print(i)

print("¡Despegue!")

Salida del programa


10
9
8
...
1
¡Despegue!
Con paso negativo la secuencia va hacia atrás.
El fin también queda fuera, por eso el 0 no aparece.
El código después del for se ejecuta al terminar el ciclo.

Tabla de multiplicar

Mostrar la tabla del 7.


numero = 7

for i in range(1, 11):
    resultado = numero * i
    print(numero, "x", i, "=", resultado)

Salida del programa


7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70
El valor de numero no cambia durante el ciclo.
Lo único que cambia en cada vuelta es i.

Iteración sobre una lista


frutas = ["manzana", "naranja", "uva", "mango"]

for fruta in frutas:
    print("Fruta:", fruta)
Resultado

Se imprime una línea por cada fruta de la lista, en el mismo orden en que fueron escritas.

Análisis del ejemplo

No se necesita range.
La variable toma el valor de cada elemento.
El ciclo da tantas vueltas como elementos haya.
Las listas se estudian a fondo más adelante.

Iteración sobre un string

Un string también es una secuencia, así que el for lo recorre letra por letra.


for letra in "Python":
    print(letra)
Resultado

Se imprimen seis líneas, una por cada carácter de la palabra.

Promedio de calificaciones

Calcular el promedio de 5 notas ingresadas por el usuario.


total = 0

for i in range(1, 6):
    nota = float(input("Ingresa la nota " + str(i) + ": "))
    total = total + nota

promedio = total / 5
print("Promedio:", promedio)

Análisis del ejemplo

El ciclo se repite exactamente 5 veces.
En cada vuelta pide una nota y la acumula.
La variable i sirve para numerar la pregunta en pantalla.
El promedio se calcula al salir del ciclo.

Ciclos anidados

Definición

Un for puede contener otro for dentro de su bloque. Por cada vuelta del ciclo externo, el interno se ejecuta completo.


for tabla in range(1, 4):
    for i in range(1, 4):
        print(tabla, "x", i, "=", tabla * i)
    print("---")

for tabla in range(1, 4):
    for i in range(1, 4):
        print(tabla, "x", i, "=", tabla * i)
    print("---")
for tabla in range(1, 4):

El ciclo externo da tres vueltas, una por cada tabla. Su variable se queda quieta mientras el ciclo interno trabaja.


for tabla in range(1, 4):
    for i in range(1, 4):
        print(tabla, "x", i, "=", tabla * i)
    print("---")
for i in range(1, 4):

El ciclo interno arranca desde el principio en cada vuelta del externo. Su variable debe llamarse distinto para no pisar la otra.


for tabla in range(1, 4):
    for i in range(1, 4):
        print(tabla, "x", i, "=", tabla * i)
    print("---")
print(tabla, "x", i, "=", tabla * i)

Esta línea pertenece al ciclo interno y se ejecuta nueve veces en total, tres por cada tabla.


for tabla in range(1, 4):
    for i in range(1, 4):
        print(tabla, "x", i, "=", tabla * i)
    print("---")
print("---")

La indentación la deja fuera del ciclo interno pero dentro del externo, así que se imprime tres veces, una al cerrar cada tabla.

La instrucción continue

Definición

continue salta a la siguiente iteración sin terminar el ciclo. Las líneas que quedan debajo de él se omiten en esa vuelta.

Imprimir solo los pares


for x in range(1, 11):
    if x % 2 != 0:
        continue
    print(x)
Resultado

Se imprimen 2, 4, 6, 8 y 10. Cuando el número es impar el continue corta esa vuelta y el for pasa al siguiente valor del range.

Cuándo se usa continue

  • Cuando se quiere omitir ciertos valores sin interrumpir el ciclo.
  • Cuando se filtran elementos dentro de una secuencia.
  • El ciclo sigue recorriendo la secuencia completa de todas formas.

La instrucción break

Postura del curso

break detiene un ciclo de forma abrupta desde adentro. Existe en Python, pero en este curso no se usará.

El problema con break

Cuando se usa break, el ciclo ya no se controla por su secuencia.

  • La lógica de terminación queda escondida dentro del bloque.
  • El range deja de decir la verdad sobre cuántas vueltas se dan.
  • El flujo del programa es más difícil de seguir.

Siempre hay una alternativa

En lugar de esto


for i in range(1, 11):
    if i == 5:
        break
    print(i)

Se escribe esto


for i in range(1, 5):
    print(i)
Ventaja

La condición de parada queda explícita en el range. El ciclo es claro, predecible y fácil de leer.

Confundir el límite del range


for i in range(10):
    print(i)
Consecuencia

Imprime del 0 al 9, no del 0 al 10. El valor final nunca entra en la secuencia.

Modificar la variable de control


for i in range(1, 6):
    print(i)
    i = i + 10
Consecuencia

La última línea no tiene efecto sobre el ciclo. En la siguiente vuelta la variable vuelve a tomar el valor que le toca del range.

Usar el paso equivocado


for i in range(10, 1, 1):
    print(i)
Consecuencia

No imprime nada. El paso es positivo pero el inicio es mayor que el fin, así que la secuencia queda vacía. Lo correcto es range(10, 1, -1).

Recorrer un número


for i in 5:
    print(i)
Consecuencia

El programa falla con TypeError porque un número no es una secuencia. Lo correcto es recorrer range(5).

Olvidar la indentación


for i in range(1, 4):
    print(i)
print("Fin")
Consecuencia

La última línea está fuera del ciclo y se ejecuta una sola vez. La indentación es lo único que marca qué pertenece al bloque.

Casos de uso

SituaciónEstructura
Repetir exactamente n vecesfor
Recorrer una lista o un stringfor
Repetir mientras una condiciónwhile
Validar entrada del usuariowhile
No se sabe cuántas repeticioneswhile

Buenas prácticas

Usar range cuando se conocen los límites exactos.
No modificar la variable de control dentro del ciclo.
Usar nombres descriptivos para la variable de control.
Preferir for cuando el número de repeticiones es fijo.

Dos preguntas antes de escribir el ciclo

1¿Sé exactamente cuántas veces se repite?
2¿Recorro una secuencia de valores?

Si alguna respuesta es sí, el ciclo que se necesita es un for.