🐍 Guía de Aula Invertida
vistas

Bucles en Python

Ya sabes hacer que tu programa tome decisiones con if. El siguiente problema es distinto: ¿qué haces cuando necesitas repetir una instrucción diez veces, cien veces, o hasta que se cumpla cierta condición, sin copiar y pegar la misma línea una y otra vez? Para eso existen los bucles: while y for.

RC
Ing. Roy Carrasco
Facultad de Ingeniería de Sistemas · UAB

Bienvenido

Ya sabes crear variables, leer datos del usuario y hacer que tu programa tome decisiones con if/elif/else. Lo que falta es repetir: pedir datos varias veces, recorrer los caracteres de un texto, imprimir una tabla completa. Eso es exactamente lo que hacen los bucles.

Objetivo del módulo

Al finalizar esta guía sabrás repetir instrucciones con while mientras se cumpla una condición, recorrer secuencias con for y range(), controlar un bucle con break y continue, anidar bucles, y evitar los errores más comunes (como el temido bucle infinito).

💻 Código en vivo

Todos los bloques con el encabezado Python son editables: presiona ✏️ Editar para modificar el código y ▶ Ejecutar para correrlo de verdad en tu navegador (usa Pyodide, un Python real compilado a WebAssembly). La primera ejecución tarda unos segundos porque descarga el intérprete.

⚠️ Cuidado con los bucles infinitos

Un bucle que nunca cumple su condición de salida se ejecuta para siempre y puede colgar la pestaña del navegador. Antes de ejecutar tu código, revisa siempre que exista una forma de que el bucle termine.

📖 Aprende

La diferencia entre repetir "mientras se cumpla algo" (while) y repetir "un número conocido de veces" (for).

💻 Practica

Ejemplos editables y ejecutables en cada sección.

🎯 Domina

range(), break, continue, bucles anidados y los errores que evitan la mayoría de los principiantes.

El bucle while

Un bucle while repite su bloque de instrucciones mientras una condición sea verdadera. Se escribe igual que un if —dos puntos e indentación— pero en vez de ejecutarse una sola vez, vuelve a evaluar la condición al terminar el bloque, y repite si sigue siendo True.

Python
contador = 1

while contador <= 5:
    print(contador)
    contador = contador + 1

print("Fin del bucle")

Salida:

Consola
1
2
3
4
5
Fin del bucle
El bucle infinito

Si olvidas la línea contador = contador + 1, la condición contador <= 5 nunca se vuelve falsa y el bucle se repite para siempre. Todo while necesita algo dentro del bloque que eventualmente haga falsa la condición: eso se llama la actualización del bucle.

while también sirve para acumular un resultado sin saber de antemano cuántas veces se va a repetir, por ejemplo pidiendo números hasta que el usuario decida parar:

Python
suma = 0
numero = int(input("Número (0 para terminar): "))

while numero != 0:
    suma = suma + numero
    numero = int(input("Número (0 para terminar): "))

print("La suma total es:", suma)
while vs. for

Usa while cuando no sabes de antemano cuántas repeticiones va a haber (depende de una condición, como la respuesta del usuario). Más adelante en esta guía vas a ver for, la opción natural cuando sí sabes cuántas veces —o sobre qué secuencia— quieres repetir.

break y continue

Dentro de cualquier bucle, break y continue te dan control fino sobre la repetición: break corta el bucle por completo, y continue salta directamente a la siguiente repetición sin ejecutar el resto del bloque en esa vuelta.

InstrucciónQué hace
breakTermina el bucle inmediatamente, sin volver a evaluar la condición.
continueSalta el resto del bloque en esta vuelta y pasa directo a la siguiente repetición.
Python
while True:
    respuesta = input("Escribe 'salir' para terminar: ")
    if respuesta == "salir":
        break
    print("Escribiste:", respuesta)

print("Programa terminado")
while True + break: el reemplazo del do-while

Python no tiene una estructura do-while como otros lenguajes (repetir al menos una vez, y recién después revisar la condición). El patrón while True: combinado con un break condicional adentro cumple exactamente esa función, y es muy común para pedir datos "hasta que el usuario haga algo válido".

continue es distinto: no termina el bucle, solo se salta la vuelta actual.

Python
numero = 0

while numero < 10:
    numero = numero + 1
    if numero % 2 == 0:
        continue
    print(numero)

Salida (solo los números impares, porque los pares activan continue antes de llegar al print):

Consola
1
3
5
7
9

El bucle for con range()

Cuando sabes exactamente cuántas veces quieres repetir algo, for es más directo que while: no necesitas crear un contador ni actualizarlo a mano. La forma más común es combinarlo con range(), que genera una secuencia de números.

Python
for i in range(5):
    print(i)

Salida:

Consola
0
1
2
3
4
range(5) no incluye el 5

range(n) genera los números desde 0 hasta n - 1: en total, exactamente n números. Esperar que range(5) incluya el 5 es el error de "conteo por uno" (off-by-one) más común al empezar con for.

range() también acepta un inicio y un paso, no solo el final:

FormaGenera
range(5)0, 1, 2, 3, 4
range(2, 6)2, 3, 4, 5
range(0, 10, 2)0, 2, 4, 6, 8
range(10, 0, -1)10, 9, 8, 7, 6, 5, 4, 3, 2, 1
Python
tabla = 7

for i in range(1, 11):
    print(tabla, "x", i, "=", tabla * i)

for sobre cadenas y listas

for no solo recorre números generados por range(): puede recorrer directamente cualquier secuencia, como los caracteres de un str o los elementos de una list, que ya conoces de la guía de Tipos de Datos. En ese caso no necesitas índices: Python te entrega cada elemento directamente.

Python
for letra in "Python":
    print(letra)
Python
materias = ["POO", "Base de Datos II", "Ingeniería de Software", "TGS"]

for materia in materias:
    print("Estás inscrito en:", materia)
range(len(...)) casi nunca hace falta

Vas a ver mucho código (sobre todo de gente que viene de otros lenguajes) que recorre una lista así: for i in range(len(materias)): print(materias[i]). Funciona, pero en Python es más idiomático iterar directamente sobre los elementos, como en el ejemplo de arriba: es más corto y más difícil de romper con un índice mal calculado.

Bucles anidados

Un bucle puede contener otro bucle completo dentro de su bloque. Por cada vuelta del bucle externo, el bucle interno se ejecuta por completo desde el principio. Es la herramienta natural para recorrer una cuadrícula, como filas y columnas.

Python
for fila in range(1, 4):
    for columna in range(1, 4):
        print(fila, "x", columna, "=", fila * columna)
    print("--- fin de la fila", fila, "---")
Las repeticiones se multiplican

Si el bucle externo se repite 3 veces y el interno también 3 veces, el bloque más interno se ejecuta 3 × 3 = 9 veces en total. Con bucles anidados grandes (por ejemplo, dos range(1000)), el número de repeticiones crece muy rápido — vale la pena tenerlo en cuenta antes de ejecutar.

Errores comunes

❌ Bucle infinito

Olvidar actualizar la variable que controla la condición de un while hace que nunca se vuelva falsa. El programa se cuelga y hay que forzar su cierre.

❌ Conteo por uno (off-by-one) con range()

Esperar que range(n) incluya el número n, cuando en realidad se detiene en n - 1.

❌ break o continue fuera de un bucle

Usar break o continue fuera de un while o un for produce SyntaxError: ambos solo tienen sentido dentro de un bucle.

❌ Usar while cuando conviene for

Armar un contador manual con while para repetir un número fijo de veces funciona, pero es más código y más fácil de romper que usar for con range() directamente.

Descubre la sorpresa

Ejecuta este bloque tal como está: probablemente esperabas ver el número 5 al final, pero no aparece.

Python
for i in range(1, 5):
    print(i)
Corrígelo

range(1, 5) genera 1, 2, 3, 4: se detiene justo antes del segundo número. Edita el bloque y cambia range(1, 5) por range(1, 6) para que el 5 sí aparezca.

Ejercicios Propuestos

Pon en práctica lo aprendido resolviendo los siguientes ejercicios directamente en el bloque editable.

  1. Usa while para imprimir los números del 1 al 10.
  2. Usa while True junto con break para pedir números con input() hasta que el usuario escriba "salir".
  3. Usa for con range() para imprimir la tabla del 7, del 7x1 al 7x10.
  4. Usa continue dentro de un for con range(1, 21) para imprimir solo los números impares.
  5. Usa un for para recorrer la cadena "Python" letra por letra e imprimir cada una.
  6. Escribe dos bucles anidados que impriman un cuadrado de asteriscos de 4 filas por 4 columnas.
✍️ Resuelve aquí los ejercicios

Reto Final

Escribe el clásico FizzBuzz: recorre con un for y range() los números del 1 al 30, y para cada uno:

  • Si es divisible entre 3 y entre 5 a la vez, imprime "FizzBuzz".
  • Si es divisible solo entre 3, imprime "Fizz".
  • Si es divisible solo entre 5, imprime "Buzz".
  • Si no es divisible entre ninguno de los dos, imprime el número.

Combina lo que ya sabías de la guía de Condicionales (if/elif/else, operador %) con lo nuevo de esta guía (for y range()).

Salida esperada (primeras líneas)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

Cheat Sheet

UsoEjemplo
Repetir mientras se cumpla algowhile condición: ...
Repetir "hasta que" (sin do-while)while True: ... if cond: break
Repetir n vecesfor i in range(n): ...
Repetir en un rangofor i in range(a, b): ...
Repetir con pasofor i in range(a, b, paso): ...
Recorrer una cadenafor letra in texto: ...
Recorrer una listafor elemento in lista: ...
Cortar el buclebreak
Saltar a la siguiente vueltacontinue

¿Sabías que...?

🐍 Sin do-while

Python nunca incluyó una estructura do-while nativa como C o Java: el patrón while True: con un break condicional cumple esa misma función.

🔁 for...else

Python permite un bloque else al final de un for o un while, que se ejecuta solo si el bucle terminó completo, sin pasar por ningún break. Es poco común, pero existe.

📇 Más herramientas de iteración

Más adelante en el curso vas a conocer enumerate() (para recorrer una lista con su índice a la vez) y otras herramientas que hacen que recorrer secuencias en Python sea todavía más cómodo.