2013-10-01 45 views
5

這裏是我的程序的Python:我的功能是我想要做什麼它

def reverse(letters): 
    backwards = "" 
    i = len(letters) - 1 
    while i >= 0: 
     backwards = backwards + letters[i] 
     i = i - 1 
    print (backwards) 

print (reverse("hello")) 

它的工作原理,它打印出「2009東海生日賀」後返回「無」,但之後,它打印「無」上新隊。我在問爲什麼這是。 顯然,程序是反轉一個單詞,代碼工作,沒有一個函數它不會不打印任何東西,所以我不知道它爲什麼在函數中。這是在另一個更大的程序中使用的,所以我需要它作爲一個函數,並且因爲它適用於學校,我不允許簡單地使用.reverse()函數。所以如果可能的話,我真的需要修正這些代碼而不是大的修改。

+1

[可能的函數列表中的項返回。 Python](http://stackoverflow.com/questions/18990977/return-items-from-list-in-function-python) – Freddie

回答

2

您可以使用return語句退出返回值的函數。如果函數獲取到最後沒有達到一個return語句,默認情況下將返回None默認

def add1(x): 
    return x+1 

def returnsNone(): 
    pass 

print(add1(2)) 
print(returnsNone()) 
+3

這是什麼語言?這兩個定義都不是有效的Python語法。 – Max

+0

@Max:來吧,第一個只是缺少一個冒號:) – hugomg

+1

@missingno:不僅僅如此。 'end'在Python中並不意味着什麼特別。 – DSM

4

函數返回None,所以你應該return backwards明確

也可以使用Python的方式來解決問題:

letters[::-1] 
+0

upvoting pythonic的方式來解決問題。 –

0

它是有道理的,如果你考慮它。您的reverse不會返回任何內容 - 它只是打印結果。但是,當您編寫print (reverse("hello"))時,您實際上正在打印reverse返回的內容。由於它不返回任何內容,因此打印None

1

每個函數在Python中返回東西。如果你沒有明確地返回一個值,Python的函數返回None

因爲print打印到標準輸出,您的函數實際上不會返回任何內容,而return實際上會返回一個值。他們可能看起來在REPL中是一樣的,但它們完全不同。

因此,要解決您的問題,返回值:

return backwards 
0

儘量只:

reverse(hello) 

其實與

print reverse(hello) 

要打印反向的返回值。那個返回值是None。

讓我給你幾個建議一般:

反向()在你的代碼是有副作用(打印)功能。你應該避免 功能的副作用,當你不需要考慮具有反()返回這個詞,而不是打印出來的:

def reverse(letters): 
    backwards = "" 
    i = len(letters) - 1 
    while i >= 0: 
     backwards = backwards + letters[i] 
     i = i - 1 
    return backwards 
print (reverse("hello")) 

而且

i = len(letters) - 1 
    while i >= 0: 
     backwards = backwards + letters[i] 
     i = i - 1 

不易十個分量,如果你給循環添加功能,遞減i = i-1將遠離它應該在'概念'上的地方。你應該更喜歡用支票一起有遞減:

for i in xrange(len(letters)-1,-1,-1): 
    backwards = backwards + letters[i] 

當我懶我寫

myString = myString + fewChars 

,所以我能理解你的懶惰。但添加幾個字符不會修改myString,但會創建一個新的字符串。如果你迭代添加許多字符,很少最有效的方法是逐個添加。考慮使用join()。 例如

letters = 'word' 
lettersList = [letters[i] for i in xrange(len(letters)-1,-1,-1)] 
myReversed ''.join(lettersList) 

好,我同意無法讀取,可能沒能更快,但對於更大的字符串它縮放比newString = oldString + oneChar方法更好。

這就是說,更Python接近

letters[::-1] 

有人已經建議比我快一般的效果要好得多,很容易由Python程序員閱讀。

0

如前所述。如果python函數沒有遇到return聲明,它默認打印None。進行如下所示的小改動修復此問題:

def reverse(letters): 
    backwards = "" 
    i = len(letters) - 1 
    while i >= 0: 
     backwards = backwards + letters[i] 
    i = i - 1 
    return(backwards) # instead of print(backwards) 

print(reverse("hello")) 
相關問題