Saber Básico A.4: Bucles y condicionales anidadas básicas 3ESO
Computación y Robótica – 3º ESO
1. De estructuras sueltas a estructuras que se contienen unas a otras
En el A.2 aprendiste a convertir una especificación en un programa identificando entradas, proceso y salidas. Hasta ahora, en el proceso solo aparecían bucles y condicionales por separado, uno detrás de otro.
Pero las especificaciones reales dicen cosas como “cada segundo, mira la temperatura; y si pasa de 30, comprueba también si pasa de 40”. Aquí una decisión vive dentro de una repetición, y otra decisión vive dentro de la primera. Hoy aprendemos a construir eso: anidar.
2. ¿Qué significa anidar?
Anidar es colocar una estructura de control (bucle o condicional) dentro de otra, como las muñecas rusas. La estructura de fuera se llama exterior y la de dentro, interior.
Con lo que ya conoces, hay cuatro combinaciones básicas:
| Anidamiento | Qué significa | Ejemplo |
|---|---|---|
| Condicional dentro de un bucle | Se decide en cada vuelta | Por siempre: si toca una roca, gira |
| Bucle dentro de un condicional | Solo si se cumple algo, se repite una tarea | Si hay tormenta de polvo, repetir 5 veces: activar limpiador |
| Condicional dentro de un condicional | Decisiones en cascada: la segunda solo se plantea si se cumplió la primera | Si la batería es baja, entonces, si está lejos, pedir ayuda |
| Bucle dentro de un bucle | Repeticiones de repeticiones (filas y columnas) | Repetir 3 filas: repetir 4 columnas: escanear casilla |
Idea clave: en las estructuras anidadas, lo que está más adentro depende de todo lo que lo rodea. Para saber cuándo se ejecuta un bloque, léelo de fuera hacia dentro.
3. Cómo se lee un anidamiento
Bucle dentro de un bucle: las vueltas se multiplican, no se suman.
repetir (3) veces
repetir (2) veces
decir [Hola]
decir [Adiós]
| Vuelta del bucle exterior | Qué pasa dentro |
|---|---|
| 1 | “Hola”, “Hola” y después “Adiós” |
| 2 | “Hola”, “Hola” y después “Adiós” |
| 3 | “Hola”, “Hola” y después “Adiós” |
Resultado: 3 × 2 = 6 “Hola” y 3 “Adiós”. Fíjate: el “Adiós” está en el nivel exterior, y por eso solo se repite 3 veces.
Decisiones en cascada. Scratch no tiene un “si no, si…”, así que, para elegir entre tres o más opciones, se anida un “si” dentro del “si no”:
si <temperatura > 40> entonces
decir [CRÍTICO]
si no
si <temperatura > 30> entonces
decir [ALERTA]
si no
decir [NORMAL]
Aquí el orden de las preguntas importa. Si preguntases primero “¿mayor que 30?”, una temperatura de 45 también cumpliría esa condición y nunca llegaría a decir “CRÍTICO”.
4. Anidar o usar “y”: no siempre es lo mismo
Estas dos formas son equivalentes:
si <temperatura > 30> entonces si <(temperatura > 30) y (co2 > 1000)> entonces
si <co2 > 1000> entonces decir [Ventilar]
decir [Ventilar]
Cuando solo hay un resultado posible (“ventilar” o nada), puedes elegir la forma que te resulte más clara. Pero cuando cada nivel tiene su propio “si no” (tres resultados distintos), necesitas anidar. Con un solo “y” no basta.
5. De bloques a texto: cada nivel es un nivel de sangría
En el A.1 viste que los bloques y el código de texto son la misma lógica. Con el anidamiento aparece algo nuevo: cada nivel de anidamiento es un nivel más de sangría en Python.
python
# Bucle dentro de bucle: 3 filas de 4 asteriscos
for fila in range(3):
for columna in range(4):
print("*", end="")
print()
python
# Decisiones en cascada
temperatura = 35
if temperatura > 40:
print("CRÍTICO")
else:
if temperatura > 30:
print("ALERTA")
else:
print("NORMAL")
En Python existe además elif, que reduce la cascada sin sangrías extra. En los bloques de Scratch no lo tienes y hay que anidar.
6. Ejemplo trabajado
Especificación: “La estación del hábitat debe medir la temperatura cada segundo, sin parar. Si supera los 30 °C, debe avisar con ‘ALERTA’. Si además supera los 40 °C, debe avisar con ‘CRÍTICO’ y activar la ventilación. Si no supera los 30 °C, no hace nada.”
| Paso del proceso | Qué necesito |
|---|---|
| Entrada | Sensor de temperatura (bloque que da el valor de la temperatura) |
| Variable | temperatura (guarda la lectura de cada vuelta) |
| Proceso 1 | Bucle exterior: por siempre, para medir cada segundo |
| Proceso 2 | Condicional interior 1: si temperatura > 30 |
| Proceso 3 | Condicional interior 2, dentro del anterior: si temperatura > 40 (con su si no) |
| Salida | decir ALERTA, o decir CRÍTICO y activar ventilación |
por siempre
fijar [temperatura] a (lectura del sensor)
si <temperatura > 30> entonces
si <temperatura > 40> entonces
decir [CRÍTICO]
activar ventilación
si no
decir [ALERTA]
esperar (1) segundos
Fíjate en tres cosas: el “por siempre” contiene todo, incluida la espera; el segundo “si” solo se plantea si el primero se cumplió; y cada “si no” pertenece al “si” con el que está alineado.
7. Errores típicos al anidar
- Colocar un bloque en el nivel equivocado: por ejemplo, un “girar” que debía ir dentro del bucle exterior y queda fuera.
- Sumar en vez de multiplicar: en un bucle dentro de otro, el interior se ejecuta vueltas del exterior × vueltas del interior veces.
- Asociar mal un “si no”: un “si no” pertenece al “si” que tiene justo encima, alineado con él. Comprueba siempre a cuál pertenece.
- Poner las preguntas en el orden equivocado en una cascada (primero la más general y luego la más específica).
- Anidar de más: si una condición compuesta con “y” hace lo mismo, suele quedar más clara.
📝 PARA TU LIBRETA (Resumen clave para copiar)
Copia en tu cuaderno este resumen de 5 puntos:
- Anidar es colocar un bucle o un condicional dentro de otro. La estructura de dentro solo se ejecuta si se dan las condiciones de todo lo que la rodea.
- Combinaciones básicas: condicional dentro de bucle, bucle dentro de condicional, condicional dentro de condicional y bucle dentro de bucle.
- En un bucle dentro de un bucle, las vueltas se multiplican: 3 × 2 = 6 ejecuciones del bloque interior.
- En las decisiones en cascada el orden importa: primero la pregunta más restrictiva. Cada “si no” pertenece al “si” con el que está alineado.
- En Python, cada nivel de anidamiento es un nivel más de sangría. Si cada nivel tiene su propio “si no”, no se puede sustituir por un solo “y”.
FICHA DE TRABAJO DESENCHUFADA: ESTRUCTURAS DENTRO DE ESTRUCTURAS
Saber Básico A.4: Bucles y condicionales anidadas básicas
Nombre y Apellidos: ____________________________________________________
Curso y Grupo: 3.º ESO ____ | Fecha: __ /__ /2026
📖 Recuerda cómo se lee (consulta si tienes dudas)
Lee de fuera hacia dentro · Bucle dentro de bucle: las vueltas se multiplican · Cada “si no” pertenece al “si” alineado con él · En cascada, primero la pregunta más restrictiva.
🔍 RETO 1: Lee de fuera hacia dentro
Programa A:
repetir (4) veces
repetir (5) veces
mover (10) pasos
girar (90) grados
- ¿Cuántas veces se ejecuta “mover (10) pasos” en total? ________
- ¿Cuántos pasos avanza el rover en total? ________
- ¿Cuántas veces se ejecuta “girar (90) grados”? ________
- ¿Qué figura recorre el rover? ________
Programa B:
repetir (3) veces
repetir (2) veces
decir [Hola]
decir [Adiós]
- ¿Cuántos “Hola” y cuántos “Adiós” se dicen? ________
🌡️ RETO 2: Decisiones en cascada
Este programa clasifica la temperatura del hábitat:
si <temperatura > 40> entonces
decir [CRÍTICO]
si no
si <temperatura > 30> entonces
decir [ALERTA]
si no
decir [NORMAL]
Completa la tabla:
| Temperatura | 25 | 30 | 35 | 40 | 45 |
|---|---|---|---|---|---|
| ¿Qué dice? | _____ | _____ | _____ | _____ | _____ |
Reflexión: ¿qué pasaría con una temperatura de 45 si el programa preguntase primero “¿temperatura > 30?” (con ALERTA) y solo después, en un “si no”, “¿temperatura > 40?” (con CRÍTICO)?
Respuesta: ____________________________________________________________________
🧩 RETO 3: De la especificación al programa (con estructuras anidadas)
Especificación: “El rover escanea un terreno de 3 filas y 4 columnas. En cada casilla mide el nivel de polvo. Si el nivel es mayor que 50, marca la casilla como zona peligrosa. Al terminar cada fila, pasa a la siguiente.”
| Paso del proceso | Qué necesito |
|---|---|
| Entrada | ___________________________________________________________ |
| Variable(s) | ___________________________________________________________ |
| Proceso (indica qué estructura va dentro de cuál) | ___________________________________________________________ |
| Salida | ___________________________________________________________ |
Escribe ahora el programa con sangrías:____________________________________________________________________________________________________________________________________________________________________________________
- ¿Cuántas casillas se inspeccionan en total? ________
- ¿Cuántas veces se hace la pregunta “¿nivel > 50?” ________
🐞 RETO 4: Caza el error de anidamiento
Programa A (especificación: el rover recorre el perímetro de un cuadrado de 5 pasos por lado, girando 90° en cada esquina)
repetir (4) veces
repetir (5) veces
mover (10) pasos
girar (90) grados
Programa B (especificación: si la batería es menor de 20 y el rover está a más de 100 m de la base, pide ayuda; si la batería es menor de 20 pero está cerca, vuelve a la base; si la batería es de 20 o más, explora)
si <batería < 20> entonces
si <distancia > 100> entonces
decir [Pido ayuda]
si no
decir [Vuelvo a la base]
| Programa | ¿Qué falla? | ¿Cómo lo arreglo? |
|---|---|---|
| A | ___________ | ___________ |
| B | ___________ | ___________ |
Reflexión: en el Programa B, ¿qué hace el rover con batería 50? ¿Y con batería 10 y distancia 20?
Respuesta: ____________________________________________________________________
⚖️ RETO 5: ¿Anidar o “y”?
- Reescribe con un solo “si” y el operador “y”:
si <temperatura > 30> entonces
si <co2 > 1000> entonces
decir [Ventilar]
Tu versión: ____________________________________________________________
- Ahora la especificación dice: “Si la temperatura pasa de 30: si el CO₂ pasa de 1000, ventilar; si no, abrir un poco la ventana. Si no pasa de 30, no hacer nada.” ¿Se puede hacer con un solo “si … y …”? Justifica tu respuesta.
Respuesta: ____________________________________________________________________ - Escribe en Python la versión de esta segunda especificación.
____________________________________________________________________________________________________________________________________________________________________________________
💡 Dinámica sugerida para el aula (40-45 min)
- 10 min: Repaso oral: pizarra con un bucle dentro de un bucle, y traza en voz alta de cuántas veces se ejecuta cada bloque.
- 25 min: Trabajo individual o en parejas con los Retos 1 a 5 (el 3 y el 5 son los más largos).
- 5-10 min: Corrección conjunta del Reto 4B, viendo a qué “si” pertenece cada “si no”, y del 5.2, para decidir cuándo anidar y cuándo usar “y”.
Solucionario (solo para ti)
- Reto 1: A) 20 veces; 200 pasos; 4 giros; un cuadrado de lado 50. B) 6 “Hola” y 3 “Adiós”.
- Reto 2: 25 → NORMAL; 30 → NORMAL; 35 → ALERTA; 40 → ALERTA; 45 → CRÍTICO. Con el orden invertido, 45 cumple “> 30” y dice ALERTA, y nunca llega a CRÍTICO.
- Reto 3: Entrada: nivel de polvo de cada casilla. Variable: nivel. Proceso: repetir (3) [repetir (4) [medir nivel; si nivel > 50 entonces marcar zona peligrosa; avanzar a la siguiente casilla]; pasar a la siguiente fila]. Salida: casillas marcadas. Se inspeccionan 12 casillas y la pregunta se hace 12 veces.
- Reto 4: A) el “girar” queda fuera del bucle exterior: el rover avanza 200 pasos en línea recta y gira una vez; hay que meterlo dentro del exterior, después del interior. B) el “si no” está asociado al “si” exterior (batería): con batería 50 dice “Vuelvo a la base” y con batería 10 y distancia 20 no hace nada. Correcto: si batería < 20 [si distancia > 100 → “Pido ayuda” si no → “Vuelvo a la base”] si no → explorar.
- Reto 5: 1) si <(temperatura > 30) y (co2 > 1000)> entonces decir [Ventilar]. 2) No: hay tres resultados (ventilar, abrir ventana, nada) y un “y” solo distingue dos. 3)
if temperatura > 30:/if co2 > 1000:/print("Ventilar")/else:/print("Abrir un poco la ventana").
