Skip to content

📙 Clase 02 — Bucles for

Fase 1 · Estructuras de datos y bucles ⬅️ Volver al índice de clases

🎯 Qué aprendí

  • Recorrer una lista (o cualquier colección) con for.
  • Generar secuencias de números con range().
  • Herramientas pro: enumerate() (posición + valor) y zip() (dos listas a la vez).
  • Cortar y saltar iteraciones con break y continue.

📖 PARTE TEÓRICA

🔁 1. La idea: "para cada elemento, haz esto"

Un for recorre una colección y ejecuta el mismo bloque una vez por elemento. Es la forma de "hacer algo con cada cosa de una lista" sin repetir código a mano.

python
frutas = ["manzana", "pera", "uva"]
for fruta in frutas:          # 'fruta' toma cada valor, uno por vuelta
    print("Me gusta la", fruta)
# Me gusta la manzana
# Me gusta la pera
# Me gusta la uva

Anatomía:

for   fruta   in   frutas :
 │      │      │      │
 │      │      │      └── la colección a recorrer
 │      │      └───────── palabra clave
 │      └──────────────── variable que toma cada valor (la eliges tú)
 └─────────────────────── inicia el bucle
      (el bloque indentado se repite por cada elemento)

💡 La indentación (4 espacios) define qué está dentro del bucle. Es obligatoria en Python: no hay llaves {}.

🔢 2. range(): generar números

Cuando quieres repetir algo N veces o generar una secuencia de números, usa range().

FormaGeneraEjemplo → list(...)
range(n)de 0 a n-1range(3)[0, 1, 2]
range(a, b)de a a b-1range(2, 6)[2, 3, 4, 5]
range(a, b, paso)de a a b-1 saltando pasorange(0, 10, 2)[0, 2, 4, 6, 8]
range(a, b, -1)hacia atrásrange(5, 0, -1)[5, 4, 3, 2, 1]
python
for i in range(3):        # 0, 1, 2  ← repetir 3 veces
    print("Vuelta", i)

for n in range(0, 10, 2):  # 0, 2, 4, 6, 8  ← pares
    print(n)

⚠️ range(b) no incluye b: range(3) es 0,1,2 (tres números), no llega al 3. Se dice que el final es "exclusivo".

🏷️ 3. enumerate(): posición y valor

Si además del valor necesitas su número de posición, enumerate te da los dos juntos — mucho mejor que llevar un contador a mano.

python
frutas = ["manzana", "pera", "uva"]
for i, fruta in enumerate(frutas, start=1):   # start=1 → empezar a numerar en 1
    print(f"{i}. {fruta}")
# 1. manzana
# 2. pera
# 3. uva

🧪 Tip de entrevista: "¿Cómo recorres una lista con su índice?" → enumerate(). Evita el clásico for i in range(len(lista)) (funciona, pero es menos pythónico).

🤝 4. zip(): recorrer dos listas a la vez

zip empareja elemento a elemento dos (o más) listas. Ideal cuando tienes datos "en paralelo".

python
nombres = ["Ana", "Luis"]
edades  = [30, 25]
for nombre, edad in zip(nombres, edades):
    print(f"{nombre} tiene {edad} años")
# Ana tiene 30 años
# Luis tiene 25 años

➕ 5. Acumular: sumar/contar mientras recorres

Un patrón muy común: una variable "acumuladora" fuera del bucle que vas modificando dentro.

python
precios = [10, 20, 30]
total = 0                 # acumulador
for p in precios:
    total += p            # total = total + p
print("Total:", total)    # 60

# Atajo cuando solo quieres sumar:
print(sum(precios))       # 60

✂️ 6. break y continue: cortar y saltar

PalabraQué hace
breakSale del bucle inmediatamente
continueSalta a la siguiente vuelta (ignora el resto de esta)
python
for n in range(10):
    if n == 3:
        break            # se detiene al llegar al 3  → imprime 0, 1, 2
    print(n)

for n in range(5):
    if n % 2 == 0:
        continue         # salta los pares  → imprime 1, 3
    print(n)

💡 break es "ya encontré lo que buscaba, no sigas". continue es "esta no me sirve, pasa a la siguiente".

🔤 7. También recorre textos (y más)

Un for recorre cualquier cosa "iterable": listas, textos, diccionarios, range

python
for letra in "Py":
    print(letra)   # P  luego  y

🖥️ EN TU APP DE ESCRITORIO

for es como pintas cosas dinámicas en la GUI: recorres tu lista de datos y creas un widget por cada elemento. Es el segundo paso del patrón de la Clase 01 (modificar lista → pintar, y "pintar" es un for).

python
tareas = ["Comprar pan", "Estudiar Python", "Llamar a Ana"]

def pintar_lista():
    # (aquí normalmente primero borras los widgets anteriores)
    for i, tarea in enumerate(tareas):
        fila = ctk.CTkLabel(contenedor, text=f"{i+1}. {tarea}")
        fila.pack(anchor="w", padx=10, pady=2)

Otros usos reales:

En tu appEl for sirve para
To-Do / Agendacrear un CTkLabel/CTkFrame por cada ítem de la lista
Formulario con varios camposrecorrer los CTkEntry y validarlos/limpiarlos todos
Rellenar un desplegableconstruir la lista de values de un CTkOptionMenu
Un teclado/calculadoracrear botones en una cuadrícula con range()
python
# Limpiar todos los campos de un formulario de un tirón:
campos = [entry_nombre, entry_email, entry_tel]
for campo in campos:
    campo.delete(0, "end")      # CTkEntry.delete borra el contenido

💡 Sin for, tendrías que escribir el mismo código una vez por widget. Con for, escribes el patrón una vez y funciona para 3 o para 300 elementos.


🗄️ CON BASE DE DATOS (caso de uso)

Leer de SQLite y pintarlo en pantalla es un solo for sobre el resultado del SELECT:

python
filas = con.execute("SELECT nombre, tel FROM contactos").fetchall()
for nombre, tel in filas:                     # desempaqueta cada fila (como zip)
    ctk.CTkLabel(lista, text=f"{nombre}{tel}").pack()

🗄️ Nota: cada fila viene como una tupla (nombre, tel) — por eso puedes hacer for nombre, tel in filas. Las tuplas son la Clase 05.


🏋️ EJERCICIOS CON SOLUCIÓN

Ejercicio 1 — Lista numerada

Dada compras = ["pan", "leche", "huevos"], imprímela como una lista numerada empezando en 1.

Ver solución
python
compras = ["pan", "leche", "huevos"]
for i, item in enumerate(compras, start=1):
    print(f"{i}. {item}")
# 1. pan
# 2. leche
# 3. huevos

Ejercicio 2 — Tabla del 5

Imprime la tabla de multiplicar del 5, del 5×1 al 5×10, usando range().

Ver solución
python
for n in range(1, 11):        # 1..10 (el 11 es exclusivo)
    print(f"5 x {n} = {5*n}")

Ejercicio 3 — Buscar y parar

En numeros = [4, 8, 15, 16, 23, 42], imprime los números hasta encontrar el 16 (inclusive) y luego detente.

Ver solución
python
numeros = [4, 8, 15, 16, 23, 42]
for n in numeros:
    print(n)
    if n == 16:
        break          # 4, 8, 15, 16  y se detiene

Ejercicio 4 — Emparejar

Con productos = ["pan", "leche"] y precios = [3, 5], imprime "pan cuesta 3" y "leche cuesta 5".

Ver solución
python
productos = ["pan", "leche"]
precios   = [3, 5]
for prod, precio in zip(productos, precios):
    print(f"{prod} cuesta {precio}")

❓ Preguntas y respuestas (autoevaluación)

1. ¿Cuántos números genera range(5) y cuáles son?

Cinco: 0, 1, 2, 3, 4. El 5 no se incluye (final exclusivo).

2. ¿Qué usas para recorrer una lista con su índice: range(len(...)) o enumerate()?

enumerate(). Es más limpio y da posición + valor a la vez.

3. Diferencia entre break y continue.

break sale del bucle por completo; continue salta solo la vuelta actual y sigue con la siguiente.

4. ¿Un for puede recorrer un texto?

Sí: recorre letra por letra. Recorre cualquier iterable (listas, textos, range, diccionarios…).


📎 Apuntes relacionados

➡️ Siguiente

Clase 03 · Bucles while — repetir mientras se cumpla una condición.