🔁 Bucles anidados en Python

💡 ¿Qué es un bucle anidado?

Un bucle anidado es simplemente un bucle dentro de otro bucle.
Nos permite recorrer estructuras más complejas,
como tablas, coordenadas o combinaciones de valores.

⚙️ Ejemplo básico

for x in range(3):
    for y in range(2):
        print(f"({x}, {y})")

⬇️ Salida:

(0, 0)
(0, 1)
(1, 0)
(1, 1)
(2, 0)
(2, 1)

💬 Cada valor de x genera todas las combinaciones posibles con y.

🧠 Entendiendo el flujo

1️⃣ El bucle exterior (x) controla las filas.

2️⃣ El bucle interior (y) controla las columnas.

3️⃣ Por cada valor de x, el bucle interior recorre todos los valores de y.

🔄 En total, este programa realiza 3 × 2 = 6 iteraciones.

🎯 Visualizando el orden de ejecución

Iteración x y Salida
1 0 0 (0, 0)
2 0 1 (0, 1)
3 1 0 (1, 0)
4 1 1 (1, 1)
5 2 0 (2, 0)
6 2 1 (2, 1)

💡 Primero cambian todos los valores de y, y luego x avanza a su siguiente valor.

🧩 Ejemplo práctico — Tablas

Podemos usar bucles anidados para imprimir tablas de multiplicar:

for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i} × {j} = {i * j}")
    print("---")

⬇️ Salida:

1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
---
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
---
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
---

🧮 Cada bloque interior imprime una fila de la tabla. El print("---") separa los resultados de cada número.

🧠 En resumen

Concepto Descripción
Bucle exterior Controla el valor principal (x, i, etc.)
Bucle interior Se repite completamente por cada iteración exterior
Total de repeticiones Multiplicación de los tamaños de los dos rangos