Lección 5 de 12 · Nivel 2: Intermedio

Bucles for y while en Python: range, break y continue

En esta lección
  1. for: recorrer elementos
  2. range(): repetir un número de veces
  3. Acumuladores y contadores
  4. enumerate(): el índice y el valor a la vez
  5. while: repetir mientras se cumpla una condición
  6. break y continue
  7. Bucles anidados
  8. Comprensión de listas: un bucle en una línea
  9. Resumen
Lo que lograrás 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)?

  • 1, 2, 3, 4
  • 1, 2, 3, 4, 5
  • 0, 1, 2, 3, 4

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.

Cuidado con los bucles infinitos

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

  • break sale del bucle inmediatamente.
  • continue salta 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?

  • Sale del bucle
  • Salta el resto de la vuelta actual y pasa a la siguiente
  • Reinicia el programa

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]?

  • [2, 4, 6]
  • [4, 6]
  • [2, 3]

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

  • for recorre colecciones o un range(); while repite mientras una condición sea verdadera.
  • Acumuladores y contadores resuelven totales y conteos; sum, max, min y len ayudan.
  • break sale del bucle; continue salta 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.

¿Quieres tu certificado gratis?

Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.

Inscribirme gratis