if ... elif ... else ...

En esta lección se trata la estructura de control if ... elif ... else ...: Estas construcciones permiten condicionar la ejecución de uno o varios bloques de sentencias al cumplimiento de una o varias condiciones.

Sentencias condicionales: if ...

La estructura de control if ... permite que un programa ejecute unas instrucciones cuando se cumplan una condición. En inglés "if" significa "si" (condición).

Sintaxis de la sentencia condicional if ...

La sintaxis de la construcción if es la siguiente:

if condición:
    aquí van las órdenes que se ejecutan si la condición es cierta
    y que pueden ocupar varias líneas

La ejecución de esta construcción es la siguiente:


La primera línea contiene la condición a evaluar y es una expresión lógica. Esta línea debe terminar siempre por dos puntos (:).

A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera). Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones. El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, el editor sangrará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.

Diagrama de flujo de la sentencia condicional condicional if ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ...:

DIAGRAMA DE FLUJO: SENTENCIA IF Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if. INICIO Evalúa la condición. CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE ... y termina el if. FIN Si la condición es False, termina el if directamente. False FIN El programa llega al if. INICIO Evalúa la condición ... CONDICIÓN Si la condición es True, ejecuta el bloque ... True BLOQUE ... y termina el if. FIN Si la condición es False, termina el if directamente. False FIN

Programas de ejemplo con sentencias condicionales if ...

Veamos un ejemplo. El programa siguiente pide un número positivos al usuario y almacena la respuesta en la variable "numero". Después comprueba si el número es negativo. Si lo es, el programa avisa que no era eso lo que se había pedido. Finalmente, el programa imprime siempre el valor introducido por el usuario. A continuación se pueden ver dos ejecuciones paso a paso de ese programa. En la primera el usuario escribe un valor negativo y en la segunda el usuario escribe un valor positivo:

Ejemplo de if ... 1

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: -5
¡Le he dicho que escriba un número positivo!
Ha escrito el número -5

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de if ... 1 - Paso 1

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: -5

Se ejecuta la primera instrucción del programa.

En este caso, imprime la pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "numero".

Anterior Siguiente

Ejemplo de if ... 1 - Paso 2

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: -5

A continuación se evalúa la condición (numero < 0).

En este caso, la condición es cierta (True), puesto que -5 es inferior a 0.

Anterior Siguiente

Ejemplo de if ... 1 - Paso 3

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: -5
¡Le he dicho que escriba un número positivo!

Como la condición es cierta (True), a continuación se ejecutan las instrucciones del bloque if.

En este caso el bloque consta de una sola instrucción que imprime el texto "¡Le he dicho que escriba un número positivo!".

Anterior Siguiente

Ejemplo de if ... 1 - Paso 4

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: -5
¡Le he dicho que escriba un número positivo!
Ha escrito el número -5

Una vez completado el bloque if, el programa salta a la instrucción siguiente al bloque if ..

La última instrucción del programa imprime el valor introducido y el programa termina.

Anterior

Ejemplo de if ... 2

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: 5
Ha escrito el número 5

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de if ... 2 - Paso 1

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: 5

Se ejecuta la primera instrucción del programa.

En este caso, imprime la pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "numero".

Anterior Siguiente

Ejemplo de if ... 2 - Paso 2

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: 5

A continuación se evalúa la condición (numero < 0).

En este caso, la condición es falsa (False), puesto que 5 no es inferior a 0.

Anterior Siguiente

Ejemplo de if ... 2 - Paso 3

numero = int(input("Escriba un número positivo: "))
if numero < 0:
    print("¡Le he dicho que escriba un número positivo!")
print(f"Ha escrito el número {numero}")
Escriba un número positivo: 5
Ha escrito el número 5

Como la condición es falsa, no se ejecutan las instrucciones del bloque y el programa salta a la instrucción siguiente al bloque if ..

La última instrucción del programa imprime el valor introducido y el programa termina.

Anterior

Bifurcaciones: if ... else ...

La estructura de control if ... else ... permite que un programa ejecute unas instrucciones cuando se cumple una condición y otras instrucciones cuando no se cumple esa condición. En inglés "if" significa "si" (condición) y "else" significa "si no". La orden en Python se escribe así:

Sintaxis de la sentencia condicional if ... else ...

La sintaxis de la construcción if ... else ... es la siguiente:

if condición:
    aquí van las órdenes que se ejecutan si la condición es cierta
    y que pueden ocupar varias líneas
else:
    y aquí van las órdenes que se ejecutan si la condición es
    falsa y que también pueden ocupar varias líneas

La ejecución de esta construcción es la siguiente:


La primera línea contiene la condición a evaluar. Esta línea debe terminar siempre por dos puntos (:).

A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera). Es importante señalar que este bloque debe ir sangrado, puesto que Python utiliza el sangrado para reconocer las líneas que forman un bloque de instrucciones. El sangrado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, IDLE sangrará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.

Después viene la línea con la orden else, que indica a Python que el bloque que viene a continuación se tiene que ejecutar cuando la condición no se cumpla (es decir, cuando sea falsa). Esta línea también debe terminar siempre por dos puntos (:). La línea con la orden else no debe incluir nada más que el else y los dos puntos.

En último lugar está el bloque de instrucciones sangrado que corresponde al else.

Diagrama de flujo de la sentencia condicional if ... else ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... else ...:

DIAGRAMA DE FLUJO: SENTENCIA IF ... ELSE ... Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if else. INICIO Evalúa la condición. CONDICIÓN Si la condición es True, ejecuta el bloque correspondiente ... True BLOQUE 1 ... y termina el if else. FIN Si la condición es False, ejecuta el bloque correspondiente ... False BLOQUE 2 ... y termina el if else. FIN El programa llega al if else. INICIO Evalúa la condición. CONDICIÓN Si la condición es True, ejecuta el bloque correspondiente ... True BLOQUE 1 ... y termina el if else. FIN Si la condición es False, ejecuta el bloque correspondiente ... False BLOQUE 2 ... y termina el if else. FIN

Es usted menor de edad.

Programas de ejemplo con sentencias condicionales if ... else ...

Veamos un ejemplo. El programa siguiente pregunta la edad al usuario y almacena la respuesta en la variable "edad". Después comprueba si la edad es inferior a 18 años. Si esta comparación es cierta, el programa escribe que es menor de edad y si es falsa escribe que es mayor de edad. Finalmente el programa siempre se despide, ya que la última instrucción está fuera de cualquier bloque y por tanto se ejecuta siempre. A continuación se pueden ver dos ejecuciones paso a paso de ese programa:

Ejemplo de if ... else ... 1

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 17
Es usted menor de edad.
¡Hasta la próxima!

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de if ... else ... 1 - Paso 1

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 17

Se ejecuta la primera instrucción del programa.

En este caso, imprime la pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "edad".

Anterior Siguiente

Ejemplo de if ... else ... 1 - Paso 2

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 17

A continuación se evalúa la condición (edad < 18).

En este caso, la condición es cierta (True), puesto que 17 es inferior a 18.

Anterior Siguiente

Ejemplo de if ... else ... 1 - Paso 3

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 17
Es usted menor de edad.

Como la condición es cierta (True), a continuación se ejecutan las instrucciones del bloque if.

En este caso el bloque consta de una sola instrucción que imprime el texto "Es usted menor de edad.".

Anterior Siguiente

Ejemplo de if ... else ... 1 - Paso 4

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 17
Es usted menor de edad.
¡Hasta la próxima!

Una vez completado el bloque if, el programa salta a la instrucción siguiente al bloque if .. else ...

La última instrucción del programa imprime la despedida y el programa termina.

Anterior

Ejemplo de if ... else ... 2

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 25
Es usted mayor de edad.
¡Hasta la próxima!

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de if ... else ... 2 - Paso 1

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 25

Se ejecuta la primera instrucción del programa.

En este caso, imprime la pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "edad".

Anterior Siguiente

Ejemplo de if ... else ... 2 - Paso 2

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 25

A continuación se evalúa la condición (edad < 18).

En este caso, la condición es falsa (False), puesto que 25 es superior a 18.

Anterior Siguiente

Ejemplo de if ... else ... 2 - Paso 3

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 25
Es usted mayor de edad.

Como la condición es falsa (False), a continuación se ejecutan las instrucciones del bloque else.

En este caso el bloque consta de una sola instrucción que imprime el texto "Es usted mayor de edad.".

Anterior Siguiente

Ejemplo de if ... else ... 2 - Paso 4

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
else:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")
¿Cuántos años tiene? 25
Es usted mayor de edad.
¡Hasta la próxima!

Una vez completado el bloque else, el programa salta a la instrucción siguiente al bloque if ... else ...

La última instrucción del programa imprime la despedida y el programa termina.

Anterior

Aunque no es aconsejable, en vez de un bloque if ... else ... se podría escribir un programa con dos bloques if ...

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
if edad >= 18:
    print("Es usted mayor de edad.")
print("¡Hasta la próxima!")

Es mejor no hacerlo así por dos motivos:


Si por algún motivo no se quisiera ejecutar ninguna orden en alguno de los bloques, el bloque de órdenes debe contener al menos la instrucción pass (esta orden le dice a Python que no tiene que hacer nada).

edad = int(input("¿Cuántos años tiene? "))
if edad < 120:
    pass
else:
    print("¡No me lo creo!")
print(f"Usted dice que tiene {edad} años.")

Evidentemente este programa podría simplificarse cambiando la desigualdad.

edad = int(input("¿Cuántos años tiene? "))
if edad >= 120:
    print("¡No me lo creo!")
print(f"Usted dice que tiene {edad} años.")

El primer ejemplo era sólo un ejemplo para mostrar cómo se utiliza la instrucción pass. Normalmente, la instrucción pass se utiliza para "rellenar" un bloque de instrucciones que todavía no hemos escrito y poder ejecutar el programa, ya que Python requiere que se escriba alguna instrucción en cualquier bloque.

Sangrado de los bloques

Un bloque de instrucciones puede contener varias instrucciones. Todas las instrucciones del bloque deben tener el mismo sangrado:

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
    print("Es usted menor de edad.")
    print("Recuerde que está en la edad de aprender.")
else:
    print("Es usted mayor de edad.")
    print("Recuerde que debe seguir aprendiendo.")
print("¡Hasta la próxima!")

Se aconseja utilizar siempre el mismo número de espacios en el sangrado, aunque Python permite que cada bloque tenga un número distinto. El siguiente programa es correcto:

edad = int(input("¿Cuántos años tiene? "))
if edad < 18:
        print("Es usted menor de edad.")
        print("Recuerde que está en la edad de aprender.")
else:
    print("Es usted mayor de edad.")
    print("Recuerde que debe seguir aprendiendo.")
print("¡Hasta la próxima!")

Lo que no se permite es que en un mismo bloque haya instrucciones con distintos sangrados. Dependiendo del orden de los sangrados, el mensaje de error al intentar ejecutar el programa será diferente:

Sentencias condicionales anidadas

Una sentencia condicional puede contener a su vez otra sentencia anidada.

Por ejemplo, el programa siguiente muestra el color obtenido al mezclar dos colores en la pantalla:

Ejemplo de sentencias condicionales anidadas

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
r. Rojo      a. Azul
Elija un color (r o a): a
  v. Verde    r. Rojo
Elija otro color (v o r): v
La mezcla de Azul y Verde produce Cian.
¡Hasta la próxima!

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 1

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.

Se ejecuta la primera instrucción del programa.

En este caso, imprime una frase.

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 2

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul

A continuación, imprime otra frase.

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 2

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a

A continuación, imprime la pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "primera".

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 3

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a

A continuación se evalúa la condición (primera == "r").

En este caso, la condición es falsa (False), puesto que el usuario ha contestado a.

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 4

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a
  v. Verde    r. Rojo

Como la condición es falsa (False), a continuación se ejecutan las instrucciones del bloque else.

Escribe una frase.

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 5

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a
  v. Verde    r. Rojo
  Elija otro color (v o r): v

Imprime la segunda pregunta y espera a que el usuario escriba la respuesta y pulse Intro, guardando la respuesta en la variable "segunda".

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 6

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a
  v. Verde    r. Rojo
  Elija otro color (v o r): v

A continuación se evalúa la condición (segunda == "v").

En este caso, la condición es cierta (True), puesto que el usuario ha contestado v.

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 7

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a
  v. Verde    r. Rojo
  Elija otro color (v o r): v
La mezcla de Azul y Verde produce Cian.

Como la condición es cierta (True), a continuación se ejecutan las instrucciones del bloque if.

En este caso el bloque consta de una sola instrucción que imprime el texto "La mezcla de Azul y Verde produce Cian.".

Anterior Siguiente

Ejemplo de sentencias condicionales anidadas - Paso 8

print("Este programa mezcla dos colores.")
print("  r. Rojo      a. Azul")
primera = input("  Elija un color (r o a): ")
if primera == "r":
    print("  a. Azul      v. Verde")
    segunda = input("  Elija otro color (a o v): ")
    if segunda == "a":
        print("La mezcla de Rojo y Azul produce Magenta.")
    else:
        print("La mezcla Rojo y Verde produce Amarillo.")
else:
    print("  v. Verde    r. Rojo")
    segunda = input("  Elija otro color (v o r): ")
    if segunda == "v":
        print("La mezcla de Azul y Verde produce Cian.")
    else:
        print("La mezcla Azul y Rojo produce Magenta.")
print("¡Hasta la próxima!")
Este programa mezcla dos colores.
  r. Rojo      a. Azul
  Elija un color (r o a): a
  v. Verde    r. Rojo
  Elija otro color (v o r): v
La mezcla de Azul y Verde produce Cian.
¡Hasta la próxima!

Una vez completado el bloque if, el programa salta a la instrucción siguiente al bloque if ... else ...

La última instrucción del programa imprime la despedida y el programa termina.

Anterior

Se pueden anidar tantas sentencias condicionales como se desee.

Más de dos alternativas: if ... elif ... else ...

La construcción if ... else ... se puede extender añadiendo la instrucción elif:

La estructura de control if ... elif ... else ... permite encadenar varias condiciones. elif es una contracción de else if. La orden en Python se escribe así:

Sintaxis de la sentencia condicional if ... elif ... else ...

La sintaxis de la construcción if ... elif ... else ... es la siguiente:

if condición_1:
    bloque 1
elif condición_2:
    bloque 2
else:
    bloque 3

Esta estructura es equivalente a la siguiente estructura de if ... else ... anidados:

if condición_1:
    bloque 1
else:
    if condición_2:
        bloque 2
    else:
        bloque 3

Se pueden escribir tantos bloques elif como sean necesarios. El bloque else (que es opcional) se ejecuta si no se cumple ninguna de las condiciones anteriores.

Diagrama de flujo de la sentencia condicional if ... elif ... else ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... elif ... else ...:

DIAGRAMA DE FLUJO: SENTENCIA IF ELIF ELSE Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if elif else. INICIO Evalúa la condición del if. CONDICIÓN 1 Si la condición del if es True, ejecuta el bloque correspondiente ... True BLOQUE 1 ... y termina el if elif else. FIN Si la condición del if es False, evalúa la condición del elif. False CONDICIÓN 2 Si la condición del elif es True, ejecuta el bloque correspondiente ... True BLOQUE 2 ... y termina el if elif else. FIN Si la condición del elif es False, ejecuta el bloque correspondiente ... False BLOQUE 3 ... y termina el if elif else. FIN El programa llega al if elif else. INICIO Evalúa la condición del if. CONDICIÓN 1 Si la condición del if es True, ejecuta el bloque correspondiente ... True BLOQUE 1 ... y termina el if elif else. FIN Si la condición del if es False, evalúa la condición del elif. False CONDICIÓN 2 Si la condición del elif es True, ejecuta el bloque correspondiente ... True BLOQUE 2 ... y termina el if elif else. FIN Si la condición del elif es False, ejecuta el bloque correspondiente ... False BLOQUE 3 ... y termina el if elif else. FIN

En las estructuras if ... elif ... else ... el orden en que se escriben los casos es importante y, a menudo, se pueden simplificar las condiciones ordenando adecuadamente los casos.

Podemos distinguir dos tipos de situaciones:

  1. Cuando los casos son mutuamente excluyentes.

    Consideremos un programa que pide la edad y en función del valor recibido da un mensaje diferente. Podemos distinguir, por ejemplo, tres situaciones:

    • si el valor es negativo, se trata de un error
    • si el valor está entre 0 y 17, se trata de un menor de edad
    • si el valor es superior o igual a 18, se trata de un menor de edad

    Los casos son mutuamente excluyentes, ya que un valor sólo puede estar en uno de los casos.

    • Un posible programa es el siguiente:
      edad = int(input("¿Cuántos años tiene? "))
      if edad >= 18:
          print("Es usted mayor de edad.")
      elif edad < 0:
          print("No se puede tener una edad negativa")
      else:
          print("Es usted menor de edad.")
      
    • El programa anterior funciona correctamente, pero los casos están desordenados. Es mejor escribirlos en orden, para asegurarnos de no olvidar ninguna de las posibles situaciones. Por ejemplo, podríamos escribirlos de menor a mayor edad, aunque eso obliga a escribir otras condiciones:
      edad = int(input("¿Cuántos años tiene? "))
      if edad < 0:
          print("No se puede tener una edad negativa")
      elif edad >= 0 and edad < 18:
          print("Es usted menor de edad.")
      else:
          print("Es usted mayor de edad.")
      
    • En el programa anterior se pueden simplificar las comparaciones:
      edad = int(input("¿Cuántos años tiene? "))
      if edad < 0:
          print("No se puede tener una edad negativa")
      elif edad < 18:
          print("Es usted menor de edad.")
      else:
          print("Es usted mayor de edad.")
      

      Estos dos programas son equivalentes porque en una estructura if ... elif .. else cuando se cumple una de las comparaciones Python ya no evalúa las siguientes condiciones. En este caso, si el programa tiene que comprobar la segunda comparación (la del elif), es porque no se ha cumplido la primera (la del if). Y si no se ha cumplido la primera es que edad es mayor que 0, por lo que no es necesario comprobarlo en la segunda condición.

    • Pero hay que tener cuidado, porque si los casos del programa anterior se ordenan al revés manteniendo las condiciones, el programa no funcionaría como se espera, puesto que al escribir un valor negativo mostraría el mensaje "Es usted menor de edad.".
      Incorrecto
      # Este programa no funciona correctamente
      edad = int(input("¿Cuántos años tiene? "))
      if edad < 18:
          print("Es usted menor de edad.")
      elif edad < 0:
          print("No se puede tener una edad negativa")
      else:
          print("Es usted mayor de edad.")
      
  2. Cuando unos casos incluyen a otros

    Consideremos un programa que pide un valor y nos dice:

    • si es múltiplo de dos,
    • si es múltiplo de cuatro (y de dos)
    • si no es múltiplo de dos

    Nota: El valor 0 se considerará múltiplo de 4 y de 2.

    Los casos no son mutuamente excluyentes, puesto que los múltiplos de cuatro son también múltiplos de dos.

    • El siguiente programa no sería correcto: l escribir un valor negativo mostraría el mensaje "Es usted menor de edad.".
      Incorrecto
      # Este programa no funciona correctamente
      numero = int(input("Escriba un número: "))
      if numero % 2 == 0:
          print(f"{numero} es múltiplo de dos")
      elif numero % 4 == 0:
          print(f"{numero} es múltiplo de cuatro y de dos")
      else:
          print(f"{numero} no es múltiplo de dos")
      

      El error de este programa es que si numero cumple la segunda condición, cumple también la primera. Es decir, si numero es un múltiplo de cuatro, como también es múltiplo de dos, cumple la primera condición y el programa ejecuta el primer bloque de instrucciones, sin llegar a comprobar el resto de condiciones.

    • Una manera de corregir ese error es añadir en la primera condición (la de if) que numero no sea múltiplo de cuatro.
      numero = int(input("Escriba un número: "))
      if numero % 2 == 0 and numero % 4 != 0:
          print(f"{numero} es múltiplo de dos")
      elif numero % 4 == 0:
          print(f"{numero} es múltiplo de cuatro y de dos")
      else:
          print(f"{numero} no es múltiplo de dos")
      
    • También se podría haber escrito el siguiente programa:
      numero = int(input("Escriba un número: "))
      if numero % 2 == 0 and numero % 4 != 0:
          print(f"{numero} es múltiplo de dos")
      elif numero % 2 == 0:
          print(f"{numero} es múltiplo de cuatro y de dos")
      else:
          print(f"{numero} no es múltiplo de dos")
      

      Este programa funciona porque los múltiplos de cuatro también son múltiplos de dos y el programa sólo evalúa la segunda condición (la de elif) si no se ha cumplido la primera.

    • Pero todavía podemos simplificar más el programa, ordenando de otra manera los casos:
      numero = int(input("Escriba un número: "))
      if numero % 4 == 0:
          print(f"{numero} es múltiplo de cuatro y de dos")
      elif numero % 2 == 0:
          print(f"{numero} es múltiplo de dos")
      else:
          print(f"{numero} no es múltiplo de dos")
      

      Este programa funciona correctamente ya que aunque la segunda condición (la de elif) no distingue entre múltiplos de dos y de cuatro, si numero es un múltiplo de cuatro, el programa no llega a evaluar la segunda condición porque se cumple la primera (la de if).

    En general, el orden que permite simplificar más las expresiones suele ser considerar primero los casos particulares y después los casos generales.


Si las condiciones if ... elif ... cubren todas las posibilidades, se puede no escribir el bloque else:

numero = int(input("Escriba un número: "))
if numero >= 0:
    print("Ha escrito un número positivo")
elif numero < 0:
    print("Ha escrito un número negativo")

Pero es más habitual sustituir el último bloque elif ... por un bloque else:

numero = int(input("Escriba un número: "))
if numero >= 0:
    print("Ha escrito un número positivo")
else:
    print("Ha escrito un número negativo")

Condiciones no booleanas

Dado que cualquier variable puede interpretarse como una variable booleana, si la condición es una comparación con cero, podemos omitir la comparación.

Por ejemplo, el programa siguiente:

numero = int(input("Escriba un número: "))
if numero % 2 != 0:
    print(f"{numero} es impar")
else:
    print(f"{numero} es par")

se podría escribir omitiendo la comparación:

numero = int(input("Escriba un número: "))
if numero % 2:
    print(f"{numero} es impar")
else:
    print(f"{numero} es par")

En este programa, si el número es impar, numero % 2 da como resultado 1. Y como el valor booleano de un número diferente de cero es True (es decir, bool(1) es True), la condición se estaría cumpliendo.


Si la comparación es una igualdad, se puede utilizar el operador not. Por ejemplo, el programa siguiente:

numero = int(input("Escriba un número: "))
if numero % 2 == 0:
    print(f"{numero} es par")
else:
    print(f"{numero} es impar")

se podría escribir omitiendo la comparación:

numero = int(input("Escriba un número: "))
if not numero % 2:
    print(f"{numero} es par")
else:
    print(f"{numero} es impar")

En este programa, si el número es par, numero % 2 da como resultado 0. El valor booleano de cero es False (es decir, bool(0) es False), pero al negarse con not, la condición se estaría cumpliendo (ya que not False es True.


Cuando se está aprendiendo a programar, esta notación puede resultar un poco críptica, por lo que se recomienda empezar escribiendo las comparaciones completas. Más adelante, cuando nos hayamos familiarizado con las expresiones lógicas, nos resultará más natural utilizarla.