Los bucles en Python permiten repetir instrucciones sin copiar el mismo código muchas veces. for recorre elementos de un iterable, mientras que while continúa mientras una condición sea verdadera. Las instrucciones break, continue y else ofrecen control adicional.
En esta guía aprenderás los patrones principales con listas, range(), diccionarios, validación de entrada y bucles anidados. El tutorial oficial de control de flujo de Python documenta estas construcciones, y la referencia de range() explica sus argumentos.
Recorrer una lista con for
lenguajes = ["Python", "JavaScript", "Go"]
for lenguaje in lenguajes:
print(lenguaje)El bucle recibe cada elemento directamente. No necesitas administrar un índice cuando solamente utilizas el valor.
Usar range()
for numero in range(5):
print(numero)range(5) produce valores desde 0 hasta 4. También admite inicio y paso:
for numero in range(2, 11, 2):
print(numero)La guía específica de range() en Python incluye rangos descendentes y errores frecuentes.
Obtener índice y valor
tareas = ["instalar", "configurar", "probar"]
for posicion, tarea in enumerate(tareas, start=1):
print(f"{posicion}. {tarea}")enumerate() en Python evita contadores manuales y permite elegir el valor inicial.
Recorrer diccionarios
precios = {
"teclado": 45.0,
"ratón": 20.0,
"monitor": 210.0,
}
for producto, precio in precios.items():
print(producto, precio)Un bucle directo sobre un diccionario produce claves. items() devuelve pares de clave y valor. Consulta la guía de diccionarios en Python.
Combinar iterables con zip()
productos = ["Teclado", "Ratón", "Monitor"]
precios = [45.0, 20.0, 210.0]
for producto, precio in zip(
productos,
precios,
strict=True,
):
print(f"{producto}: {precio:.2f}")strict=True detecta longitudes diferentes en versiones modernas de Python.
Bucles while
intentos = 3
while intentos > 0:
print(f"Quedan {intentos} intentos")
intentos -= 1
print("Fin")Un while necesita que su condición pueda cambiar. Si el estado nunca se modifica, el programa puede entrar en un bucle infinito.
Validar entrada con while
while True:
texto = input("Edad: ").strip()
try:
edad = int(texto)
except ValueError:
print("Introduce un número entero")
continue
if edad < 0:
print("La edad no puede ser negativa")
continue
break
print(f"Edad válida: {edad}")La guía de input() en Python cubre conversiones, menús y validación.
Detener con break
numeros = [4, 8, 15, 16, 23, 42]
objetivo = 15
for numero in numeros:
if numero == objetivo:
print("Encontrado")
breakbreak termina el bucle más cercano. Úsalo cuando continuar ya no aporta trabajo útil.
Saltar con continue
valores = [10, -2, 7, -5, 3]
for valor in valores:
if valor < 0:
continue
print(valor)continue pasa a la siguiente iteración. No debe ocultar una lógica difícil de seguir.
else en bucles
numeros = [2, 4, 6, 8]
objetivo = 5
for numero in numeros:
if numero == objetivo:
print("Encontrado")
break
else:
print("No encontrado")El bloque else se ejecuta si el bucle termina sin break. Es útil en búsquedas y validaciones.
Bucles anidados
filas = 3
columnas = 4
for fila in range(filas):
for columna in range(columnas):
print(f"({fila}, {columna})")El número total de iteraciones se multiplica. Revisa el tamaño de los datos antes de anidar varios recorridos.
Comprensiones frente a bucles
numeros = range(10)
cuadrados_pares = [
numero ** 2
for numero in numeros
if numero % 2 == 0
]Una comprensión es adecuada para una transformación breve con un filtro sencillo. Para varias acciones, manejo de errores o condiciones complejas, usa un bucle normal. La guía de list comprehensions muestra la diferencia.
Proyecto práctico: resumen de ventas
ventas = [
{"producto": "Teclado", "cantidad": 2, "precio": 45.0},
{"producto": "Ratón", "cantidad": 4, "precio": 20.0},
{"producto": "Monitor", "cantidad": 1, "precio": 210.0},
]
total = 0.0
for numero, venta in enumerate(ventas, start=1):
subtotal = venta["cantidad"] * venta["precio"]
total += subtotal
print(
f"{numero}. {venta['producto']}: "
f"{subtotal:.2f}"
)
print(f"Total: {total:.2f}")Errores frecuentes
- Olvidar actualizar la condición de un
while. - Modificar una lista mientras se recorre.
- Usar
range(len(lista))cuando basta recorrer valores. - Colocar
breakocontinueen el nivel equivocado. - Crear demasiados bucles anidados.
- Confundir el
elsedel bucle con el de unif.
for o while
- Usa
forpara recorrer una colección o una secuencia conocida. - Usa
whilecuando la repetición depende de un estado o una condición. - Usa una función integrada cuando exprese directamente la operación, como
sum(),any()oall().
Conclusión
Los bucles en Python son más claros cuando recorren directamente los datos y mantienen una condición de salida visible. Prefiere for para iterables, while para estados, enumerate() para posiciones y comprensiones solamente para transformaciones sencillas. Un bucle pequeño y predecible es más fácil de probar y mantener.






