01 Iteración
02 Bucle FOR
03 range() e Iterables
04 ⚡ Desafíos
05 Bucle WHILE
06 Variables de Control
07 for vs. while
08 🔴 Misiones
⏳ Inicializando motor Python…
Unidad 2 · Python · Lesson 1 de 8

Estructuras de Control:
Bucles Iterativos

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.

for variable in iterable:
    # Bloque que se repite por cada elemento
    print(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 planetas
planetas = ["Mercurio", "Venus", "Tierra", "Marte"]

for planeta in planetas:
    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:
VueltaValor de planeta¿Qué imprime?
"Mercurio"Mercurio
"Venus"Venus
"Tierra"Tierra
"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?
for x in ["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 = iterable
itr = iter(a)             # convertimos en iterador

print(next(itr))          # foo
print(next(itr))          # bar
print(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 while no fija una cantidad de iteraciones. Establece una condición: mientras sea verdadera, el bloque se sigue ejecutando.

while condició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 = 6
while i < 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ónii < 9Acción
6TrueImprime 6, i→7
7TrueImprime 7, i→8
8TrueImprime 8, i→9
9False🛑 Bucle termina
🎯 Comprobación 8 — Condición del while
¿Qué imprime el siguiente código?
n = 1
while n < 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 = True
contador = 0

while continuar:
    print("Iteración", contador)
    contador += 1
    if contador == 5:
        continuar = False   # ← esto detiene el bucle
Iteracióncontadorcontinuar¿continua == True?
10TrueTrue
21TrueTrue
32TrueTrue
43TrueTrue
54TrueTrue
65False🛑 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 = 0

while True:
    print("Iteración", contador)
    contador += 1
    if contador == 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
while True:
    print("Iteración")
    c += 1
    if c == 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ísticaforwhile
Cantidad de iteracionesConocida de antemanoPuede ser desconocida
Basado enColección / range()Condición True/False
Riesgo de bucle infinitoMuy bajoPosible si no se actualiza la condición
Variable de control manualNo necesariaGeneralmente necesaria
Cuándo pararAl terminar el iterableCuando 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.