2017-09-26 214 views
-3

我是一名初學者編碼人員,只想感謝您的幫助。我可能犯了一些新秀錯誤,但這就是我在這裏學習的原因。我無法弄清楚什麼是錯的,但可以說我塞在一個字符串(50,K,C)應50開爾文轉換爲攝氏溫度,但我的代碼什麼也不做有人可以告訴我我的代碼有什麼問題

def temperature_converter(value, scale_from, scale_to): 

    if scale_from == "F" and scale_to == "C": 
     (value -32)* 5/9 for F to C 
     return 
    elif scale_from == "F" and scale_to == "K": 
     (value * 5/9) + 273 for F to K 
     return 
    elif scale_from == "C" and scale_to == "F": 
     value * (9/5) + 32 for C to F 
     return 
    elif scale_from == "C" and scale_to == "K": 
     (value + 273) for C to K 
     return 
    elif scale_from == "K" and scale_to == "F": 
     9/5 * (value - 273) + 32 for K to F 
     return 
    elif scale_from == "K" and scale_to == "C": 
     value - 273 for K to F 
     return 
+2

請提供調用代碼,並修復縮進*反映了你確實有*,壓痕已meaningin的Python。最簡單的方法:直接複製並粘貼您的編輯器,然後突出顯示並按下ctrl-k。 –

+4

'C *到F'的值*(9/5)+32甚至不是有效的python。 –

+1

1.您未調用該功能;這實際上並不合理。 – jonrsharpe

回答

2

好吧,讓我們把它的點點滴滴:

  1. for F to C和其他類似的「聲明」,你在你的代碼是無效的Python。另外,它們似乎沒有任何用處,所以我已經將它們刪除了。
  2. 對變量執行的操作不是在原地完成的。當您執行(value -32)* 5/9時,您必須在某處存儲該結果。除非您爲其分配值,否則value將始終保持不變。
  3. 當你return,你必須返回東西。只需擁有return關鍵字,就不會執行任何操作。

這是您的代碼的修訂版本。我已經故意製成與第一和第二殼體(F至C,F至K)更詳細的說明點2:

def temperature_converter(value, scale_from, scale_to): 
    if scale_from == "F" and scale_to == "C": 
     a = (value -32)* 5/9 #Assign the modified value to a variable 
     return a 
    elif scale_from == "F" and scale_to == "K": 
     value = (value * 5/9) + 273 #The value variable can be reused 
     return value 
    elif scale_from == "C" and scale_to == "F": 
     return value * (9/5) + 32 #Always return something. Don't have just the keyword 
    elif scale_from == "C" and scale_to == "K": 
     return value + 273 
    elif scale_from == "K" and scale_to == "F": 
     return 9/5 * (value - 273) + 32 
    elif scale_from == "K" and scale_to == "C": 
     return value - 273 

幾個加分:

  • 最好是聚成一團你的情況,我將在下面進行演示。它使IMO更具可讀性的代碼。
  • 您應該始終標準化您的輸入。在這種情況下,考慮到用戶輸入"f"的可能性。
  • 帳戶被給予虛假的論點。

最終代碼將是:

def temperature_converter(value, scale_from, scale_to): 
    scale_from = scale_from.upper() #Make all arguments upper case 
    scale_to = scale_to.upper() 

    if scale_from == "F": #Group cases together 
     if scale_to == "C": 
      return (value -32)* 5/9 
     elif scale_to == "K": 
      return (value * 5/9) + 273 
    elif scale_from == "C": 
     if scale_to == "F": 
      return value * (9/5) + 32 
     elif scale_to == "K": 
      return value + 273 
    elif scale_from == "K": 
     if scale_to == "F": 
      return 9/5 * (value - 273) + 32 
     elif scale_to == "K": 
      return value - 273 

    raise ValueError("Invalid argument") #Have predictable behavior if invalid input is given 
+0

你可以只有一個'return'語句並且可以將結果存儲在單變量。是不是更pythonic,而不是有一個單一的函數**五返回**語句。 – Ishpreet

+0

只要一切都簡潔,我不會看到多重回報問題。這歸結於個人偏好。但是如果我們真的想壓縮OP的代碼,還有其他方法(即使用字典)。 – stybl

+0

通常,在處理n個單元之間的轉換時,處理每個可能的轉換都需要O(n^2)個代碼路徑。相反,選擇一箇中間單位(不一定是實際單位之一),並且只定義中介和目標之間的轉換。這隻需要O(n)個代碼路徑。在這種情況下,只需使用K作爲中介;將任何輸入轉換爲開爾文(如有必要),然後將開爾文轉換爲最終目標(如有必要)。例如,這避免了必須將攝氏溫度直接轉換成華氏溫度。 – chepner

0

我們不妨給予正確的轉換公式而你在這裏

def temperature_converter(value, scale_from, scale_to) : 

    if scale_from == "F" and scale_to == "C" : 
     return (value - 32.0) * 5/9 #for F to C 
    elif scale_from == "F" and scale_to == "K": 
     return (value + 459.67) * 5/9 #for F to K 
    elif scale_from == "C" and scale_to == "F": 
     return value * (9.0/5.0) + 32 #for C to F 
    elif scale_from == "C" and scale_to == "K": 
     return value + 273.15 #for C to K 
    elif scale_from == "K" and scale_to == "F": 
     return ((value - 273.15) * 1.8) + 32 #for K to F 
    elif scale_from == "K" and scale_to == "C": 
     return value - 273.15 #for K to C 

然後調用它像這樣

result = temperature_converter(50, "F", "C") 

或此

result = temperature_converter(50, 'F', 'C') 

我想你也可能調用了錯誤的函數。

有一件很重要的事情,你可能不知道,也沒有人告訴你。它可能會導致您主要頭痛,試圖找出爲什麼你得到錯誤的值。

整數浮點號碼(或浮子)。簡單地說,整數是整數,但浮點數可以使用小數和小數值。

如果只使用整數,它會將值四捨五入爲整數。我注意到這與攝氏到華氏轉換有很大關係。當我使用9/5而不是9.0/5.0時,它的價值大大增加了,我的回答很順利。這是因爲它將整數9/5湊整,而不是9/5 = 1.8。

請記住這一點。確保你的Python解釋器以你期待的方式使用浮點數(十進制值),並按照你想要的方式進行數學運算。

我在所有的公式中都包含了小數點,所以Python在數學上使用了浮點數。 (至少我的Python解釋器是。)

此外,請仔細檢查公式。

編輯:

不要忘了打印你的答案

print(result) 
相關問題