Saltar al contenido

Cómo Convertir entre Grados Celsius, Fahrenheit y Kelvin en Python

Cómo convertir entre grados celsius, fahrenheit y kelvin en Python

Otro problema clásico en el aprendizaje de la programación es el de la conversión de temperaturas entre las tres escalas más conocidas: grados centígrados o Celsius (ºC), Kelvin (K) y grados Fahrenheit (ºF). En esta entrada vamos a ver cómo resolver este problema de conversión en Python, que se puede hacer mediante cálculos muy sencillos. Además, te explico cómo resolverlo utilizando la orientación a objetos mediante la creación de una clase Temperatura. Finalmente, revisaremos dos conceptos muy importantes aprendidos durante la resolución de este ejercicio.

Para convertir en Python entre las diferentes escalas de temperaturas Celsius (ºC), Fahrenheit (ºF) y Kelvin se realizan los siguientes cálculos:

  • De ºC a ºF: se multiplica por 1.8 y se suma 32.
  • De ºF a ºC: se resta 32 y se divide entre 1.8.
  • De ºC a K: se suma 273.15.
  • De K a ºC: se resta 273.15.
  • De ºF a K: se suma 459.67 y se divide entre 1.8.
  • De K a ºF: se multiplica por 1.8 y se resta 459.67.

Para terminar de clarificar estas conversiones te muestro a continuación una sencilla infografía y una tabla que, espero, te servirán de ayuda.

Infografía sobre cómo convertir temperaturas entre distintas escalas: celsius, fahrenheit y kelvin
Infografía: cómo convertir temperaturas entre las unidades ºC, ºF y K.

En la siguiente tabla puedes localizar fácilmente la expresión para una conversión determinada: busca en la primera columna la unidad de origen y en la primera fila la unidad de destino, y en el cruce de la fila con la columna correspondiente encontrarás la expresión que buscas, donde t contiene el valor de la temperatura a convertir:

De / ACelsius (ºC)Fahrenheit (ºF)Kelvin (K)
Celsius (ºC)-(t - 32) / 1.8t + 273.15
Fahrenheit (ºF)t * 1.8 + 32-(t + 459.67) / 1.8
Kelvin (K)t - 273.15t * 1.8 - 459.67-
Cómo convertir una temperatura t entre diferentes escalas de temperatura en Python

Ahora que ya tenemos las diferentes fórmulas en la cabeza, vamos a ir viendo una a una estas conversiones, cómo hacerlas en Python y cómo diseñar funciones que nos permitan hacer dichas conversiones de manera más cómoda y favoreciendo la reutilización de código.

Convertir de Grados Celsius a Grados Fahrenheit

Para convertir de grados Celsius o centígrados (ºC) a grados Fahrenheit (ºF) en Python se multiplica el valor en ºC por 1.8 y después se suma 32: sea la variable temperatura_c el valor en ºC a convertir, para obtener el equivalente en ºF realizaremos: temperatura_f = temperatura_c * 1.8 + 32.

¿Sencillo, no? Veamos algunos ejemplos con código en una consola de Python. Por ejemplo, vamos a convertir los valores 17 ºC y 25 ºC a ºF:

>>> 17 * 1.8 + 32
62.6
>>> 25 * 1.8 + 32
77.0

Ya vemos que el cálculo es muy sencillo. Para evitar repetir la fórmula una y otra vez cada vez que necesitemos hacer una conversión, crearemos una función, que vamos a llamar celsius_a_fahrenheit (aunque podrías llamarle de cualquier otra manera, por ejemplo convertir_c_en_f)y que recibirá un solo parámetro, que será una temperatura en ºC. Después podremos invocar a esta función para obtener valores de temperaturas en ºF a partir de otros en ºC:

def celsius_a_fahrenheit(temperatura):
    return temperatura * 1.8 + 32


temperatura_f = celsius_a_fahrenheit(17)
print(f'La temperatura en ºF es: {temperatura_f}')

temperatura_f = celsius_a_fahrenheit(25)
print(f'La temperatura en ºF es: {temperatura_f}')

El resultado de ejecutar el código de arriba es el siguiente:

La temperatura en ºF es: 62.6
La temperatura en ºF es: 77.0

En esta conversión podemos multiplicar por 9 / 5 en lugar de 1.8. Esto es así porque en realidad son el mismo valor: 9 / 5 == 1.8.

Es probable que si buscas la fórmula de conversión de ºC a ºF (o al revés) la encuentres escrita utilizando 9 / 5.

Y listo, con esto ya tienes una función para convertir de ºC a ºF. Pasamos a ver a continuación la conversión inversa.

Convertir de Grados Fahrenheit a Grados Celsius

Para convertir de grados Fahrenheit (ºF) a grados Celsius o centígrados (ºC) en Python se resta 32 al valor en ºF y después se divide entre 1.8: sea la variable temperatura_f el valor en ºF a convertir, para obtener su equivalente en ºC realizaremos: temperatura_c = (temperatura_f - 32) / 1.8.

Veamos un par de cálculos en una consola de Python. En esta ocasión vamos a convertir los valores 17 ºF y 41 ºF a sus equivalentes en ºC:

>>> (17 - 32) / 1.8
-8.333333333333334
>>> (41 - 32) / 1.8
5.0

Vamos a crear una función, al igual que hicimos en el caso anterior, para hacer esta conversión sin necesidad de repetir la fórmula cada vez que la necesitemos. Voy a llamar a esta función fahrenheit_a_celsius y recibirá como único parámetro una temperatura en ºF. La función devolverá su equivalente en grados Celsius:

def fahrenheit_a_celsius(temperatura):
    return (temperatura - 32) / 1.8


temperatura_c = fahrenheit_a_celsius(17)
print(f'La temperatura en ºC es: {temperatura_c}')

temperatura_c = fahrenheit_a_celsius(41)
print(f'La temperatura en ºC es: {temperatura_c}')

El resultado de la ejecución del código anterior es:

La temperatura en ºC es: -8.333333333333334
La temperatura en ºC es: 5.0

Hasta aquí ya sabemos cómo convertir entre sí grados Celsius y grados Fahrenheit. Pasemos a ver las conversiones entre grados Celsius y Kelvin.

Convertir de Grados Celsius a Kelvin

Para convertir de grados Celsius o centígrados (ºC) a Kelvin (K) en Python únicamente se suma el valor 273.15 a la temperatura en ºC: sea la variable temperatura_c el valor en ºC a convertir, para obtener su equivalente en K realizaremos: temperatura_k = temperatura_c + 273.15.

A ver, te cuento...

Te envío todos los días un consejo para que cada día seas mejor en Python.
Puede ser un truco, una píldora, un tip, una historia de mentalidad o motivación, cualquier cosa...
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.

Día que estás fuera, consejo sobre Python que te pierdes.
Abajo te suscribes a la lista de correo y te regalo un montón de cosas: La Hoja de Referencia de Python, el Tutorial Interactivo, 30 Ejercicios de Python y la Guía de ChatGPT y Python. By the face.

✅ Contenido exclusivo de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras



Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.

Esta conversión es una de las más fáciles, al igual que la contraria (de K a ºC), pues basta con sumar el valor 273.15.

Veamos en una consola de Python un par de conversiones, por ejemplo, de los valores 30 ºC y 55.3 ºC a K:

>>> 30 + 273.15
303.15
>>> 55.3 + 273.15
328.45

De nuevo, vamos a crear una función para hacer esta conversión. Llamaremos celsius_a_kelvin a nuestra función y recibirá un único parámetro, que será una temperatura en ºC. La función devolverá el equivalente de la temperatura recibida en K.

def celsius_a_kelvin(temperatura):
    return temperatura + 273.15


temperatura_k = celsius_a_kelvin(30)
print(f'La temperatura en K es: {temperatura_k}')

temperatura_k = celsius_a_kelvin(55.3)
print(f'La temperatura en K es: {temperatura_k}')

Es importante ver aquí que, realmente, no ganamos demasiado en reutilización de código al usar esta función, ya que el cálculo realizado en este caso es muy sencillo (¡solo una suma!). No obstante, sí que se gana mucho en legibilidad y se facilita la compresión del código, pues si leemos celsius_a_kelvin(30) nos quedará perfectamente claro lo que hace el código, mientras que al leer 30 + 273.15 siempre nos puede quedar la duda, o no lo entenderemos a la primera.

El resultado de la ejecución del código de arriba será el siguiente:

La temperatura en K es: 303.15
La temperatura en K es: 328.45

Igual de fácil es la conversión inversa, de K a ºC. ¡Veámosla!

Convertir de Kelvin a Grados Celsius

Para convertir de Kelvin (K) a grados Celsius o centígrados (ºC) en Python solo hay que restar 273.15 a la temperatura en K: sea la variable temperatura_k el valor en K a convertir, para obtener su equivalente en ºC realizaremos: temperatura_c = temperatura_k - 273.15.

Puedes ver, nuevamente, que esta también es una conversión muy fácil de hacer. Veamos un par de ejemplos en la consola de Python. Esta vez convertiremos las temperaturas 265.9 K y 297.15 K a sus equivalentes en ºC:

>>> 265.9 - 273.15
-7.25
>>> 297.15 - 273.15
24.0

Pasemos a crear una función para la realización de este cálculo. La llamaremos kelvin_a_celsius, recibirá como único parámetro una temperatura en Kelvin y devolverá su equivalente en grados ºC:

def kelvin_a_celsius(temperatura):
    return temperatura - 273.15


temperatura_c = kelvin_a_celsius(265.9)
print(f'La temperatura en ºC es: {temperatura_c}')

temperatura_c = kelvin_a_celsius(297.15)
print(f'La temperatura en ºC es: {temperatura_c}')

El resultado de la ejecución de este código será el siguiente:

La temperatura en ºC es: -7.25
La temperatura en ºC es: 24.0

Y ya solo nos quedan las últimas dos posibles conversiones entre grados ºF y K. Vamos a por ellas.

Convertir de Grados Fahrenheit a Kelvin

Para convertir de grados Fahrenheit (ºF) a Kelvin (K) en Python se suma 459.67 al valor en ºF y después se divide entre 1.8: sea la variable temperatura_f el valor en ºF a convertir, para obtener su equivalente en K realizaremos: temperatura_k = (temperatura_f + 459.67) / 1.8.

Vamos a imaginar que queremos convertir las temperaturas 50 ºF y 75 ºF a Kelvin. Para ello basta con aplicar la expresión que acabamos de ver. Probémoslo en una consola de Python:

>>> (50 + 459.67) / 1.8
283.15
>>> (75 + 459.67) / 1.8
297.03888888888895

Y de nuevo, y como hicimos con todos los casos de conversiones anteriores, realizaremos aquí una función para la reutilización de código y evitar tener que saberse de memoria esta expresión y escribirla cada vez que la necesitemos. A la función la llamaremos fahrenheit_a_kelvin (¡qué sorpresa!) y recibirá como único parámetro una temperatura en ºF. La función realizará el cálculo correspondiente y devolverá la temperatura en Kelvin:

def fahrenheit_a_kelvin(temperatura):
    return (temperatura + 459.67) / 1.8


temperatura_k = fahrenheit_a_kelvin(50)
print(f'La temperatura en K es: {temperatura_k}')

temperatura_k = fahrenheit_a_kelvin(75)
print(f'La temperatura en K es: {temperatura_k}')

El código anterior mostrará el siguiente resultado por pantalla:

La temperatura en K es: 283.15
La temperatura en K es: 297.0388888888889

Convertir de Kelvin a Grados Fahrenheit

Para convertir de Kelvin (K) a grados Fahrenheit (ºF) en Python se multiplica la temperatura en K por 1.8 y después se resta 459.67: sea la variable temperatura_k el valor en K a convertir, para obtener su equivalente en ºF realizaremos: temperatura_f = temperatura_k * 1.8 - 459.67.

Al igual que en los casos anteriores, vamos a probar este cálculo en un par de ejemplos en una consola de Python. Vamos a convertir los valores 312 K y 295.32 K en sus equivalentes en grados ºF:

>>> 312 * 1.8 - 459.67
101.93
>>> 295.32 * 1.8 - 459.67
71.906

Ahora vamos a crear una función, que llamaremos kelvin_a_fahrenheit, para hacer esta conversión y reutilizar el código de esta manera, así nos evitaremos tener que escribir la expresión cada vez que necesitemos hacer la conversión y evitando así posibles errores en el código. La función tendrá un solo parámetro que será la temperatura en K a convertir:

def kelvin_a_fahrenheit(temperatura):
    return temperatura * 1.8 - 459.6


temperatura_f = kelvin_a_fahrenheit(312)
print(f'La temperatura en ºF es: {temperatura_f}')

temperatura_f = kelvin_a_fahrenheit(295.32)
print(f'La temperatura en ºF es: {temperatura_f}')

El código anterior mostrar el siguiente resultado por pantalla:

15 conceptos fundamentales que necesitas conocer para aprender y dominar Python

Te voy a hacer cuatro regalos (no uno, no dos, no tres, cuatro) que hablan de estos 15 conceptos fundamentales de Python: mi Tutorial Básico Interactivo de Python, una cheat sheet de Python en español: La Hoja de Referencia de Python, una guía de ChatGPT y Python y 30 ejercicios de Python (es un reto para ti).

Estos regalos son exclusivos para los suscriptores de Código Pitón.

👍 Quiero mis cuatro regalos

La temperatura en ºF es: 101.93
La temperatura en ºF es: 71.906

Reutilizando el código y las funciones

Te habrás dado cuenta de que, en realidad, no son necesarias conocer ni realizar tantas conversiones. Me explico: si necesito pasar de grados ºF a K, por ejemplo, y conozco la manera de pasar de ºF a ºC y también conozco cómo pasar de ºC a K, ya no necesito saber como hacer la conversión de ºF a K, pues haciendo las dos conversiones que conozco una detrás de otra, encadenándolas, podré llegar al mismo resultado.

Esto hace que conociendo cuatro de las seis conversiones explicadas en este artículo podamos hacer cualquiera de las conversiones que necesitamos.

Así se podrían reescribir dos de las funciones aquí presentadas invocando a otras dos funciones.

En el siguiente código te muestro cuatro de las seis funciones ya presentadas: fahrenheit_a_celsius, celsius_a_kelvin, kelvin_a_celsius y celsius_a_fahrenheit. Las dos que faltan, fahrenheit_a_kelvin y kelvin_a_fahrenheit, las reescribiré en términos de las otras:

def fahrenheit_a_celsius(temperatura):
    return (temperatura - 32) / 1.8

def celsius_a_kelvin(temperatura):
    return temperatura + 273.15

def fahrenheit_a_kelvin(temperatura): # nueva forma de codificar esta función
    return celsius_a_kelvin(fahrenheit_a_celsius(temperatura))

def kelvin_a_celsius(temperatura):
    return temperatura - 273.15

def celsius_a_fahrenheit(temperatura):
    return temperatura * 1.8 + 32

def kelvin_a_fahrenheit(temperatura): # nueva forma de codificar esta función
    return celsius_a_fahrenheit(kelvin_a_celsius(temperatura))

Fíjate en que he elegido esas dos funciones para reescribir, pero podría haber elegido otras siempre y cuando las demás me permitan obtener la conversión correspondiente.

Ni que decir tiene que estas nuevas funciones funcionan perfectamente y de la misma manera que las anteriores, con leves diferencias a causa de los posibles redondeos, claro. Vamos a probarlas:

temperatura_k = fahrenheit_a_kelvin(50)
print(f'La temperatura en K es: {temperatura_k}')

temperatura_f = kelvin_a_fahrenheit(312)
print(f'La temperatura en ºF es: {temperatura_f}')

El resultado por pantalla del código anterior será el siguiente:

La temperatura en K es: 283.15
La temperatura en ºF es: 101.93000000000005

Utilizando Orientación a Objetos

Vamos a utilizar todos los conceptos aprendidos en este artículo para resolver el problema de la conversión de temperaturas utilizando el paradigma de la orientación a objetos.

Crearemos una clase llamada Temperatura que tendrá un único atributo que representará el valor de la temperatura. La ventaja aquí es que podemos elegir una única escala o unidad para representar internamente la temperatura y hacer las conversiones necesarias desde esa única unidad, con lo que no necesitaremos todas las posibles conversiones. Vamos a optar por los grados Celsius para esta representación interna, pero tú podrías elegir cualquiera de las otras dos.

Además, añadiremos a la clase Temperatura operaciones para obtener la temperatura en cualquier unidad ºC, ºF o K.

También añadiremos métodos estáticos para poder crear objetos Temperatura a partir de temperaturas en K o ºF.

Finalmente, dotaremos a la clase de la posibilidad de poder sumar y restar temperaturas utilizando los operadores + y - para poder operar de manera sencilla.

Pero vayamos paso a paso, que son muchas cosas...

Creación de la clase

La clase que crearemos será muy sencilla, pues como hemos dicho, tendrá un solo atributo que servirá para representar una temperatura. Esta temperatura se guardará en grados Celsius internamente (atributos celsius), por lo que el constructor de la clase (__init__) recibirá una temperatura en esa unidad:

class Temperatura(object):

    def __init__(self, temperatura_c):
        self.celsius = temperatura_c

Añadiendo operaciones para las conversiones

Ahora que tenemos una clase que almacena internamente una temperatura en ºC, añadiremos operaciones para convertir a grados Fahrenheit y a Kelvin, que llamaremos en_fahrenheit y en_kelvin.

Además, para homogeneizar y por conveniencia, y a pesar de que podemos acceder al valor de la temperatura en ºC accediendo directamente al atributo celsius, vamos a añadir una tercera operación en_celsius, aunque no sería necesaria:

    def en_fahrenheit(self): # convertimos ºC en ºF
        return self.celsius * 1.8 + 32

    def en_kelvin(self): # convertimos ºC en K
        return self.celsius + 273.15

    def en_celsius(self): # añadimos esta operación por homogeneizar
        return self.celsius

Añadiendo operaciones para crear temperaturas desde grados Fahrenheit y Kelvin

Hasta ahora podemos tener objetos Temperatura que almacenan temperaturas en grados centígrados y podemos convertir a ºF y a K, pero todavía no podemos hacer las conversiones inversas ni crear objetos a partir de temperaturas en ºF y K.

Para añadir esta posibilidad proporcionaremos métodos estáticos que nos permitan crear objetos de nuestra clase a partir de valores en estas otras unidades.

¡Recuerda! Los métodos estáticos son aquellos que se pueden añadir a una clase pero que no tienen acceso ni a los elementos de la propia clase ni a los de los objetos o instancias de la misma. No obstante, tiene sentido que estos métodos estén integrados en la clase.

Proporcionaremos a nuestra clase, entonces, las operaciones desde_fahrenheit y desde_kelvin. Por homogeneizar y por conveniencia, añadiremos también el método desde_celsius, aunque no sea necesario en realidad:

Recibe contenido exclusivo de Python y programación y obtén gratis mi reto para ti: 30 Ejercicios de Python.
Todos los días te envío un consejo sobre trucos de Python, ejercicios, secretos, mentalidad, sintaxis, historias de motivación, etc.
Día que estás fuera, consejo sobre Python que te pierdes.
✅ Contenido de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras


Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.
    @staticmethod
    def desde_fahrenheit(temperatura_f): # convertimos ºF en ºC
        return Temperatura((temperatura_f - 32) / 1.8)

    @staticmethod
    def desde_kelvin(temperatura_k): # convertimos K en ºC
        return Temperatura(temperatura_k - 273.15)

    @staticmethod
    def desde_celsius(temperatura_c): # añadimos esta operación por homogeneizar
        return Temperatura(temperatura_c)

Permitiendo operaciones sencillas con la clase

Para poder sumar y restar de manera cómoda nuestros objetos, sobreescribiremos los métodos __add__ y __sub__ que se encargarán de crear nuevas instancias de la clase realizando, respectivamente, la suma y la resta de los valores de otras dos instancias.

Fíjate en que estas operaciones reciben dos objetos: el propio objeto self y otro objeto que también debe ser una instacia de Temperatura:

    # sobreescribimos la función __add__ para poder sumar dos objetos Temperatura
    def __add__(self, other):
        return Temperatura(self.celsius + other.celsius)

    # sobreescribimos la función __sub__ para poder restar dos objetos Temperatura
    def __sub__(self, other):
        return Temperatura(self.celsius - other.celsius)

Mostrando la información de nuestra clase

Finalmente, para poder mostrar de manera legible la temperatura almacenada en nuestros objetos, sobreescribiremos el método __str__ para obtener una representación de los mismos. Fíjate en que utilizo la expresión de formato :.3f dentro del f-string para poder mostrar las temperaturas con tres decimales:

    # sobreescribimos la función __str__ para obtener una representación legible en modo texto de la temperatura
    def __str__(self):
        return f'Temperatura: {self.celsius:.3f} ºC = {self.en_fahrenheit():.3f} ºF = {self.en_kelvin():.3f} K.'

Trabajando con nuestra clase

¡Perfecto! Ya tenemos nuestra clase lista, vamos a ver el código completo y después mostraremos algunos ejemplos de cómo trabajar con ella para que veas lo sencillo y cómodo que resulta.

class Temperatura(object):

    def __init__(self, temperatura_c):
        self.celsius = temperatura_c

    def en_fahrenheit(self): # convertimos ºC en ºF
        return self.celsius * 1.8 + 32

    def en_kelvin(self): # convertimos ºC en K
        return self.celsius + 273.15

    def en_celsius(self): # añadimos esta operación por homogeneizar
        return self.celsius

    # sobreescribimos la función __add__ para poder sumar dos objetos Temperatura
    def __add__(self, other):
        return Temperatura(self.celsius + other.celsius)

    # sobreescribimos la función __sub__ para poder restar dos objetos Temperatura
    def __sub__(self, other):
        return Temperatura(self.celsius - other.celsius)

    # sobreescribimos la función __str__ para obtener una representación legible en modo texto de la temperatura
    def __str__(self):
        return f'Temperatura: {self.celsius:.3f} ºC = {self.en_fahrenheit():.3f} ºF = {self.en_kelvin():.3f} K.'

    @staticmethod
    def desde_fahrenheit(temperatura_f): # convertimos ºF en ºC
        return Temperatura((temperatura_f - 32) / 1.8)

    @staticmethod
    def desde_kelvin(temperatura_k): # convertimos K en ºC
        return Temperatura(temperatura_k - 273.15)

    @staticmethod
    def desde_celsius(temperatura_c): # añadimos esta operación por homogeneizar
        return Temperatura(temperatura_c)

Ya tenemos nuestra clase. Vamos a ver algunos ejemplos de uso.

¿Cómo crear instancias de Temperatura desde una temperatura en ºC y acceder al valor?

temperatura = Temperatura(25)  # creamos una temperatura usando el constructor de la clase
print(f'La temperatura en ºC es {temperatura.celsius}')  # accedemos directamente al atributo celsius
print(f'La temperatura en ºC es {temperatura.en_celsius()}')  # accedemos al valor en ºC usando el método en_celsius

temperatura = Temperatura.desde_celsius(18.5)  # creamos una temperatura usando la operación estática de coveniencia
print(f'La temperatura en ºC es {temperatura.celsius}')
print(f'La temperatura en ºC es {temperatura.en_celsius()}')

El resultado del código anterior será el siguiente:

La temperatura en ºC es 25
La temperatura en ºC es 25
La temperatura en ºC es 18.5
La temperatura en ºC es 18.5

Veamos ahora cómo podemos obtener la temperatura de una instancia de nuestra clase en K o en ºF. Además llamaremos a la función print pasándole como parámetro un objeto de la clase, lo que hará que se invoque a la función __str__ para obtener la cadena de texto que hemos definido:

temperatura = Temperatura(25)
print(f'La temperatura en ºC es {temperatura.en_celsius()}')  # accedemos al valor en ºC
print(f'La temperatura en ºF es {temperatura.en_fahrenheit()}')  # convertimos a ºF
print(f'La temperatura en K es {temperatura.en_kelvin()}')  # convertimos a K
print(temperatura)  # mostramos por pantalla (se usa __str__)

El resultado será el siguiente:

La temperatura en ºC es 25
La temperatura en ºF es 77.0
La temperatura en K es 298.15
Temperatura: 25.000 ºC = 77.000 ºF = 298.150 K.

Ahora crearemos instancias de Temperatura desde valores en ºF y en K:

temperatura = Temperatura.desde_fahrenheit(100)
print(temperatura)

temperatura = Temperatura.desde_kelvin(295)
print(temperatura)
Temperatura: 37.778 ºC = 100.000 ºF = 310.928 K.
Temperatura: 21.850 ºC = 71.330 ºF = 295.000 K.

Y finalmente, vamos a realizar operaciones sencillas usando los operadores + y -, que nos permitirán sumar y restar temperaturas gracias a haber redefinido los métodos __add__ y __sub__. También veremos cómo esta clase simplifica mucho las cosas cuando queremos, por ejemplo, obtener la temperatura en ºF resultado de restar 298 K y 8.5 ºC:

temperatura = Temperatura(25) + Temperatura(12)  # sumamos instancias de Temperatura
print(temperatura)

temperatura = Temperatura(31) - Temperatura(17)  # restamos instancias de Temperatura
print(temperatura)

# Operamos fácilmente con temperaturas en distintas unidades
temperatura = Temperatura.desde_kelvin(298) - Temperatura.desde_celsius(8.5)
print(f'La temperatura en ºF es {temperatura.en_fahrenheit()}')
print(temperatura)

El resultado será el siguiente:

Temperatura: 37.000 ºC = 98.600 ºF = 310.150 K.
Temperatura: 14.000 ºC = 57.200 ºF = 287.150 K.
La temperatura en ºF es 61.43000000000004
Temperatura: 16.350 ºC = 61.430 ºF = 289.500 K.

Para que la clase Temperatura fuese un poco más completa, podríamos utilizar condicionales para realizar determinadas comprobaciones, como por ejemplo, no manejar temperaturas por debajo del llamado cero absoluto (0 K), o para asegurarnos de que el objeto other recibido como parámetro en los operaciones __add__ y __sub__ son en realidad instancias de nuestra clase.

Conclusión

Bueno, como puedes observar, realizar estas conversiones es una tarea muy sencilla en Python. Y espero que este artículo te haya resultado de utilidad y te permita aprender alguna cosa nueva.

Quiero remarcar dos conceptos muy importantes que se manejan en la resolución del problema que hemos visto.

Por un lado tenemos el concepto de la reutilización de código, que hemos visto en dos niveles diferentes: hemos encapsulado las expresiones de conversión dentro de funciones para poder reutilizarlas cuando queramos, pero además, dos de las expresiones las hemos desarrollado a partir de otras dos, reusando funciones ya creadas.

Por otro lado, y centrándonos en la resolución basada en programación orientada a objetos, hemos visto cómo podemos usar una representación única, es decir, almacenar el valor de temperatura en una escala concreta, y realizar los cálculos necesarios teniendo en cuenta esta unidad. Este concepto, que es bastante utilizado, nos permite no tener que preocuparnos por la unidad en la que se encuentra un valor concreto, ya que sabemos que siempre estará en la misma. Si usáramos simplemente una variable, tendríamos que asegurarnos de conocer su unidad para aplicar la expresión de conversión adecuada. Y aún así, el riesgo de cometer errores es más alto.

Y nada más por hoy, si te interesan otros problemas de conversión en Python puedes echar un ojo a los siguientes artículos:

Si te gusta el contenido de este blog, considera el suscribirte a la newsletter para estar informado de novedades así como trucos y consejos de Python. Además, recibirás totalmente gratis La Hoja de Referencia de Python, muy útil para tu aprendizaje.

Si te ha gustado lo que has leído, ESTO TE VA A ENCANTAR...

Te envío todos los días un consejo para que cada día seas mejor en Python.
Puede ser un truco, una píldora, un tip, una historia de mentalidad o motivación, cualquier cosa...
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.

Día que estás fuera, consejo sobre Python que te pierdes.
Abajo te suscribes a la lista de correo y te regalo un montón de cosas: La Hoja de Referencia de Python, el Tutorial Interactivo, 30 Ejercicios de Python y la Guía de ChatGPT y Python. By the face.

✅ Contenido exclusivo de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras



Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.
30 ejercicios de Python

Mira, te envío 30 ejercicios de Python para practicar todo el Python que necesitas saber para programar con soltura.

Son variados y de distintas dificultades. Tendrás un poco de todo: variables, condicionales, funciones, ficheros, listas, diccionarios, etc.

Y de regalo: La Hoja de Referencia de Python. Pon tu email aquí abajo ahora y te los envío.

Información Básica de Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y ofertas de productos y servicios propios.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.