Python logo - Curso de Python desde cero

Condicionales II: Instrucción else y elif

Continuamos con los condicionales viendo las sentencias else y elif

Bienvenidos a esta nueva entrega del curso de programación en Python, donde continuamos explorando las estructuras condicionales. En la lección anterior, analizamos el funcionamiento básico de la instrucción if. En esta ocasión, profundizaremos aún más al explorar el uso de else y elif.

Instrucción else

Como ya hemos visto la instrucción if en Python se utiliza para evaluar una condición y ejecutar un bloque de código si dicha condición es verdadera. En un contexto de programación, es útil pensar en if como un «si», seguido de la condición que debe cumplirse. Por ejemplo, «si el usuario es menor de edad, no le permitimos pasar».

Cuando trabajamos con if, debemos considerar qué hacer si la condición no se cumple. En este punto, entra en juego la instrucción else. Puede traducirse como «y si no es verdad». A través de else, podemos definir un bloque de código que se ejecutará si la condición del if no se cumple.

Tomemos un ejemplo práctico: imaginemos que deseamos controlar el acceso a un lugar para mayores de edad. Le pedimos al usuario que introduzca su edad y, si es menor de 18 años, el programa imprimirá un mensaje indicando que no puede pasar; en caso contrario, permitirá el acceso.

print("Verificación de acceso")
edad_usuario = int(input("Introduce tu edad, por favor: "))

if edad_usuario < 18:
    print("No puedes pasar")
else:
    print("Puedes pasar")

En este caso, estamos utilizando if para evaluar si la edad es menor de 18, pero también incluimos else para especificar qué hacer cuando esa condición no se cumple. Esto garantiza que el programa responda adecuadamente en ambos casos.

Acompañando if con else y elif

Es importante destacar que cada else debe acompañarse de su correspondiente if. Aunque en Python es posible tener un if sin else, esta estructura puede no tener sentido en términos lógicos, pero no generará errores de sintaxis.

Además, podemos continuar programando después de un bloque else. Por ejemplo, podemos agregar otro mensaje que indique que el programa ha finalizado.

edad_usuario = int(input("Introduce tu edad, por favor: "))
if edad_usuario < 18:
    print("No puedes pasar")
else:
    print("Puedes pasar")
print("El programa ha terminado")

Al ejecutar este programa, notarás que solo entra en el if o el else, pero no en ambos. Si la condición se cumple, ejecuta el if y luego ignora el else para continuar con la ejecución del programa. La última línea siempre se imprimirá porque está fuera del bloque if-else.

Introduce tu edad, por favor: 27
Puedes pasar
EL programa ha terminado

Introduce tu edad, por favor: 17
No puedes pasar
EL programa ha terminado

Manejando Varios else en un Programa

Una pregunta común en Python es si se pueden tener múltiples else en un programa. La respuesta es sí, pero con una condición clave: cada else debe tener su correspondiente if. No puede haber un else sin un if que lo respalde.

Para entender esto en profundidad, exploremos un escenario práctico. Tenemos nuestro programa que verifica edades, y deseamos que el programa responda adecuadamente incluso si se ingresan edades ilógicas o fuera de los rangos normales.

El script actual funciona, pero tiene un problema. Si ingresamos una edad ilógica, como 258 años, el programa aún indicará que podemos pasar debido a que la condición es verdadera. Esto es un error lógico.

Para resolver este problema, necesitamos agregar una validación para edades ilógicas. Por ejemplo, consideremos que 100 años es una edad incorrecta. Para lograrlo, podemos utilizar un segundo if:

edad_usuario = int(input("Introduce tu edad, por favor: "))

if edad_usuario < 18:
    print("No puedes pasar")
if edad_usuario > 100:
    print("Edad incorrecta")
else:
    print("Puedes pasar")
print("El programa ha terminado")

Sin embargo, hay un problema aquí. El else actual se asocia solo con el último if, lo que genera un error en nuestro programa. El else no tiene conocimiento del primer if y su lógica. Esto conduce a resultados incorrectos. Un else, en el caso de que haya varios if siempre éste va a acompañar del más cercano.

Si ejecutamos el programa y proporcionamos una edad de 27 años, el programa funciona correctamente. Y si ingresamos una edad fuera de rango, como 170 años, también funciona de manera correcta.

Introduce tu edad, por favor: 27
Puedes pasar
El programa ha terminado

Introduce tu edad, por favor: 170
Edad incorrecta
El programa ha terminado

La solución a este problema radica en utilizar elif. Esta instrucción permite evaluar múltiples condiciones en orden y garantiza que solo se ejecute la primera que sea verdadera. Así, evitamos errores lógicos.

Si introducimos una edad menor de edad, por ejemplo que tenemos 15 años el programa no funciona adecuadamente:

Introduce tu edad, por favor: 15
No puedes pasar
Puedes pasar
El programa ha terminado

Resulta que el programa muestra un comportamiento inesperado cuando ingresamos una edad menor de 18 años, como 15 años. ¿Cómo sucede esto? Para comprenderlo, debemos rastrear el flujo de ejecución del código.

Cuando proporcionamos una edad de 15 años, el programa almacena ese valor en la variable «edad_usuario». Luego, evalúa la primera condición con el if: ¿es «edad_usuario» menor que 18? La respuesta es sí. Entonces, ejecuta el bloque de código dentro de ese if, que imprime «No puedes pasar».

Hasta aquí, todo parece lógico. Sin embargo, la ejecución continúa hacia abajo y se encuentra con otro if. ¿Por qué sucede esto? La respuesta radica en que el segundo if es independiente del primer if. No están conectados ni coordinados.

edad_usuario = int(input("Introduce tu edad, por favor: "))

if edad_usuario < 18:
    print("No puedes pasar")
if edad_usuario > 100:
    print("Edad incorrecta")
else:
    print("Puedes pasar")
print("El programa ha terminado")

Como resultado, el programa evalúa la segunda condición: ¿es «edad_usuario» mayor que 100? En este caso, la respuesta es no. Por lo tanto, el bloque de código dentro del segundo if se ignora.

Finalmente, el programa llega al else que sigue al segundo if. Dado que este else no está vinculado al primer if, no sabe que ya hemos evaluado una condición anteriormente. Por lo tanto, ejecuta el bloque de código asociado al else, que imprime «Puedes pasar».

Esta situación genera una salida confusa ya que el programa muestra «No puedes pasar», seguido de «Puedes pasar». Esto es claramente un comportamiento indeseado.

Para evitar este tipo de problemas en programas donde debemos evaluar múltiples condiciones, no debemos depender exclusivamente de la instrucción if. En su lugar, utilizamos elif en Python. Esta instrucción nos permite evaluar condiciones adicionales solo si las condiciones anteriores son falsas.

Instrucción elif

La instrucción elif en Python es fundamental para crear una lógica más clara y precisa en nuestros programas. ¿Cómo funciona exactamente esta instrucción y cómo puede mejorar el flujo de ejecución de nuestro código?

Si en el segundo if le ponemos elif, conseguimos con esto que el else no solo acompañe al if más cercano sino que acompañe a toda la estructura. Así sí que el else funciona con los dos condicionales que tiene en la parte superior:

Consideremos el siguiente ejemplo:

edad_usuario = int(input("Introduce tu edad, por favor: "))

if edad_usuario < 18:
    print("No puedes pasar")
elif edad_usuario > 100:
    print("Edad incorrecta")
else:
    print("Puedes pasar")
print("El programa ha terminado")

Lo primero que notamos es que el programa ahora es más claro y eficiente gracias al uso de elif. Veamos cómo funciona:

  1. El usuario ingresa su edad, que se almacena en la variable «edad_usuario».
  2. La primera condición se evalúa: ¿»edad_usuario» es menor que 18? Si es cierto, el programa muestra «No puedes pasar» y no se consideran las condiciones siguientes. En este caso, cuando ingresamos 14 años, esta condición se cumple, y el programa informa que no podemos pasar.
  3. Si la primera condición no se cumple, el programa pasa a la siguiente condición: ¿»edad_usuario» es mayor que 100? Si es cierto, se muestra «Edad incorrecta». En este caso, si ingresamos una edad extremadamente alta, por ejemplo, 150 años, se activa esta condición y se informa que la edad es incorrecta.
  4. Si ninguna de las condiciones anteriores se cumple, el programa llega al else. Esto significa que «edad_usuario» está entre 18 y 100 años, por lo que se muestra «Puedes pasar».

La ventaja principal de elif es que nos permite evaluar múltiples condiciones de manera organizada y eficiente. Si una condición es verdadera, no se evalúan las condiciones siguientes. Esto proporciona un control más preciso del flujo del programa.

Si ejecutamos el programa en consola e introducimos una edad menor de 18 que era cuando fallaba, el programa veremos que funciona. Si yo le digo que tengo 14 años, ahora sí que me dice que no puedo pasar porque se cumple el primer condicional y no salta al else sino que al haber entrado en el primer y ya descarta todo lo demás, por lo que entonces funciona.

Introduce tu edad, por favor: 14
No puedes pasar
El programa ha terminado

Ejemplo de bucle if con varias condiciones

Un ejercicio valioso para comprender el bucle if en profundidad es crear un programa que evalúe múltiples condiciones. Imagina que, en lugar de preguntar la edad, le pedimos al usuario que ingrese una nota y deseamos calificarla como insuficiente, suficiente, bien, notable o sobresaliente. Esto es posible mediante el uso adecuado de condiciones anidadas en Python.

Comencemos por nombrar nuestra variable nota_alumno y definir las condiciones:

nota_alumno = int(input("Introduce tu nota, por favor: "))
if nota_alumno < 5:
    print("Insuficiente")
elif nota_alumno < 6:
    print("Suficiente")
elif nota_alumno < 7:
    print("Bien")
elif nota_alumno < 9:
    print("Notable")
else:
    print("Sobresaliente")

Este código es altamente estructurado y eficiente. Veamos cómo funciona:

  1. El usuario ingresa una nota, que se almacena en la variable nota_alumno.
  2. El programa evalúa las condiciones secuencialmente. Primero, verifica si la nota es menor que 5 y, en ese caso, muestra «Insuficiente».
  3. Si la primera condición no se cumple, pasa a la siguiente, que verifica si la nota es menor que 6, en cuyo caso muestra «Suficiente».
  4. El proceso continúa de esta manera: se evalúan las condiciones en orden y se muestra la calificación correspondiente cuando se cumple una de ellas.
  5. Si ninguna de las condiciones anteriores es verdadera, se ejecuta el else y se muestra «Sobresaliente». Esto significa que el estudiante obtuvo una calificación de 9 o más.

El resultado es un programa que evalúa la nota del estudiante y proporciona una calificación acorde. Cada calificación se muestra solo si la nota cumple con los criterios específicos.

El uso de elif en este contexto es fundamental, ya que permite que todas las condiciones se agrupen en una estructura coherente. El else final actúa como un último recurso si ninguna de las condiciones anteriores se cumple.

En resumen, este ejemplo ilustra cómo utilizar condiciones múltiples y anidadas en un bucle if en Python para crear un programa que evalúa una entrada y proporciona una salida basada en múltiples criterios. Practicar ejercicios como este te ayudará a fortalecer tus habilidades de programación en Python. ¡Mantente atento para más lecciones útiles en entregas futuras!

Scroll al inicio