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.
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).
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.
El diagrama de flujo siguiente muestra la ejecución de una sentencia 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.
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".
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.
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!".
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.
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.
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".
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.
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.
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í:
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.
El diagrama de flujo siguiente muestra la ejecución de una sentencia 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.
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".
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.
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.".
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.
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.
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".
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.
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.".
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.
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.
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:
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!")
File "prueba.py", line 4 print("Recuerde que está en la edad de aprender.") ^ IndentationError: unexpected indent
En IDLE se muestra una ventana indicando el error:
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!")
File "prueba.py", line 4 print("Recuerde que está en la edad de aprender.") ^ IndentationError: unindent does not match any outer indentation level
En IDLE se muestra una ventana indicando el error:
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!")
File "prueba.py", line 5 else: ^ SyntaxError: invalid syntax
En IDLE se muestra una ventana indicando el error:
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.
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.
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.
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".
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.
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.
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".
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.
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.".
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.
Se pueden anidar tantas sentencias condicionales como se desee.
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í:
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.
El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... elif ... else ...:
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:
Consideremos un programa que pide la edad y en función del valor recibido da un mensaje diferente. Podemos distinguir, por ejemplo, tres situaciones:
Los casos son mutuamente excluyentes, ya que un valor sólo puede estar en uno de los casos.
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.")
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.")
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.
# 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.")
Consideremos un programa que pide un valor y nos dice:
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.
# 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.
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")
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.
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")
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.