Chisme 165 del Lince: funciones Python y la noche de helada
Sierra Bermeja, las ocho de la tarde. El cielo está limpio, sin una nube, y el Lince de la Noche mira el termómetro nuevo del huerto con cara de pocos amigos.
—Pone 35. Treinta y cinco grados. ¡En noviembre! —dice—. Qué calor.
La Gata Montesa se asoma por encima de su hombro.
—Lince, ese termómetro lo compraste de importación. Marca en grados Fahrenheit.
El Lince se queda un momento en silencio. Después se anima.
—Perfecto. Entrenaré una inteligencia artificial con diez años de datos meteorológicos, la conectaré a tres satélites y…
—O escribes una función que convierta los grados y un \if\ que decida —le corta la Gata—. Mi pregunta es sencilla: ¿van a helar las lechugas esta noche?
El Lince suspira. Odia que tenga razón.
Introducción
Hoy hacemos un repaso rápido de funciones Python: cómo una función calcula un dato y cómo un \if / elif / else\ decide algo con él.
Es la entrada a la clase de repaso. Cinco minutos: lees la escena, ejecutas un programa de once líneas, cambias un valor y ves qué pasa.
Pruébalo antes sin escribir nada: abre el simulador de funciones Python del Chisme 165 y pulsa los botones. Tiene tres ejemplos: una función con return, un if de tres opciones y el programa completo.
Por qué este chisme
Una helada puede arruinar un huerto en una sola noche. Saber si hay riesgo es una decisión de tres respuestas: helada, riesgo de helada o sin riesgo.
Para decidirlo necesitamos dos cosas. Primero, pasar la medida del sensor a grados Celsius. Después, comparar el resultado con unos umbrales.
Son justo las dos herramientas que has practicado: una función con \return\ y un \if\ de tres opciones.
Primer paso: la función
La Gata explica la fórmula. El agua se hiela a 0 °C, que son 32 °F. Para pasar de Fahrenheit a Celsius se resta 32 y se multiplica por 5/9.
Esto es una de las funciones Python más sencillas que existen:
\\\`python
def f_a_c(f):
return (f – 32) * 5 / 9
\\\`
La función recibe un número (\f\), hace la cuenta y lo devuelve con \return\.
Segundo paso: la decisión
Ahora necesitamos tres respuestas. Los umbrales los elegimos nosotros:
- Si hace 0 °C o menos: helada.
- Si hace más de 0 y hasta 4 °C: riesgo de helada.
- Si hace más de 4 °C: sin riesgo.
¿Por qué 4 °C? Porque en una noche clara el suelo se enfría más que el aire donde está el termómetro. Con 4 °C en el aire, las hojas pueden estar ya cerca de 0 °C. Es una elección razonable, no una verdad universal: otra persona podría poner 3 o 5.
El programa completo
Cópialo en OnlineGDB o Programiz (Python 3). No hace falta instalar nada.
\\\`python
def f_a_c(f):
return (f – 32) * 5 / 9 # devuelve los grados Celsius
t = 35 # lo que marca el sensor, en °F
c = f_a_c(t) # guardamos lo que devuelve la función
print(round(c, 1), “°C”) # muestra el dato
if c <= 0:
print(“Helada”)
elif c <= 4:
print(“Riesgo de helada”)
else:
print(“Sin riesgo”)
\\\`
Al ejecutarlo con \t = 35\ sale:
\\\`
1.7 °C
Riesgo de helada
\\\`
Lee y predice: antes de cambiar nada, ¿qué saldría con \t = 23\? Pruébalo.
Return y print: la diferencia en una frase
\return\ devuelve un valor para que el programa lo use; \print\ solo lo muestra en pantalla y no se lo entrega a nadie.
Por eso \c = f_a_c(t)\ guarda el resultado y el \if\ puede usarlo.
Cómo probarlo
Cambia solo la línea \t = 35\ y ejecuta cada vez. Usa estos valores y anota qué sale:
| Sensor (°F) | Celsius | Resultado |
|---|---|---|
| 23 | -5.0 | Helada |
| 32 | 0.0 | Helada |
| 39 | 3.9 | Riesgo de helada |
| 41 | 5.0 | Sin riesgo |
Con 32 °F sale «Helada» porque la condición es \c <= 0\: el cero cuenta. Si fuera \c < 0\, justo 0 °C caería en «riesgo».
Preguntas de comprobación
Las comentamos en voz alta al empezar la clase. No hay entregable.
- ¿Qué imprime el programa si \
t = 30\? - ¿Qué pasa si cambias el orden y pones primero el bloque \
if c <= 4\(con su \print\) y después el bloque \elif c <= 0\? Prueba con \t = 23\. ¿Por qué sale eso? - ¿Qué pasa si en la función cambias \
return\por \print\? Pista: mira qué vale \c\y qué error aparece.
Qué estamos midiendo realmente
El sensor mide temperatura, pero no la de las lechugas. Mide la del aire en el punto donde está colocado. La conversión de unidades es exacta (es matemática), pero la medida tiene su propio error.
Por eso nuestro programa es un aviso orientativo, no un servicio meteorológico. Para avisos oficiales de heladas hay que consultar a AEMET. Y si quieres saber cómo se define una helada, la Wikipedia lo explica bien.
Medir no significa medir bien: calibrar el sensor, como hicimos en el Chisme 147, es lo que le da valor al dato.
Para seguir investigando
- Funciones en el tutorial oficial de Python.
- Otra estación que mide temperatura con una placa: el Chisme 125, la estación meteorológica.
- Una decisión por umbral con un sensor de humedad: el Chisme 132, la maceta del Lince.
Qué hemos aprendido
- Una función recibe datos, calcula y devuelve un resultado con \
return\. - \
print\muestra, \return\entrega. - Un \
if / elif / else\de tres opciones se evalúa de arriba abajo y se queda con la primera que se cumple. El orden importa.
Y mañana por la noche…
El Lince cierra el cuaderno, satisfecho. Las lechugas están a salvo… esta noche.
—Una cosa más —dice—. El termómetro apunta una medida cada hora. Son doce medidas por noche. ¿Tengo que escribir doce veces \t = ...\, doce \c = ...\ y doce \if\?
La Gata sonríe.
—Entonces ya no necesitas una función y un \if\. Necesitas algo que repita.
Eso es justo lo que veremos en clase.
Etiqueta:AIDARAC, bachillerato, funciones python, helada, ies monterroso, if elif else, montesteam, python, repaso python
