Pensamiento Computacional (090) · Unidad 3 — Estructuras de control
Decisiones: if, elif, else
Las condiciones se evalúan en orden y la primera que da True corta. Por eso el orden en que las escribís cambia el resultado.
La explicación
La forma
print("Aprobado")
elif nota >= 4:
print("Recuperatorio")
else:
print("Desaprobado")
- Dos puntos al final de cada línea de condición.
- La indentación decide qué pertenece a cada rama. No es estética: es la sintaxis.
elifyelseson opcionales; puede haber muchoselify un soloelse.
Se evalúan en orden, y la primera corta
nota = 9, la primera condición
(>= 7) da True, imprime "Aprobado" y las de abajo ni se miran. Aunque 9
también sea >= 4, ese elif nunca se evalúa.
El orden mal puesto rompe todo
Mirá qué pasa si se invierten las condiciones:
print("Recuperatorio") ← un 9 entra acá
elif nota >= 7:
print("Aprobado") ← inalcanzable
Con un 9, la primera da True y dice "Recuperatorio". La segunda rama no se puede alcanzar nunca: cualquier nota mayor o igual a 7 ya es mayor o igual a 4.
La regla: de la condición más exigente a la menos exigente. Y si una rama nunca se ejecuta por más que pruebes, sospechá del orden antes que de la condición.
if separados contra elif
print("A") print("A")
if x > 10: elif x > 10:
print("B") print("B")
Con x = 20: el de la izquierda imprime A y B (son dos preguntas
independientes); el de la derecha imprime sólo A (una sola decisión con ramas).
Anidar
Un if puede ir adentro de otro, pero conviene evitarlo cuando se puede combinar
con and: dos niveles ya cuestan de leer, tres son ilegibles.
Una función recibe una nota de 0 a 10 y devuelve "Aprobado" si es 7 o más, "Recuperatorio" entre 4 y 6, y "Desaprobado" si es menos de 4. ¿Por qué esta versión está mal? if nota >= 4: return "Recuperatorio" elif nota >= 7: return "Aprobado" else: return "Desaprobado"
Probemos con nota = 9. La primera condición es 9 >= 4, que da True.
Devuelve "Recuperatorio" y termina.
El problema no es la condición, es el orden. La rama de "Aprobado" es
inalcanzable: para llegar al elif habría que fallar el
nota >= 4, o sea tener menos de 4 — y ahí tampoco puede ser mayor que 7.
La versión correcta va de lo más exigente a lo menos exigente:
if nota >= 7:
return "Aprobado"
elif nota >= 4:
return "Recuperatorio"
else:
return "Desaprobado"
elif no necesita decir
nota >= 4 and nota < 7. Si llegó hasta ahí es porque la primera dio False,
o sea que la nota ya es menor que 7. Esa información viene gratis con el elif, y
agregarla de más ensucia sin aportar.
El control: probá un valor de cada rama y, sobre todo, los bordes: 3, 4, 6, 7. Si alguna rama no se alcanza con ningún valor, está mal el orden.
Dónde se cae la mayoría
- Escribir las condiciones de la menos exigente a la más exigente, y dejar ramas inalcanzables.
- Olvidar los dos puntos, o indentar mal y que una línea quede afuera de la rama.
- Usar varios if sueltos cuando se quería una sola decisión con elif.
Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.
Practicar Decisiones: if, elif, else →