Apariencia
📙 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) yzip()(dos listas a la vez). - Cortar y saltar iteraciones con
breakycontinue.
📖 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 uvaAnatomí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().
| Forma | Genera | Ejemplo → list(...) |
|---|---|---|
range(n) | de 0 a n-1 | range(3) → [0, 1, 2] |
range(a, b) | de a a b-1 | range(2, 6) → [2, 3, 4, 5] |
range(a, b, paso) | de a a b-1 saltando paso | range(0, 10, 2) → [0, 2, 4, 6, 8] |
range(a, b, -1) | hacia atrás | range(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 incluyeb:range(3)es0,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ásicofor 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
| Palabra | Qué hace |
|---|---|
break | Sale del bucle inmediatamente |
continue | Salta 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)💡
breakes "ya encontré lo que buscaba, no sigas".continuees "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 app | El for sirve para |
|---|---|
| To-Do / Agenda | crear un CTkLabel/CTkFrame por cada ítem de la lista |
| Formulario con varios campos | recorrer los CTkEntry y validarlos/limpiarlos todos |
| Rellenar un desplegable | construir la lista de values de un CTkOptionMenu |
| Un teclado/calculadora | crear 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. Confor, 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 hacerfor 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. huevosEjercicio 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 detieneEjercicio 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. El5no 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.
breaksale del bucle por completo;continuesalta 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
- La lista que recorres → Clase 01 · Listas
- Cuando no sabes cuántas vueltas dar → Clase 03 · while
- Forma corta de crear listas con
for→ Clase 07 · List comprehensions
➡️ Siguiente
Clase 03 · Bucles while — repetir mientras se cumpla una condición.