Automatizá tareas repetitivas. Dominarás for y while paso a paso con comprobaciones de comprensión al final de cada concepto.
🔄 ¿Qué es la Iteración?
La iteración consiste en ejecutar repetidamente un mismo bloque de código, potencialmente muchas veces. La estructura de programación que permite esta repetición se denomina bucle (o loop).
💡
Dos tipos de iteración en Python:
📌 Iteración Definida (for): El número de repeticiones se especifica explícitamente desde el inicio.
📌 Iteración Indefinida (while): El número de repeticiones no se conoce de antemano; el bloque se ejecuta mientras se cumpla una condición.
🗝️
Analogía: ¿Cuándo usar cada una?
Un bucle for es como revisar todos los cajones de un mueble sabiendo cuántos hay. Un bucle while es como buscar tus llaves: seguís buscando mientras no las encontrés, y te detenés en cuanto aparecen.
🎯 Comprobación 1 — Conceptual
¿Cuántas veces se ejecuta el bloque de código en una iteración definida?
✅ Correcto. En la iteración definida (for) el número de repeticiones queda fijado desde el principio, antes de que el bucle empiece a ejecutarse.
🎯 Comprobación 2 — Aplicación
Un programa debe pedir una contraseña al usuario hasta que ingrese la correcta. No sabemos cuántos intentos erróneos hará. ¿Qué tipo de iteración es más adecuada?
✅ Correcto. Como no sabemos de antemano cuántos intentos erróneos habrá, la cantidad de iteraciones es "indefinida". El while seguirá ejecutándose mientras la contraseña ingresada sea incorrecta.
Lesson 2 de 8
El Bucle for
Iteración definida sobre colecciones de datos.
🎬 Introducción en video
▸ Ceibal STEM — La sintaxis "for elemento in lista"
📦 Estructura del bucle for
En Python, el bucle for itera exclusivamente sobre colecciones (listas, tuplas, cadenas, etc.). En cada vuelta, la variable temporal toma el valor del siguiente elemento.
forvariableiniterable:# Bloque que se repite por cada elementoprint(variable)
📋
Los tres componentes clave:
• iterable — la colección a recorrer (lista, string, range…)
• variable — toma el valor de cada elemento en cada vuelta
• bloque indentado — las instrucciones que se repiten (¡la sangría es obligatoria en Python!)
💻 Ejemplo en acción — ejecutalo vos
Presioná ▶ Ejecutar para ver la salida en vivo:
planetas.py
# Recorrer una lista de planetasplanetas = ["Mercurio", "Venus", "Tierra", "Marte"]
forplanetainplanetas:print(planeta)
🔍
¿Qué está pasando vuelta a vuelta?
La variable planeta es una variable temporal que Python crea automáticamente. En cada vuelta del bucle toma el valor del siguiente elemento de la lista:
Vuelta
Valor de planeta
¿Qué imprime?
1ª
"Mercurio"
Mercurio
2ª
"Venus"
Venus
3ª
"Tierra"
Tierra
4ª
"Marte"
Marte
🛑 No hay más elementos → el bucle termina automáticamente
💡
Clave: el bucle se repite exactamente 4 veces, una por cada elemento de la lista. No necesitás decirle cuántas veces — Python lo cuenta por vos. El nombre planeta lo elegiste vos; podría llamarse x, p o cualquier cosa — lo importante es que ese mismo nombre es el que usás dentro del bloque.
🎯 Comprobación 3 — Sintaxis
¿Qué imprimirá el siguiente código?
forxin ["A", "B", "C"]: print(x)
✅ Correcto. El bucle itera sobre cada elemento de la lista. En cada vuelta, x toma el valor "A", luego "B", luego "C", imprimiendo uno por línea.
💻 Tu turno
Iterando una lista
Usá un bucle for para recorrer la lista servidores y mostrar cada elemento. Llamá a la variable temporal server.
🔬 Comprobación 4 — Descubrí corriendo código
Copiá el siguiente código en la Consola Libre (botón azul abajo a la derecha), ejecutalo y respondé: ¿cuántas líneas imprime?
▸ Código para probar
for letra in "Hola":
print(letra)
✅ Correcto. ¡Los strings también son iterables! Python recorre cada carácter uno a uno. "Hola" tiene 4 caracteres → 4 líneas de salida.
Lesson 2 (cont.) · 3 de 8
range() e Iterables
Controlá exactamente cuántas veces se repite tu bucle.
🎬 Videos de referencia
▸ Ceibal STEM — Bucle for y función range()
🔢 La función range()
Para repetir un bucle una cantidad exacta de veces sin escribir listas manuales, usamos range(). Devuelve un objeto range (no una lista), pero el for puede recorrerlo directamente.
range(n)
Genera números desde 0 hasta n − 1.
Ejemplo: range(5)
0, 1, 2, 3, 4
range(inicio, fin)
Desde inicio hasta fin − 1.
Ejemplo: range(2, 7)
2, 3, 4, 5, 6
range(inicio, fin, paso)
Salta de paso en paso, de inicio a fin − 1.
Ejemplo: range(1, 10, 2)
1, 3, 5, 7, 9
range(fin, inicio, −paso)
Orden descendente, restando paso en cada vuelta.
Ejemplo: range(10, 1, -2)
10, 8, 6, 4, 2
🎯 Comprobación 5 — range()
¿Cuántas veces se ejecuta el bloque en for i in range(3):?
✅ Correcto.range(3) genera los valores 0, 1, 2 — siempre desde 0 hasta n−1. Por lo tanto el bloque se ejecuta exactamente 3 veces.
🔬 Comprobación 6 — Descubrí corriendo código
Ejecutá este código en la Consola Libre y observá la salida. ¿Qué imprime?
▸ Código para probar
for i in range(10, 1, -3):
print(i)
✅ Correcto. El paso es -3, por lo que baja de a 3: 10 → 7 → 4. El siguiente sería 1, pero range(10, 1, -3) excluye el límite final, así que se detiene en 4.
🔩 Iterables vs. Iteradores
⚙️
ITERABLE — Cualquier objeto que podés recorrer con un for. Es como una caja que contiene datos: listas, tuplas, strings, diccionarios.
ITERADOR — El objeto que controla el proceso, sacando un elemento a la vez. Podés crear uno explícitamente con iter() y avanzar con next(). Cuando no quedan elementos, lanza StopIteration.
a = ["foo", "bar", "baz"] # lista = iterableitr = iter(a) # convertimos en iteradorprint(next(itr)) # fooprint(next(itr)) # barprint(next(itr)) # baz# próximo next() → StopIteration 🤯
🔬 Comprobación 7 — Descubrí corriendo código
Ejecutá este código en la Consola Libre. ¿Qué ocurre si llamás next() una vez más después de agotar el iterador?
▸ Código para probar
nums = [1, 2]
it = iter(nums)
print(next(it))
print(next(it))
print(next(it)) # ← esta línea, ¿qué hace?
✅ Correcto. Cuando un iterador agota sus elementos, cualquier llamada adicional a next() lanza la excepción StopIteration. El bucle for la captura internamente para saber cuándo detenerse.
Lesson 2 (Desafíos) · Tab 04
⚡ Desafíos con el Bucle for
Iteradores, iterables y ejercicios prácticos con el bucle for.
🎬 Video — Desafíos con el bucle for
▸ Ceibal STEM — Desafíos con el bucle for (iteradores e iterables)
🎯 Desafío 1 — Suma de elementos
📋
Consigna: Dado el listado de números numeros = [10, 25, 8, 42, 15], usá un bucle for para recorrer la lista y acumular la suma total en una variable total.
💡 Pista: antes del bucle inicializá total = 0. Dentro del bucle sumá cada número a total. Al final, imprimí el resultado.
⚡ Desafío 1
Sumar todos los elementos de una lista
Completá el código: usá el for para recorrer numeros y sumar cada elemento a total. Ejecutalo para verificar que el resultado es 100.
🎮 Desafío 2 — Récord de Pac-Man
🕹️
Consigna: Tenés una lista de puntajes obtenidos por un jugador en varias partidas de Pac-Man. El récord mundial de Billy Mitchell es 3,333,360 puntos.
Tu tarea: usá un bucle for para sumar todos los puntajes de la lista, y luego imprimí si el total supera o iguala ese récord (True) o no (False).
⚡ Desafío 2
¿Superás el récord de Billy Mitchell?
Acumulá los puntajes con un for y luego comparalos con el récord. Imprimí el total y el resultado de la comparación.
Lessons 3 y 4 de 8
El Bucle while
Iteración condicional: el bloque se ejecuta mientras la condición sea True.
🔄 Estructura del while
A diferencia del for, el bucle whileno fija una cantidad de iteraciones. Establece una condición: mientras sea verdadera, el bloque se sigue ejecutando.
whilecondición:# Instrucciones que se repiten mientras sea True# ⚠️ Debés cambiar algo para que la condición se vuelva False
⚠️
Aspecto fundamental: Las variables en la condición no se actualizan automáticamente. Tenés que hacerlo explícitamente dentro del bucle para evitar un ciclo infinito. Si la condición nunca se vuelve False → bucle infinito.
📊 Ejemplo paso a paso — ejecutalo vos
while_ejemplo.py
i = 6whilei < 9:print(i)
i += 1# sin esta línea → ciclo infinito
Visualizador — contador del while
6
7
8
9 STOP
Cuando el contador llega a 9, la condición (9 < 9) se vuelve False y el bucle termina.
Iteración
i
i < 9
Acción
1ª
6
True
Imprime 6, i→7
2ª
7
True
Imprime 7, i→8
3ª
8
True
Imprime 8, i→9
4ª
9
False
🛑 Bucle termina
🎯 Comprobación 8 — Condición del while
¿Qué imprime el siguiente código?
n = 1 whilen < 4: print(n * 2) n += 1
✅ Correcto. El bucle se ejecuta con n = 1, 2, 3 (condición n < 4). Imprime 1×2=2, 2×2=4, 3×2=6. Cuando n llega a 4 la condición es False y se detiene.
🤔 ¿Por qué imprime 6 si la condición era hasta el 4?
La condición n < 4 controla el valor de n (que llega hasta 3), no el valor que se imprime. Lo que se imprime es n * 2. Cuando n = 3 → 3 × 2 = 6. El "4" de la condición es el límite de iteraciones, no del valor impreso.
🔬 Reto — Cambiá el orden del incrementador
En la Consola Libre probá esta variante donde el n += 1 se pone antes del print y observá cómo cambia la salida:
n = 1
while n < 4:
n += 1 # ← incremento ANTES del print
print(n * 2)
¿El resultado es el mismo? ¿Por qué? Pensalo y verificalo ejecutando el código.
💻 Tu turno
Variables de control — energía decreciente
El bucle while ya está armado, pero le falta la línea que resta energía. Completalo y ejecutalo. Sin esa línea, sería un bucle infinito.
🔬 Comprobación 9 — Descubrí corriendo código
Ejecutá este código en la Consola Libre. ¿Qué pasa si la condición del while SIEMPRE es True?
▸ Código seguro para probar (tiene break incorporado)
contador = 0
while True: # condición siempre True
contador += 1
if contador == 5:
print("Llegué a 5, me detengo con break")
break
✅ Correcto.while True es un ciclo infinito intencional. Se ejecuta para siempre a menos que un break (o excepción) lo detenga. En este ejemplo, el break se activa cuando el contador llega a 5.
Lessons 5 y 6 de 8
Variables de Control y while True
Técnicas para controlar cuándo se detiene un bucle.
🚦 Variable booleana de control
Una técnica común es usar una variable booleana que comienza en True y se cambia a False cuando queremos detener el bucle.
continuar = Truecontador = 0whilecontinuar:print("Iteración", contador)
contador += 1ifcontador == 5:continuar = False# ← esto detiene el bucle
Iteración
contador
continuar
¿continua == True?
1
0
True
True
2
1
True
True
3
2
True
True
4
3
True
True
5
4
True
True
6
5
False
🛑 False → STOP
💥 La instrucción break
break sale del bucle inmediatamente sin importar si la condición sigue siendo verdadera. Es otra forma de detener un ciclo desde adentro.
contador = 0whileTrue:print("Iteración", contador)
contador += 1ifcontador == 5:break# ← sale del bucle instantáneamente
♾️ Ciclo infinito con while True
⚠️
while True: genera un ciclo que nunca termina por sí solo. Se detiene únicamente con un break interno o con CTRL+C. Es un patrón válido cuando se quiere que el programa espere un evento sin saber cuánto tardará.
🎯 Comprobación 10 — break y control
¿Cuántas veces imprime "Iteración" el siguiente bucle antes de detenerse?
c = 0 whileTrue: print("Iteración") c += 1 ifc == 3: break
✅ Correcto. El print se ejecuta antes del break. Cuando c llega a 3, primero imprime "Iteración" (tercera vez), luego entra al if y ejecuta el break. Total: 3 impresiones.
🔬 Comprobación 11 — Descubrí corriendo código
Ejecutá este código en la Consola Libre. ¿Qué diferencia observás entre usar variable booleana de control vs. break?
▸ Versión A — variable booleana
continuar = True
c = 0
while continuar:
c += 1
if c == 3:
continuar = False
print("c =", c) # ← nota dónde está este print
▸ Versión B — break
c = 0
while True:
c += 1
if c == 3:
break
print("c =", c) # ← nota dónde está este print
¿Cuántas veces imprime cada versión?
✅ Correcto. En la Versión A, cuando c==3 se cambia la variable pero el print todavía se ejecuta (están al mismo nivel). En la Versión B, el break interrumpe el bucle inmediatamente y el print no se alcanza. Es una diferencia de comportamiento importante.
Lesson 7 de 8
for vs. while
¿Cuándo conviene usar cada estructura?
⚖️ Comparación directa
🔑
for — usás cuando sabés de antemano cuántas veces iterar o cuando tenés una colección a recorrer completa. Revisará todos los elementos, incluso si ya encontraste lo que buscabas.
while — usás cuando no sabés cuántas iteraciones se necesitan y querés detenerte en cuanto se cumpla una condición. Más eficiente cuando la condición puede cumplirse antes de recorrer todo.
Característica
for
while
Cantidad de iteraciones
Conocida de antemano
Puede ser desconocida
Basado en
Colección / range()
Condición True/False
Riesgo de bucle infinito
Muy bajo
Posible si no se actualiza la condición
Variable de control manual
No necesaria
Generalmente necesaria
Cuándo parar
Al terminar el iterable
Cuando la condición sea False
🎯 Comprobación 12 — Elegir la estructura
Querés imprimir cada elemento de una lista de compras de 5 ítems. ¿Qué es más apropiado?
✅ Correcto. Cuando se conoce la colección a recorrer y queremos visitarla completa, el for es más claro y directo. El while requeriría gestionar un índice o variable de control manualmente, lo que añade complejidad sin beneficio.
🎯 Comprobación 13 — Caso de uso
Un juego necesita generar números aleatorios hasta que salga un 6. No sabemos cuántos intentos llevará. ¿Qué bucle usar?
✅ Correcto. Este es el caso de uso ideal para while: no sabemos cuántos intentos serán necesarios. El bucle continúa mientras el número generado sea distinto de 6. Cuando sale el 6, la condición se vuelve False y termina.
🔬 Comprobación 14 — Reescribir con el otro bucle
Ejecutá en la Consola Libre ambas versiones del mismo programa. Observá que producen la misma salida:
▸ Versión con FOR
frutas = ["manzana", "pera", "uva"]
for fruta in frutas:
print(fruta)
▸ Versión equivalente con WHILE
frutas = ["manzana", "pera", "uva"]
i = 0
while i < len(frutas):
print(frutas[i])
i += 1
¿Por qué el for es preferible en este caso?
✅ Correcto. Aunque técnicamente ambos funcionan igual, el for es más Pythónico: no necesitás crear la variable i, actualizarla, ni calcular len(). El código es más corto, más legible y con menos posibilidad de errores.
Laboratorio Final
🔴 Misiones Hacker
Agente, aplicá todo lo aprendido. Cuatro fases. Sin soluciones: el código lo escribís vos.
📡 Misión 01
Escaneo de Puertos con FOR
Usá un bucle for con range() para imprimir los puertos del 0 al 4. Cada línea debe mostrar: Puerto: X.
🔓 Misión 02
Fuerza Bruta con WHILE
Configurá un bucle while que imprima "Atacando firewall..." exactamente 3 veces, usando un contador que se incremente en cada vuelta.
💥 Misión 03 — Guiada
Break — Detectar la trampa y abortar
Tenés una lista de archivos para descargar. Pero uno de ellos es una TRAMPA. Tu tarea es recorrerla con un for y, cuando encuentres el archivo "TRAMPA", imprimir un mensaje de alerta y detener el bucle con break para que los archivos siguientes no se descarguen.
🗺️
Guía paso a paso:
1. Usá for arch in archivos: para recorrer la lista
2. Dentro del for, con un if verificá si arch == "TRAMPA"
3. Si es la trampa: imprimí el mensaje de alerta y ejecutá break
4. Si no es la trampa: imprimí "Descargando: " + arch
🎯 Resultado esperado: debería descargar "docs" y "passwords", luego detectar la trampa y parar. "claves" nunca se descarga.
🧠 Misión 04 — Guiada
Suma de puntajes con FOR
El sistema registró los puntajes de un agente en 5 operaciones. Tu tarea es calcular el total acumulado y verificar si superó el umbral mínimo de 350 puntos para aprobar la misión.
🗺️
Guía paso a paso:
1. Antes del bucle, inicializá total = 0
2. Usá for puntaje in puntajes:
3. Dentro del for, acumulá: total = total + puntaje (o total += puntaje)
4. Después del bucle imprimí el total: print("Total:", total)
5. Verificá si superó 350 con: print("Misión aprobada:", total >= 350)
💻 Consola Libre▲
Probá cualquier código Python aquí sin afectar las misiones.