2014-01-25 40 views
-1

我在ubuntu 12.04的python 2.7解釋器中出現了錯誤的結果。 我已經在線解釋器中試過這段代碼,代碼沒問題。轉換溫度時出現錯誤結果

#print temperature 

kindc = str(raw_input("Please type c for celsius or f for fareneit ")) 
tempc = float(raw_input("please type the number of degrees you want to convert ")) 

def result(kind,temp): 
    if kind == "c": 
     result1 = float((temp-32)*9/5) 
     return result1 
    else: 
     result1 = float(5/9*(temp-32)) 
     return result1 

print result(kindc,tempc) 
+3

你得到什麼樣的結果,那你希望得到呢?你用什麼在線翻譯來測試? –

回答

2

在Python 2中,5/9使用了floor分割,因爲兩個操作數都是整數。部隊通過使浮子的論點至少一個浮點除法:

result1 = (5.0/9.0) * (temp - 32) 

攝氏轉換很可能不會從這個苦,因爲(temp - 32) * 9結果是最有可能已經是浮動的,但它是最好的方法一致在這裏:

result1 = (temp * 9.0/5.0) + 32 

請注意,您需要在這裏使用正確的公式;乘以9/5後加+ 32。這兩種公式都不需要將結果投射到這裏的float();輸出已經是一個浮點值。

如果您使用的在線Python解釋器使用Python 3,那麼您的代碼將起作用,因爲/運算符不是真正的除法運算(總是導致float值)。也可能是該翻譯具有:

from __future__ import division 

將Python 2切換到Python 3行爲的導入。

最終轉換功能則是:

def result(kind, temp): 
    if kind == "c": 
     result1 = (temp * 9.0/5.0) + 32 
     return result1 
    else: 
     result1 = 5.0/9.0 * (temp - 32) 
     return result1 
1

你想攝氏到華氏溫度轉換爲:

result1 = float(temp)*9/5+32 
+0

@MartijnPieters這是正確的公式,你有什麼問題? –

+0

您的第一次修訂完全不同。我現在看到你的意思,轉換公式本身也是有問題的。但問題是,華氏溫度到攝氏溫度的轉換使用的是地板分割而不是真正的分割。 –

+0

Python是否保證等優先運算符的從左到右的評估?也就是說,'float(temp)* 9/5'總是被視爲與'(float(temp)* 9)/ 5'相同,並且從不'float(temp)*(9/5)' – chepner