¿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:
¿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:
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
.