Sentencias condicionales if, else, elif

Sentencias if

El tipo más común de sentencia de control de flujo es la sentencia if. La cláusula de una sentencia if (es decir, el bloque que sigue a la sentencia if) se ejecutará si la condición de la sentencia es True. La cláusula se omite si la condición es False.

En español, una sentencia if podría leerse como: «Si esta condición es verdadera, ejecuta el código de la cláusula». En Python, una sentencia if consiste en lo siguiente:

  • La palabra clave if
  • Una condición (es decir, una expresión que se evalúa como True o False)
  • Dos puntos
  • Seguido por un bloque de código ¡sangrado! (llamado cláusula if)

Por ejemplo, digamos que tienes un código que comprueba si el nombre de alguien es Alice. (Imagina que al nombre se le ha asignado algún valor anteriormente).

if name == 'Alice':
    print('Hi, Alice.')

Todas las sentencias de control de flujo terminan con dos puntos y van seguidas de un nuevo bloque de código (la cláusula). La cláusula de esta sentencia if es el bloque con print('Hi, Alice.'). La imagen muestra cómo sería un diagrama de flujo de este código.

Diagrama de flujo de una sentencia if

Sentencias else

Una cláusula if puede ir seguida opcionalmente de una sentencia else. La cláusula else se ejecuta sólo cuando la condición de la sentencia if es False. En español, una sentencia else podría leerse como, «Si esta condición es verdadera, ejecuta este código. O si no, ejecuta este otro código«. Una sentencia else no tiene una condición, y en el código, una sentencia else siempre consiste en los siguientes puntos:

  • La palabra clave else
  • Dos puntos
  • A partir de la siguiente línea, un bloque de código con sangría (llamado cláusula else)

Volviendo al ejemplo de Alice, veamos un código que utiliza una sentencia else para ofrecer un saludo diferente si el nombre de la persona no es Alice.

if name == 'Alice':
    print('Hi, Alice.')
else:
    print('Hello, stranger.')
Diagrama de flujo de una sentencia else

Sentencias elif

Aunque sólo se ejecutará una de las cláusulas if o else, puede darse el caso de que quiera que se ejecute !una¡ de las muchas cláusulas posibles. La sentencia elif es una sentencia «else if» que siempre sigue a una sentencia if u otra elif. Proporciona otra condición que se comprueba sólo si todas las condiciones anteriores son falsas. En el código, una sentencia elif siempre consiste en lo siguiente:

  • La palabra clave elif
  • Una condición (es decir, una expresión que se evalúa como True o False)
  • Dos puntos
  • A partir de la siguiente línea, un bloque de código con sangría (llamado cláusula elif)

Añadamos un elif al comprobador de nombres para ver esta declaración en acción.

if name == 'Alice':
    print('Hi, Alice.')
elif age < 12:
    print('You are not Alice, kiddo.')

Esta vez, se comprueba la edad de la persona, y el programa le dirá algo diferente si es menor de 12 años. Puedes ver el diagrama de flujo de esto en la siguente imagen.

Diagrama de flujo de una sentencia elif

La cláusula elif se ejecuta si age < 12 es True y el name == 'Alice' es False. Sin embargo, si ambas condiciones son falsas, se saltan ambas cláusulas. No se garantiza que al menos una de las cláusulas se ejecute. Cuando hay una cadena de sentencias elif, sólo se ejecutará una o ninguna de las cláusulas. Una vez que una de las condiciones de las sentencias es True, el resto de las cláusulas elif se saltan automáticamente. Por ejemplo, abra una nueva ventana del editor de archivos e introduzca el siguiente código, guardándolo como vampire.py:

name = 'Carol'
age = 3000
if name == 'Alice':
    print('Hi, Alice.')
elif age < 12:
    print('You are not Alice, kiddo.')
elif age > 2000:
    print('Unlike you, Alice is not an undead, immortal vampire.')
elif age > 100:
    print('You are not Alice, grannie.')

Puedes ver la ejecución de este programa en https://autbor.com/vampire/. Aquí, he añadido dos sentencias elif más para hacer que el comprobador de nombres salude a una persona con diferentes respuestas basadas en la edad. La siguiente imagen muestra el diagrama de flujo para esto.

El diagrama de flujo para múltiples sentencias elif en el programa vampire.py

Sin embargo, el orden de las sentencias elif es importante. Vamos a reordenarlas para introducir un error. Recuerde que el resto de las cláusulas elif se saltan automáticamente una vez que se ha encontrado una condición True, así que si cambia algunas de las cláusulas en vampire.py, se encontrará con un problema. Cambia el código para que sea como el siguiente, y guárdalo como vampire2.py:

name = 'Carol'
   age = 3000
   if name == 'Alice':
       print('Hi, Alice.')
   elif age < 12:
       print('You are not Alice, kiddo.')
➊ elif age > 100:
       print('You are not Alice, grannie.')
   elif age > 2000:
       print('Unlike you, Alice is not an undead, immortal vampire.')

Puedes ver la ejecución de este programa en https://autbor.com/vampire2/. Digamos que la variable age contiene el valor 3000 antes de que se ejecute este código. Podrías esperar que el código imprimiera la cadena ‘Unlike you, Alice is not an undead, immortal vampire.’. Sin embargo, como la condición age > 100 es True (después de todo, 3000 es mayor que 100) ➊, se imprime la cadena ‘You are not Alice, grannie.‘, y el resto de las sentencias elif se saltan automáticamente. Recuerde que, como máximo, sólo se ejecutará una de las cláusulas, y para las sentencias elif, ¡el orden importa!

La imagen que se muestra más adelante es el diagrama de flujo del código anterior. Observe cómo los rombos para age > 100 y age > 2000 se intercambian.

Opcionalmente, puede tener una sentencia else después de la última sentencia elif. En ese caso, se garantiza que al menos una (y sólo una) de las cláusulas se ejecutará. Si las condiciones de cada sentencia if y elif son False, entonces se ejecuta la cláusula else. Por ejemplo, volvamos a crear el programa Alice para utilizar las cláusulas if, elif y else.

name = 'Carol'
age = 3000
if name == 'Alice':
    print('Hi, Alice.')
elif age < 12:
    print('You are not Alice, kiddo.')
else:
    print('You are neither Alice nor a little kid.')

Puedes ver la ejecución de este programa en https://autbor.com/littlekid/. La imagen muestra el diagrama de flujo de este nuevo código, que guardaremos como littleKid.py.

En español, este tipo de estructura de control de flujo sería «Si la primera condición es verdadera, haz esto. Si la segunda condición es verdadera, haz esto. Si no, haz otra cosa». Cuando utilice las sentencias if, elif y else juntas, recuerde estas reglas sobre cómo ordenarlas para evitar errores como el de la imagen. Primero, siempre hay exactamente una sentencia if. Cualquier sentencia elif que necesite debe seguir a la sentencia if. Segundo, si quiere estar seguro de que al menos una cláusula se ejecuta, cierre la estructura con una sentencia else.

El diagrama de flujo del programa vampire2.py

La ruta X lógicamente nunca ocurrirá, porque si la edad fuera mayor que 2000, ya habría sido mayor que 100.

Diagrama de flujo del programa anterior littleKid.py

Deja una respuesta