¿Qué es un bucle y cuándo usarlo?
Un bucle (loop) es una estructura que repite un bloque de código varias veces. Se usa cuando necesitas: contar (1 a N), recorrer elementos (una lista, un texto), repetir hasta que ocurra algo (un usuario acierta, llega un dato válido, se cumple una condición), o automatizar tareas repetitivas sin copiar y pegar código.
En Python, los bucles más comunes son for (iteración controlada por una secuencia o un rango) y while (repetición controlada por una condición).
Bucle for: repetición por conteo e iteración
Iterar con range() (conteo controlado)
range() genera una secuencia de números. Es ideal para “repetir N veces” o para recorrer índices.
range(fin): empieza en 0 y llega hastafin - 1range(inicio, fin): empieza eninicioy llega hastafin - 1range(inicio, fin, paso): avanza depasoenpaso(puede ser negativo)
# Repetir 5 veces (0,1,2,3,4) for i in range(5): print("Vuelta:", i) # Contar del 1 al 5 (1,2,3,4,5) for n in range(1, 6): print(n) # Contar de 10 a 0 de 2 en 2 (10,8,6,4,2,0) for n in range(10, -1, -2): print(n)Iterar sobre elementos (sin índices)
Muchas veces no necesitas el índice: solo quieres cada elemento. Python permite iterar directamente sobre listas, tuplas, cadenas, etc.
nombres = ["Ana", "Luis", "Marta"] for nombre in nombres: print("Hola", nombre) palabra = "python" for letra in palabra: print(letra)Iterar con índice y elemento: enumerate()
Si quieres el índice y el valor a la vez, usa enumerate(). Evita manejar el contador “a mano”.
Continúa en nuestra aplicación.
Podrás escuchar el audiolibro con la pantalla apagada, recibir un certificado gratuito para este curso y además tener acceso a otros 5.000 cursos online gratuitos.
O continúa leyendo más abajo...Descargar la aplicación
productos = ["pan", "leche", "café"] for i, producto in enumerate(productos): print(i, "-", producto) # Empezar el índice en 1 for i, producto in enumerate(productos, start=1): print(i, ")", producto)Iterar en paralelo: zip()
Para recorrer dos (o más) listas al mismo tiempo, usa zip(). Se detiene al llegar a la lista más corta.
nombres = ["Ana", "Luis", "Marta"] edades = [20, 31, 27] for nombre, edad in zip(nombres, edades): print(nombre, "tiene", edad)Bucle while: repetición controlada por condición
while repite mientras una condición sea verdadera. Es útil cuando no sabes cuántas vueltas habrá: por ejemplo, seguir intentando hasta acertar, procesar datos hasta que se acaben, o repetir hasta que un valor alcance un umbral.
contador = 0 while contador < 3: print("Intento", contador) contador += 1Evitar bucles infinitos
Un riesgo típico de while es olvidar actualizar la variable que cambia la condición. Asegúrate de que en algún punto la condición pueda volverse falsa, o usa una salida explícita con break cuando corresponda.
n = 5 while n > 0: print(n) n -= 1Control fino del bucle: break, continue y else
break: salir del bucle antes de tiempo
Termina el bucle inmediatamente. Útil cuando ya encontraste lo que buscabas.
numeros = [3, 8, 2, 9, 4] for n in numeros: if n == 9: print("Encontrado") breakcontinue: saltar a la siguiente vuelta
Omite el resto del bloque y pasa a la siguiente iteración.
for n in range(1, 6): if n == 3: continue print(n)else en bucles: cuando NO se ejecuta break
En Python, un bucle puede tener else. Se ejecuta solo si el bucle termina “normalmente” (sin break). Es muy útil para búsquedas.
objetivo = 7 numeros = [1, 2, 4, 6, 8] for n in numeros: if n == objetivo: print("Está en la lista") break else: print("No está en la lista")Mini-reto guiado: contador de progreso (for + range)
Objetivo
Imprimir un progreso del 0% al 100% en pasos de 10, y al final mostrar “Listo”.
Paso a paso
- Usa
range()con inicio 0, fin 101 y paso 10. - En cada vuelta imprime el porcentaje.
- Después del bucle imprime “Listo”.
for p in range(0, 101, 10): print(p, "%") print("Listo")Mini-reto guiado: sumar hasta que se alcance un límite (while)
Objetivo
Acumular números empezando en 1 hasta que la suma sea mayor o igual a 50. Mostrar cuántos números se usaron y la suma final.
Paso a paso
- Crea dos variables:
suma(inicia en 0) yn(inicia en 1). - Mientras
suma < 50, añadenasumay luego incrementan. - Cuando el bucle termine,
nya habrá avanzado una unidad más, así que calcula cuántos números se usaron.
suma = 0 n = 1 while suma < 50: suma += n n += 1 usados = n - 1 print("Usados:", usados) print("Suma:", suma)Patrones comunes de iteración (para resolver problemas rápido)
Acumulador (sumar, concatenar, juntar resultados)
precios = [10, 20, 15] total = 0 for p in precios: total += p print(total)Contador (contar cuántos cumplen una condición)
edades = [12, 18, 21, 16, 30] mayores = 0 for e in edades: if e >= 18: mayores += 1 print(mayores)Bandera (flag) para saber si ocurrió algo
numeros = [2, 4, 6, 7, 8] hay_impar = False for n in numeros: if n % 2 != 0: hay_impar = True break print(hay_impar)Búsqueda del máximo y mínimo (sin funciones extra)
datos = [5, 2, 9, 1] maximo = datos[0] minimo = datos[0] for x in datos[1:]: if x > maximo: maximo = x if x < minimo: minimo = x print("max:", maximo) print("min:", minimo)Errores típicos y cómo evitarlos
- Olvidar que
range(fin)no incluyefin: si quieres llegar a 10, usarange(11)o ajusta el límite. - Modificar una lista mientras la recorres: puede saltarse elementos. Si necesitas eliminar, suele ser mejor crear una nueva lista con los que quieres conservar.
- Usar índices cuando no hacen falta: iterar directo sobre elementos hace el código más claro.
- En
while, no actualizar la variable de control: revisa que la condición pueda cambiar.