1

¿Existe alguna diferencia entre anidar muchos if o anidar un if seguido de elif? Por ejemplo:

Qué diferencia hay entre ésto:

if (condición):

if (condicion):

else:

y ésto:

if (condición):

elif (condicion):

else:
FJSevilla
  • 55,603
  • 7
  • 35
  • 58
Mauricio
  • 69
  • 1
  • 8

1 Answers1

3

Hay una diferencia fundamental, si usas if encadenados todas las expresiones son evaluadas siempre, aunque una sea cierta antes:

a = 15
if a % 5 == 0:
    print(f"{a} es divisible entre 5")
if a % 3 == 0:
    print(f"{a} es divisible entre 3")
15 es divisible entre 5
15 es divisible entre 3

Si usas elif, en el momento que una condición anterior (el if u otro elif se cumpla), ese elif no se evalúa siquiera:

a = 15

if a % 5 == 0:
    print(f"{a} es divisible entre 5")
elif a % 3 == 0:
    print(f"{a} es divisible entre 3")
15 es divisible entre 5
a = 6
if a % 5 == 0:
    print(f"{a} es divisible entre 5")
elif a % 3 == 0:
    print(f"{a} es divisible entre 3")
6 es divisible entre 3

Puedes traducir el bloque:

if x:
    pass
elif y:
    pass
elif z:
    pass
else:
    pass

por algo como:

si `x` es cierta:
    hacer algo
si `x` no es cierta pero `y` si lo es:
    hacer otra cosa
si `x` no es cierta ni tampoco `y` pero `z` si lo es:
    hacer otra cosa
si nada de lo anterior es cierto:
    hacer otra cosa 

Solo que el intérprete usa un cortocircuito, el el momento que una condición se cumpla pasa olímpicamente de evaluar el resto siquiera y pasa al código siguiente al bloque if-elif-else.

En los casos en los que las condiciones sean excluyentes (si una se cumple las otras son falsas) debes usar siempre elif porque es más eficiente:

n = 1

if n == 0:
    print("¡Soy un 0!")
elif n == 1:
    print("¡Soy un 1!")
else:
    print("¡No se lo que soy!, solo se contar hasta 1...!")

si usas un if y no un elif la expresión n == 1 se evalúa aunque el número sea un 0, no tiene sentido alguno, ya sabemos que no puede ser un 1 en este punto.

Para el resto de casos dependerá de la lógica que quieras seguir. En el primer ejemplo, si quieres que se compruebe si el número es divisible entre 5 y además entre 3 sin importar si es o no divisible entre 5 pues debes usar if encadenados. Si quieres que si es divisible entre 5 se haga algo y ya está pero que si no lo es se compruebe si al menos es divisible entre 3 debes usar if-elif.

FJSevilla
  • 55,603
  • 7
  • 35
  • 58