所以我有一个处理温度的课程,这是非常基础的,但由于某些原因,摄氏温度到华氏温度的转换无法在课堂的某个区域返回正确的结果。否则就是这样。
我正在编写添加方法,为了添加两种不同类型的温度,必须进行转换。我有一种在摄氏和华氏之间切换的方法,当我在测试程序中这样做时它会起作用:
Testing celsius method:
Converting to celsius...
Result: Temperature: -12.222222222222221 degrees C
Testing fahrenheit method:
Converting back to fahrenheit...
Result: Temperature: 10.0 degrees F
但是,如果我尝试使用它来添加两种不同类型(额外的打印以查看它正在做什么):
def __add__( self, other ):
if type( other ) != Temperature:
other = Temperature( other )
a_scale = self.__scale
if a_scale == 'F':
print(self)
print(other)
temp_1 = self.fahrenheit()
temp_2 = other.fahrenheit()
print(temp_1)
print(temp_2)
temp_3 = temp_1.__magnitude + temp_2.__magnitude
return Temperature( temp_3, 'F' )
elif a_scale == 'C':
print(self)
print(other)
temp_1 = self.celsius()
temp_2 = other.celsius()
print(temp_1)
print(temp_2)
temp_3 = temp_1.__magnitude + temp_2.__magnitude
return Temperature( temp_3, 'C')
打印出它将10摄氏度转换为68华氏度(???)
输出:
Testing addition
Temp 2 = Temperature: 20 degrees C
Performing temp1 + temp2...
Temperature: 10 degrees F
Temperature: 20 degrees C
Temperature: 10 degrees F
Temperature: 68.0 degrees F
Temperature: 78.0 degrees F
这是华氏温度方法:
def fahrenheit( self ):
if self.__scale == 'F':
return Temperature( self.__magnitude, 'F')
elif self.__scale == 'C':
f = ((self.__magnitude * 9) / 5) + 32
return Temperature( f, 'F' )
就我所知,它完全正常。
Celsius,差不多相同:
def celsius( self ):
if self.__scale == 'C':
return Temperature( self.__magnitude, 'C')
elif self.__scale == 'F':
c = ((self.__magnitude - 32) * 5) / 9
return Temperature( c, 'C' )
我不能为我的生活弄清楚为什么会这样:(
答案 0 :(得分:0)
您似乎误读了自己程序的输出。输出的值是:
Temperature: 10 degrees F # self
Temperature: 20 degrees C # other
Temperature: 10 degrees F # temp_1 = self.fahrenheit()
Temperature: 68.0 degrees F # temp_2 = other.fahrenheit()
Temperature: 78.0 degrees F # The sum of the above two
因此,10°F变为10°F,20°C变为68°F,这是正确的。
答案 1 :(得分:0)
我猜,原因是整数算术。试试((self.__magnitude - 32) * 5) / 9.0
和((self.__magnitude * 9) / 5.0) + 32
。我已经完成了一个简单的测试(没有类的东西,只是数学),它给出了正确的结果。