Tiza Las materias del CBC
Practicar →

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.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

La forma

if nota >= 7:
    print("Aprobado")
elif nota >= 4:
    print("Recuperatorio")
else:
    print("Desaprobado")

Se evalúan en orden, y la primera corta

Esto es lo más importante del tema. Con 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:

if nota >= 4:
    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

if x > 0:                   if x > 0:
    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.

Ejemplo resuelto

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:

def estado(nota):
    if nota >= 7:
        return "Aprobado"
    elif nota >= 4:
        return "Recuperatorio"
    else:
        return "Desaprobado"
Fijate que el segundo 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

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 →

Ver todos los temas de Pensamiento Computacional