Saltar a contenido

Errores comunes en las estructuras condicionales

Estructuras individuales vs. estructuras anidadas

¿Qué pasa si no usamos if… elif para nada y solo empleamos if?

Volvamos a nuestro ejercicio de calificaciones:

calificacion.py
calificacion = int(input("Ingrese la calificacion del estudiante (1/100): "))

if 90 <= calificacion <= 100: 
    print("Nivel A")

elif calificacion >= 80: 
    print("Nivel B")

elif calificacion >= 70: 
    print("Nivel C")

elif calificacion >= 60: 
    print("Nivel D")

else: # Caso por defecto
    print("Nivel F")

Si ejecutamos este código ingresando una calificación de 92, obtendremos el siguiente resultado:

Terminal (Entrada/Salida)
Ingrese la calificacion del estudiante (1/100): 92
Nivel A

A pesar de que la calificación es mayor o igual a 90, el programa imprime "Nivel A" y no sigue evaluando las demás condiciones. Esto se debe a que las condiciones son mutuamente excluyentes. Una vez que se cumple una condición, las demás no se evalúan. Si esto no fuera así, el programa imprimiría "Nivel A", "Nivel B", "Nivel C" y "Nivel D" en lugar de solo "Nivel A", puesto que todas las condiciones serían verdaderas.

Ahora, ¿qué sucede si eliminamos las estructuras anidadas if… elif y solo usamos estructuras simples if?

calificacion.py
calificacion = int(input("Ingrese la calificacion del estudiante (1/100): "))

if 90 <= calificacion <= 100: 
    print("Nivel A")

if calificacion >= 80: 
    print("Nivel B")

if calificacion >= 70: 
    print("Nivel C")

if calificacion >= 60: 
    print("Nivel D")

else: # Caso por defecto
    print("Nivel F")

Si ejecutamos este código ingresando una calificación de 92, obtendremos el siguiente resultado:

Terminal (Entrada/Salida)
Ingrese la calificacion del estudiante (1/100): 92
Nivel A
Nivel B
Nivel C
Nivel D

En este caso, el programa imprime "Nivel A", "Nivel B", "Nivel C" y "Nivel D".

¿Por qué sucede esto?

Esto es un error común al usar solo estructuras condicionales if individuales, desconectados entre si, en lugar de estructuras condicionales if… elif anidadas, haciendo que a partir de la primera condición verdadera, todas las condiciones restantes sean verdaderas y se impriman todos los mensajes.

lo tanto, si la calificación es mayor o igual a 90, también será mayor o igual a 80, 70 y 60, lo que hace que todas las condiciones sean verdaderas y se impriman todos los mensajes.

¡Para recordar!

Al usar estructuras condicionales if individuales en lugar de estructuras condicionales if… elif anidadas, todas las condiciones se evalúan por separado, sin importar si alguna de ellas es verdadera y que por consecuencia el resto de las condiciones siguientes sea falsa.

Por lo tanto, es importante tener en cuenta que, si queremos que las condiciones sean mutuamente excluyentes (que al ser una condición verdadera el resto será falsa), debemos usar if… elif en lugar de if.

De lo contrario, todas las condiciones se evaluarán por separado, lo que puede llevar a resultados inesperados.