TEMA 2. Condicionales. Comparadores múltiples.

Los condicionales son instrucciones de código que permiten tomar decisiones a lo largo del programa. Esto es algo muy natural de entender, a lo largo de tu vida te des cuenta o no estás tomando continuamente decisiones y muchas de ellas se basan en condiciones.

Por ejemplo, si por la mañana cuando te levantas llueve, cogerás un paraguas. Si te vibra el móvil porque tienes un whatsapp, lo vas a mirar. Fíjate que las condiciones de las que estamos hablando son siempre del tipo: si (está pasando algo) yo hago (esto).

Es posible incluso que te encuentres con situaciones donde para tomar una decisión incluyas varias condiciones. Por ejemplo, si te vibra el móvil porque tienes un nuevo mensaje de Whastapp pero estás en clase y están prohibidos los móviles en el instituto, entonces decides que es mejor no mirar el móvil.

Objectivos

  • Aprender los tipos booleanos.
  • Aprender a usar los operadores de comparación.
  • Entender y manejar los condicionales.

Tu primer condicional

Como hemos visto, las acciones que tomas en la vida pueden venir precedidas de una condición previa. Pues bien, vamos a escribir nuestro primer condicional en programación Python.

Sección 2.1 IF

Una sentencia condicional en Python se escribe como la instrucción if. Es la traducción al inglés del "si" condicional. if llueve, me llevo el paraguas. Después del if siempre viene una acción, en nuestro ejemplo la acción es "llevarse un paraguas"

In [ ]:
# TU PRIMER If

llueve= True
if (llueve): print("Lleva paraguas")

Sección 2.1.1 Tipos de datos booleanos

Como ves, el if está formado por la condición y después por una acción si se cumple esa condición. En este caso, imprime por pantalla "lleva paraguas". Hay situaciones que son verdaderas o falsas. Es decir, Trueo False. Es mucho más cómodo declarar estas situaciones con variables booleanas, es decir, variables que solo pueden ser o verdadero o falso.

Por ejemplo, te ha llegado un whatsapp o no te ha llegado. Esto es Trueo False. Vamos a poner un ejemplo de como lo pondríamos en Python.

In [ ]:
# Tu primera variable booleana

mensaje_whatsapp= True
if (mensaje_whatsapp) : print ("Tienes un Whatsapp")

Sección 2.2 Else

Habrá días que no llueva y por tanto, no necesites coger el paraguas. Hay una instrucción llamada else que en caso de que no se cumpla la condición, ejecuta una acción. Esto es muy útil, mira el siguiente ejemplo:

In [ ]:
# Puede llover o puede no llover

llueve= False
if (llueve): print("Lleva paraguas")
else: print("No lleves paraguas")
In [ ]:
# Incluso puede cambiar el tiempo

llueve= False
if (llueve): print("Lleva paraguas")
else: print("No lleves paraguas")
    
llueve= True
if (llueve): print("Lleva paraguas")
else: print("No lleves paraguas")

Operadores de comparación

Vamos a introducir un nuevo desafío. Para decidir si la condición del if se cumple o no, vamos a comparar "algo" con otro "algo". Esta comparación tiene que tener algún sentido. Por ejemplo, ¿1 es mayor que 2? Esta comparación sí tiene sentido. ¿Qué es mayor, el número 1 o el Empire State Building de Nueva York? No tiene sentido. Es importante que las comparaciones tengan sentido.

Comparador Sintaxis ¿Qué significa
!= x != y x no es igual a y
> x > y x es mayor que y
< x < y x es menor que y
>= x >= y x es mayor o igual que y
<= x <= y x es menor o igual que y

Vamos a probar los comparadores en los siguientes ejemplos. Como verás se pueden comparar números y también cadenas de texto.

In [ ]:
# Este ejemplo comprueba si 1 es igual a 2
1==2
In [ ]:
# Este ejemplo comprueba si 1 es diferente a 2
1!=2
In [ ]:
# Este ejemplo comprueba si 1 es mayor o igual a 2
1<=2
In [ ]:
# Este ejemplo comprueba si la cadena con el nombre "juan" es igual a "juan"
"juan"=="juan"
In [ ]:
# Este ejemplo comprueba si la cadena con el nombre "Pepe" es igual a "Juan"
"Pepe"== "Juan"

Ejercicio. ¿Cuándo metemos la pizza en el horno?

Los pizzeros (pizzaiolos) napolitanos cuidan su horno y sus pizzas al máximo. Nunca meten una pizza en un horno frio pues la base nunca se quedaría suficientemente hecha para aguantar los ingredientes sin romperse cuando la cojas. En nuestra pizzería queremos que todas las pizzas salgan bien y por eso tenemos un termómetro en el horno. Diseña un pequeño programa donde la variable temperatura sea comprobada. Si la temperatura es menor de 350ºC, se debe avisar por consola de que el horno está aún muy frio. Si es superior o igual a 350ºC el programa nos dirá que ya podemos meter la pizza.

In [ ]:
## Programa para comprobar si ya podemos meter la pizza en el horno

temperatura_horno=400
if (temperatura_horno) < 350 : print ("Muy frio")
elif (temperatura_horno) > 350 :
    print("Mete la pizza")

# Escribe tu código aquí
In [ ]:
## Y ahora vamos a hacer lo mismo, pero vas a poder seleccionar la temperatura del horno con un deslizador
## Pon tu condicional donde pone "PON TU CODIGO AQUI"
## Recuerda en el condicional, comparar la variable temperatura_horno

from IPython.display import display
import ipywidgets as widgets
temperatura_horno=widgets.IntSlider(value=275,
    min=0,
    max=400,
    step=1,
    description="Temperatura")
display(temperatura_horno)
button = widgets.Button(description="¡Comprueba!")
display(button)
def on_button_clicked(b):
    
    ########################
    ## PON TU CODIGO AQUI ##
    
    
    if (temperatura_horno.value) < 350 : print ("Muy frio")
    elif (temperatura_horno.value) > 350 :
        print("Mete la pizza")
    

button.on_click(on_button_clicked)

Sección 2.3 Comparadores Múltiples

Ya hemos hecho una comparación sencilla. Hemos visto que tras una comparación podemos ejecutar una acción y hemos comprado la temperatura del horno y si llueve o no llueve. Pero en nuestro día a día hacemos comparaciones mucho más complejas, generalmente ejecutamos una acción después de hacer mentalmente muchas comparaciones. Podríamos decir que detrás de cada decisión hay un arbol de decisión más o menos complejo detrás.

Vamos a escribir nuestro primer comparador múltiple. Para ello nos vamos a apoyar en los comparadores booleanos. Estos comparadores son 'and', 'or' y 'not', que en inglés significan 'Y', 'O' y 'NO'. Vamos con un ejemplo:

Supongamos que te gusta salir a correr, pero no te gusta correr con mal tiempo. Además tienes una agenda apretada con muchas prioridades en 2º de Bachillerato con muchos exámenes y estudiar para selectividad. Por tanto, para que puedas salir a correr se tiene que dar el caso de que haga sol y que además tengas tiempo.

Esta doble condición la podríamos escribir como sigue:

In [ ]:
# Ejemplo para probar: Condiciones para que yo vaya a correr
hace_sol=True
tengo_tiempo=True


if (hace_sol==True and tengo_tiempo==True ) : print ("Salgo a correr")

Prueba tu ahora. Dadas las condiciones iniciales siguientes, sustituye las XXXX del código por True o por False y las VVVVV por and o por or para que nos digan que no podemos salir a correr en cualquier caso.

In [ ]:
# Ejemplo para probar: Condiciones para que yo NO vaya a correr
hace_sol=False
tengo_tiempo=False


if (hace_sol==XXXX VVVV tengo_tiempo==XXXX ) : print ("No puedo salir a correr")

¿Estás seguro de que tu código funciona en cualquier caso? Vamos a ponerlo a prueba. Sustituye las XXXX del código por True o por False y las VVVVV por and o por or por las que has utilizado en el ejemplo anterior y ejecuta los ejemplos. Si tu código estaba bien escrito, los dos siguientes ejemplo deberían de secirte que no puedes salir a correr.

In [ ]:
# Ejemplo para probar: Condiciones para que yo NO vaya a correr
hace_sol=False
tengo_tiempo=True


if (hace_sol==XXXX VVVVV tengo_tiempo==XXXX ) : print ("No puedo salir a correr")
In [ ]:
# Ejemplo para probar: Condiciones para que yo NO vaya a correr
hace_sol=True
tengo_tiempo=False


if (hace_sol==XXXX VVVVV tengo_tiempo==XXXX ) : print ("No puedo salir a correr")

Ejercicio: Pedidos Online

Nuestra pizzería tiene una pequeña página web donde se aceptan pedidos online. Uno de los requisitos es que los pedidos no se permitan fuera del horario de trabajo, puesto que no tenemos el horno encendido o no hay nadie en el local para hacer la pizza. ¿Qué opinarías como cliente de una pizzería que te acepta y te cobra un pedido pero no hay nadie para cocinarlo y entregarlo?

En este ejemplo tienes que calcular y escribir código para los siguientes casos dependiendo de la hora. Si el pedido se intenta hacer fuera del horario de trabajo, sencillamente se le dirá al cliente que no puede realizar el pedido. Sin embargo, si estamos dentro del horario de trabajo antes del horario de comida, se informará al cliente diciéndole que el pedido queda anotado, pendiente de que llegue el horario de comida para ser cocinado y entregado. ¡Vamos allá!

Sustituye las XXXX y las VVVV por lo que consideres necesario para que funcione el ejemplo siguiente:

In [ ]:
hora = 17.05  # Esta es la hora de ejemplo. Prueba a cambiarla para comprobar todos los casos posibles.

horario_trabajo_empieza = 11.00  # Hora de comienzo de la jornada laboral
horario_trabajo_termina = 17.00  # Hora de finalización de la jornada laboral

comida_empieza = 13.00  # Comienzo del horario de comida
comida_termina = 16.00  # Final del horario de comida

# Informamos de si el pedido puede realizarse:

# Comprobamos si estamos dentro del horario de comida
if (hora >= comida_empieza and hora<= comida_termina)==True : print ("El pedido se puede realizar sin problemas")  

# Si lo anterior era FALSE, comprobamos si no estamos dentro del horario de comida pero sí estamos en el horario laboral previo (de 11 a 13)    
elif (((hora >= comida_empieza and hora<= comida_termina)==False) and ((hora>= horario_trabajo_empieza and hora<=comida_termina)==True)) : print ("El pedido queda anotado")

# Si todo lo anterior ha fallado es que estamos fuera del horario de pedidos
else : print ("No se puede realizar el pedido. Consulte nuestro horario")

Prueba a cambiar la hora para ver qué pasa

¿QUÉ HEMOS APRENDIDO?

En este tema hemos aprendido los condicionales if, elif y else. Además hemos practicado con varios tipos de datos, como los booleanos y hemos empezado a practicar con los comparadores múltiples