Je suis nouveau dans Python ... J'essayais du code avec Descriptor et j'exécutais le code ci-dessous pour changer Fahrenheit en Celsius. Mais je n'obtiens pas le résultat exact. Quelqu'un peut-il vous aider, comment ça marche?
J'ai essayé le code ci-dessous
import sys
import os
class Celsius:
def __get__(self, obj, owner):
return self.celsius
def __set__(self, obj, value):
self.celsius = (value-32)*5/9
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = f
t1 = Temperature(32)
t1.celsius = 0
if __name__ == "__main__":
t1 = Temperature(int(input()))
print(t1.fahrenheit, t1.celsius)
Résultat attendu: (212, 100,0) (Selon la formule) résultat réel: (212, -17.77777777777778) Comment calcule-t-il -17?
3 Réponses :
t1.celsius = 0 This is your mistake. You're creating Celsius class with zero value, so the setter sets (0 - 32)*5/9 that is - 17.777777777778
Transmettez également la valeur à la classe Celsius lorsque vous la prenez en entrée
Veuillez ajouter à votre réponse.
Vous ne devez pas initialiser t1.celsius avec 0, mais plutôt utiliser le setter de celsius dans Temperature .__ init__ :
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = self.celsius = f
Merci pour une réponse rapide ... cela fonctionne maintenant ... mais pourquoi attribuons-nous Fahrenheit à Celsius ..... cela devrait passer par Celsius Object / Class?
Heureux d'avoir pu aider. C'est parce que vous avez créé le setter de la classe de descripteur Celsius pour convertir Fahrenheit en Celsius. Nous assignons Fahrenheit à Celsius pour utiliser réellement ce setter.
Voici un simple gestionnaire de température qui gère les conversations de: Kelvin, Fahrenheit, Celsius
class Temperature:
def __init__(self, value, unit='C'):
self.value = value
if unit.upper() in ['C', 'F', 'K']:
self.unit = unit.upper()
else:
raise ValueError('Unit must be C|F|K')
@property
def kelvin(self):
if self.unit == 'K':
return self.value
elif self.unit == 'C':
return self.value - 273.15
else:
return (self.value - 273.15) * 9 / 5 + 32
@property
def celsius(self):
if self.unit == 'C':
return self.value
elif self.unit == 'K':
return self.value + 273.15
else:
return (self.value * 9 / 5) + 32
@property
def fahrenheit(self):
if self.unit == 'F':
return self.value
elif self.unit == 'C':
return (self.value - 32) * 5 / 9
else:
return (self.value - 32) * 5 / 9 + 273.15
t = Temperature(7,'k')
print(t.fahrenheit)
Comment? De là:
t1.celsius = 0; -32 * 5/9