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