python的温度转换

iai*_*mcd 2 python decimal python-3.x floating-point-precision

我正在上免费的在线Python教程,它要我:

创建一个温度转换器,将华氏温度值转换为摄氏温度,反之亦然,使用以下两个公式,将华氏温度f与摄氏温度c相关联:

    f = c *  9/5 + 32
    c = (f -32)* 5/9 
Run Code Online (Sandbox Code Playgroud)

输入将是一个字符串,由一个浮点数字组成,紧接着是字母F或者C,例如"13.2C".我需要转换为其他温度刻度并以相同的格式打印转换后的值.例如,如果输入是"8F",那么输出应该是(大约)"-13.333C",如果输入"12.5C"则输出应该是"54.5F".

我的答案总是稍微偏离.例如,我得到-16.444444444444446C正确的输出-16.394444444444442C.我如何使用浮动有问题吗?我的代码如下:

def celsiusCon(farenheit):
   return (farenheit - 32)*(5/9)
def farenheitCon(celsius):
   return ((celsius*(9/5)) + 32)

inputStr = input()
inputDig = float(inputStr[0:-2])
if inputStr[-1] == 'C':
   celsius = inputDig
   print(farenheitCon(celsius),'F',sep ='')
if inputStr[-1] == 'F':
   farenheit = inputDig
   print(celsiusCon(farenheit),'C', sep='')
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

你正在切断最后两个字符,而不仅仅是最后一个字符:

inputDig = float(inputStr[0:-2])
Run Code Online (Sandbox Code Playgroud)

应该:

inputDig = float(inputStr[0:-1])
Run Code Online (Sandbox Code Playgroud)

这说明了您的准确性问题:

>>> celsiusCon(2.4)
-16.444444444444446
>>> celsiusCon(2.49)
-16.394444444444446
Run Code Online (Sandbox Code Playgroud)

由于切片从最后开始计数,切片到:-2单位和最后一位数的切割:

>>> '2.49F'[:-2]
'2.4'
>>> '2.49F'[:-1]
'2.49'
Run Code Online (Sandbox Code Playgroud)