Este artículo es continuación de Aprende Python a través de ejemplos con Raspberry Pi y Sense HAT (Parte 1).

Mostrar mensajes de frío/calor

Hasta ahora hemos conseguido mostrar los grados de temperatura que registra el sensor de la tarjeta Sense HAT. Vamos a suponer ahora que deseamos mostrar un mensaje textual en caso de que se considere que hace calor. Habrá que tomar un valor de referencia para considerar que hace calor. Supongamos, por ejemplo, a partir de 30 grados.

from sense_hat import SenseHat

# Crear objeto SenseHat
sense = SenseHat()

# Obtener valor de la temperatura
temperatura = sense.get_temperature_from_humidity()

# Mostrar resultados
if temperatura > 30:
    print("Hace calor")
temperaturaRedondeo = round(temperatura, 1)
print("Hay: " + str(temperaturaRedondeo) + " ºC")

Sentencia if

Observa que en el código fuente anterior se ha tenido que usar una sentencia if (si condicional), ya que el mensaje "Hace calor" no se debe mostrar siempre, sólo SI la temperatura es mayor de 30º.

En Python se debe indicar una expresión condicional, es decir que resulte verdadero (True) o falso (False), a continuación de la sentencia if, y terminar la línea con dos puntos (:).

A continuación de la sentencia if se deben añadir las líneas de código que se deseen ejecutar en caso de que se cumpla la expresión condicional (resulte True). Ten muy en cuenta que esas líneas deben tener sangría (también se llama indentación), es decir, que debe tener algo de margen a la izquierda respecto a la sentencia if. lo habitual es dejar un salto de tabulador, o 4 espacios.

Si observas el ejemplo anterior, la sentencia print("Hace calor") sólo se ejecutará si se cumple la expresión condicional (está indentada dentro del if), mientras que las siguientes líneas de código se ejecutarán en cualquier caso (se cumpla la condición o no), ya que no están indentadas dentro del if.

Operadores relaciones

Para escribir la expresión condicional dispones de los siguientes operadores relacionales:

Operador  Significado Ejemplo Resultado
== Igual que 5 == 7 False
!= Distinto que 5 != 7  True
< Menor que 8 < 12 True
> Mayor que 12 > 7 True
<= Menor o igual que 12 <= 12 True
>= Mayor o igual que 4 >= 5 False

 

Así, si queremos establecer que 30 grados ya se considere calor, habrá que utilizar el operador >= en lugar de >:

if temperatura >= 30:
    print("Hace calor")

Operadores lógicos

También se dispone de otro tipo de operadores, llamados relacionales, que permiten unir expresiones condicionales. Se trata de los operadores and (Y), or (O) y xor (O exclusivo). Puedes usar estos operadores de manera similar a los siguientes ejemplos:

OperadorEjemploExplicaciónResultado
and 5 == 7 and 7 < 12 False and False False
and 9 < 12 and 12 > 7 True and True True
and 9 < 12 and 12 > 15 True and False False
or 12 == 12 or 15 < 7 True or False True
or 7 > 5 or 9 < 12 True or True True
xor 4 == 4 xor 9 > 3 True xor True False
xor 4 == 4 xor 9 < 3 True xor False True

 

De esta manera podrás cambiar el mensaje e indicar el texto "Hace una temperatura agradable", lo cual debería aparecer, por ejemplo, si la temperatura está entre 15 y 30 grados.

if temperatura > 15 and temperatura < 30:
    print("Hace una temperatura agradable")

Ten en cuenta que NO puedes indicar expresiones como estas:

  • temperatura > 15 and < 30
  • 30 < temperatura > 15 

Sentencia if-else

En caso de que se desees mostrar también un mensaje como "Hace una temperatura desagradable" en caso de que haga frío o calor, NO valdría el siguiente trozo de código:

if temperatura > 15 and temperatura < 30:
    print("Hace una temperatura agradable")
print("Hace una temperatura desagradable")

¿Por qué? Claro, porque el mensaje "Hace una temperatura desagradable" se mostraría siempre. Sólo se debe mostrar SI NO (else) se cumple la condición del if. Para casos así debes completar la sentencia if con una parte else, que se ejecutará en caso de que no se cumpla (False) la expresión condicional del if:

if temperatura > 15 and temperatura < 30:
    print("Hace una temperatura agradable")
else:
print("Hace una temperatura desagradable")

Observa que detrás de la palabra else no se debe indicar ninguna condición, pues ya se sabe que será la condición contraria a la del if. Tan sólo debe tener el carácter dos puntos (:) detrás, como al final del if.

De igual manera que ocurre con el if, el bloque de código que desees que se ejecute, debe tener sangría

Sentencia if-elif-else

Así puedes seguir encadenando bloques de código que se ejecuten cuando se cumplan distintas condiciones. Por ejemplo, vas a desarrollar el código necesario para mostrar los siguientes mensajes:

  • Hacer calor: Si hay 30 grados o más
  • Hace frío: Si hay 15 grados o menos
  • Hace una temperatura agradable: En otro cualquier otro caso

El trozo de código sería como el siguiente:

if temperatura >= 30:
    print("Hace calor")
elif temperatura <= 15:
print("Hace frío")
else:
print("Hace una temperatura agradable")

Este código se podría creer que es equivalente a este otro, pero no es así:

if temperatura >= 30:
    print("Hace calor")
if temperatura <= 15:
print("Hace frío")
if temperatura > 15 or temperatura < 30:
print("Hace una temperatura agradable")

Vamos a ver qué diferencia hay, suponiendo que la temperatura es alta, por ejemplo 35 grados:

En el primer caso sólo se haría la primera comprobación. Al detectarse que se cumple la condición (temperatura >= 30), se ejecutará la sentencia que hay dentro de ese if y se terminará la ejecución de todo ese trozo de código.

En cambio, en el segundo caso, se hará la primera comprobación y se imprimirá igualmente el mensaje, ya que se cumple la condición. Pero al haber concluido por completo esa sentencia if, se ejecutará la siguiente sentencia que es el segundo if realizándose la comprobación del frío. Al no cumplirse la condición no se muestra el mensaje. Pero habrá terminado ese if, y se ejecutará la siguiente sentencia que haya, que en este caso es otro if, y por tanto se realizará una nueva comprobación para ver si la temperatura es agradable.

Puedes ver que el segundo trozo de código es menos eficiente que el primero.