2014-07-18 68 views
0

我與「認爲Python」練習,練習8.1是:的Python:傳遞函數參數字符串

「編寫一個函數,採用一個字符串作爲參數,並顯示落後的字母,每行一個。」

我能夠做到這個問題,以香蕉爲例,每行打印每個字母。

index = 0 
fruit = "banana" 
while index < len(fruit): 
    letter = fruit[len(fruit)-index-1] 
    print letter 
    index = index + 1 

不過,我想這種情況推廣到任何輸入的話,我得到了這個問題,我的代碼是

index = 0 
def apple(fruit): 
    while index < len(fruit): 
     letter = fruit[len(fruit)-index-1] 
     print letter 
     index = index + 1 

apple('banana') 

相應的錯誤是:

Traceback (most recent call last): 
    File "exercise8.1_mod.py", line 21, in <module> 
    apple('banana') 
    File "exercise8.1_mod.py", line 16, in apple 
    while index < len(fruit): 
UnboundLocalError: local variable 'index' referenced before assignment 

我想應該有與使用的函數參數有關的問題。任何幫助將不勝感激。

+5

只要把你的'index = 0'放在你的函數中(在它的開頭)。 – BrenBarn

+0

@BrenBarn如果你解釋他,他需要保持在裏面,這樣他才能瞭解局部和全局變量嗎? :) –

回答

0

你的程序有錯誤,由於你在你的方法訪問一個全局變量,並試圖改變其價值

index = 0 
def apple(fruit): 
    ..... 
    index = index + 1 
    ....  
apple('banana') 

這個給你錯誤UnboundLocalError: local variable 'index' referenced before assignment

,但如果你給

def apple(fruit): 
     global index 
     ..... 
     index = index + 1 
     .... 

這產生了正確的結果

在Python

我們有Global variableLocal variables

請到throught this

在Python,這只是一個函數裏引用變量是隱含全球。如果一個變量在函數體內的任何地方被賦予了一個新的值,它被假定爲一個局部變量。如果一個變量 曾經在函數內部被分配了一個新的值,那麼這個變量是 隱式地是局部的,並且你需要明確地聲明它是全局的。

+0

非常感謝您對本地和全局變量的詳細解釋。它確實有很大幫助! – nam

+0

@nam your welcome.glad幫助你:) –

1

這也許應該更好地工作:

def apple(fruit): 
    for letter in fruit[::-1]: 
     print letter 

apple('banana') 

這是通過索引反向字符串,一個建在稱爲切片Python函數。

Reverse a string in Python

+0

thx beiller,我從你的陳述,水果[:: - 1]中學習,它對我來說是整潔而美麗的! – nam

0

你需要你使用它之前將值分配給index

def apple(fruit): 
    index = 0 # assign value to index 
    while index < len(fruit): 
     letter = fruit[len(fruit)-index-1] 
     print letter 
     index = index + 1 
apple("peach") 
h 
c 
a 
e 
p 
+0

非常感謝您對*賦值給index *的評論。我的程序正在運行。Thx =] – nam

相關問題