Lección 5 de 12 · Nivel 2: Intermedio
Bucles for y while en Python: range, break y continue
En esta lección
- Recorrer colecciones con for y range().
- Calcular totales y conteos con acumuladores.
- Repetir mientras se cumpla una condición con while, break y continue.
- Transformar y filtrar listas con comprensiones.
Los bucles (o ciclos) repiten un bloque de código. Gracias a ellos puedes procesar mil facturas con el mismo esfuerzo que una. Python tiene dos: for, para recorrer una colección o un rango conocido, y while, para repetir mientras se cumpla una condición. Si vienes de otro lenguaje, te interesará nuestra comparación de ciclos while, for y do-while.
for: recorrer elementos
El for de Python recorre cualquier secuencia elemento por elemento:
frutas = ["manzana", "pera", "uva"]
for fruta in frutas:
print(f"Me gusta la {fruta}")
En cada vuelta (iteración), la variable fruta toma el siguiente valor de la lista. También funciona con textos (letra por letra) y con cualquier colección que verás en la lección 6.
range(): repetir un número de veces
for i in range(5):
print(i) # 0, 1, 2, 3, 4
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
for i in range(0, 20, 5):
print(i) # 0, 5, 10, 15
for i in range(10, 0, -1):
print(i) # cuenta regresiva de 10 a 1
Como en las rebanadas de texto, range(inicio, fin, paso) incluye el inicio y excluye el fin.
Ejemplo: tabla de multiplicar
n = int(input("Número: "))
for i in range(1, 11):
print(f"{n} x {i:2} = {n * i:3}")
1. ¿Qué números genera range(1, 5)?
range(inicio, fin) incluye el inicio y excluye el fin.
Acumuladores y contadores
Un patrón que usarás constantemente: una variable que empieza en cero y se actualiza en cada vuelta.
ventas = [120.5, 89.9, 230.0, 45.0, 310.2]
total = 0
cantidad_grandes = 0
for venta in ventas:
total += venta
if venta > 100:
cantidad_grandes += 1
print(f"Total vendido: {total:.2f}")
print(f"Ventas mayores a 100: {cantidad_grandes}")
print(f"Promedio: {total / len(ventas):.2f}")
Para casos simples, Python ya trae funciones que hacen esto: sum(ventas), max(ventas), min(ventas) y len(ventas).
enumerate(): el índice y el valor a la vez
tareas = ["Responder correos", "Reunión", "Informe"]
for numero, tarea in enumerate(tareas, start=1):
print(f"{numero}. {tarea}")
while: repetir mientras se cumpla una condición
Úsalo cuando no sabes de antemano cuántas vueltas habrá:
saldo = 1000
mes = 0
while saldo < 2000:
saldo *= 1.05 # crece 5% cada periodo
mes += 1
print(f"Se duplica en {mes} periodos: {saldo:.2f}")
Resultado: 15 periodos (2078,93). ¿Recuerdas la regla del 72? 72 ÷ 5 ≈ 14,4, muy cerca.
Si la condición de un while nunca se vuelve falsa, el programa no termina. Asegúrate de que algo dentro del bucle cambie la condición. Si te pasa, detén el programa con Ctrl + C en la terminal.
Validar datos del usuario
edad = int(input("Edad (0-120): "))
while edad < 0 or edad > 120:
print("Valor fuera de rango")
edad = int(input("Edad (0-120): "))
print("Gracias")
break y continue
breaksale del bucle inmediatamente.continuesalta al siguiente ciclo sin ejecutar el resto del bloque.
# Menú que se repite hasta que el usuario elige salir
while True:
opcion = input("1) Saludar 2) Salir: ")
if opcion == "2":
break
if opcion != "1":
print("Opción no válida")
continue
print("¡Hola!")
print("Adiós")
El patrón while True + break es muy común para menús y para repetir hasta que el dato sea válido.
2. ¿Qué hace continue dentro de un bucle?
continue pasa a la siguiente vuelta; break sale del bucle por completo.
Bucles anidados
Un bucle dentro de otro. El interno se ejecuta completo en cada vuelta del externo:
for fila in range(1, 4):
linea = ""
for columna in range(1, 4):
linea += f"{fila * columna:4}"
print(linea)
Muestra una pequeña tabla de multiplicar de 3×3. Si el bucle externo da 1.000 vueltas y el interno otras 1.000, son un millón de operaciones: con datos grandes, conviene pensar si hay una forma más eficiente.
Comprensión de listas: un bucle en una línea
Una forma compacta y muy "pythónica" de crear listas a partir de otras:
precios = [100, 250, 80, 40]
con_impuesto = [round(p * 1.18, 2) for p in precios]
caros = [p for p in precios if p > 90]
print(con_impuesto) # [118.0, 295.0, 94.4, 47.2]
print(caros) # [100, 250]
Úsala para transformaciones y filtros simples. Si la lógica es compleja, un for normal es más legible.
3. ¿Qué devuelve [n * 2 for n in [1, 2, 3] if n > 1]?
Primero filtra (2 y 3 cumplen n > 1) y después los transforma (× 2).
Ejercicio práctico: juego de adivinar el número
El programa elige un número al azar entre 1 y 50. El usuario intenta adivinarlo; tras cada intento el programa dice "más alto" o "más bajo". Al acertar, muestra cuántos intentos necesitó. Máximo 7 intentos.
Pista: para el número aleatorio usa import random y random.randint(1, 50).
Ver solución
import random
secreto = random.randint(1, 50)
MAX_INTENTOS = 7
for intento in range(1, MAX_INTENTOS + 1):
numero = int(input(f"Intento {intento}/{MAX_INTENTOS}: "))
if numero == secreto:
print(f"¡Correcto! Lo lograste en {intento} intentos")
break
elif numero < secreto:
print("Más alto")
else:
print("Más bajo")
else:
print(f"Se acabaron los intentos. Era {secreto}")
Dato curioso: el else de un for se ejecuta solo si el bucle terminó sin break, es decir, si no acertaste.
Resumen
forrecorre colecciones o unrange();whilerepite mientras una condición sea verdadera.- Acumuladores y contadores resuelven totales y conteos;
sum,max,minylenayudan. breaksale del bucle;continuesalta a la siguiente vuelta.- Las comprensiones de listas transforman y filtran en una sola línea.
En la próxima lección: Listas, tuplas, diccionarios y sets en Python. Verás las cuatro estructuras de datos de Python, sus métodos y cuándo usar cada una.
Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.