2012-05-20 58 views
2

我正在嘗試學習python,並試圖創建一個將英里轉換爲公里並返回一些文本與轉換的簡單公式。將英里轉換爲公里時出錯

這是我有:

def mile(x): 
    z = x * 1.609344 
    print "%.2f" % z 

x = float(raw_input("How many miles are you traveling? ")) 

z = mile(x) 

print "That's about % kilometers." % z 

有人可以解釋爲什麼這不工作?我可以確定英里功能來打印帶有轉換的句子,但我不想那樣做。

+0

小問題:類似「mile(x)」的函數名稱很不清楚。對於這樣一個小例子來說,它應該不重要,但是如果其他人必須閱讀你的代碼,或者你以後回到你自己的項目中,它並沒有說什麼這樣做,這可能會讓人困惑。像'milesToKMs(x)的東西會好得多。 – Junuxx

+0

像這樣的問題是一個強烈的爭論,因爲一段時間沒有教給初學者關於'print'的問題。 –

回答

10

您的函數需要返回結果。

def mile(x): 
    z = x * 1.609344 
    return z 
+0

因此返回將保留腳本內存中的函數輸出? –

+1

'return'將從函數返回值。在普通英語中,「迴歸」這個詞的意義。從概念上講,函數是一個可以將參數引入並獲取返回值的框。 'z = mile(x)'意思是把''''''''''''扔進'mile'框,拿出所有出來的東西,並調用結果'z'「。 –

1

作爲一個解釋道:

你需要從函數返回的計算/轉換的值,以便可以將結果賦給變量z。你可以然後打印出來。

之前,您使用的打印價值的功能,並沒有返回任何東西,這就造成了越來越z分配None這就是爲什麼你打印在底部沒有工作。

一般來說,最好在函數內部完成你的工作/計算,然後返回一個你可以決定如何使用的值。

@wim顯示該函數的正確代碼。如果你現在做

z = mile(x) 
print "That's about %.2f kilometers." % z 

你會得到你期待的結果。 (請注意@Aaron Dufour指出的正確格式,當您打印結果時,您會在小數點後面顯示2個數字)順便說一句,您的第一個print聲明是正確的,只有第二個聲明丟失了完整的格式指示。

1

你有幾個問題。首先是你的函數不返回一個值。當行z = mile(x)運行時,mile(x)部分將被替換mile返回的任何內容。您想要的代碼是:

def mile(x): 
    z = x * 1.609344 
    return z 

請注意,它與您分配給該變量的變量無關;它不必匹配正在返回的變量。例如,y = mile(x)z = mile(x)都將正確地分配給給定的變量。

其次,您的字符串格式不起作用。這是看起來像"That's about % kilometers." % z的部分。字符串格式替換%<identifier>與給定的變量,其中<identifier>告訴什麼類型的變量(可能有關如何顯示它的一些信息)。您將需要標識符f,或者像以前的打印語句.2f那樣給出"That's about %.2f kilometers." % z

+0

+1有關字符串格式的好消息,我更新了我的問題以更正打印 - 希望您不介意 – Levon

相關問題