2016-07-07 81 views
0

下面是python代碼以獲得最長的concat str與計數 我無法在循環和外部循環中再次調用該函數我無法訪問suffixString如何在python外部和內部循環中執行遞歸

如果我叫外循環是

t = {"asds":"asds","asas":"asas"} 

    def checkIfitsLongest(str1): 
     for i in range(1, len(str1)-1): 
      suffixString = str1[i+1:-1] 
       if t.has_key(suffixString): 
        break 
     checkIfitsLongest(suffixString) 
+2

這不太清楚,請嘗試更好地解釋你正在嘗試做什麼。 – Julien

+0

是的,我們不明白...輸入給定,輸出想要的。明確目的 – Destrif

+0

休息後我想調用checkIfitsLongest(suffixString)它不工作 –

回答

0

把一些很好的定位print調試語句,我們可以看到,你的問題是不是與checkIfitsLongest功能或suffixString變量的作用域。

t = {"asds":"asds","asas":"asas"} 

def checkIfitsLongest(str1): 
    print "checking", str1 
    for i in range(1, len(str1)-1): 
     suffixString = str1[i+1:-1] 
     print "suffix", suffixString 
     if t.has_key(suffixString): 
      break 
    checkIfitsLongest(suffixString) 

現在在解釋器中運行:

>>> checkIfitsLongest("asdf") 
checking asdf 
suffix d 
suffix 
checking 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    checkIfitsLongest("asdf") 
    File "C:/Users/me/Desktop/cccc.py", line 10, in checkIfitsLongest 
    checkIfitsLongest(suffixString) 
    File "C:/Users/me/Desktop/cccc.py", line 10, in checkIfitsLongest 
    checkIfitsLongest(suffixString) 
UnboundLocalError: local variable 'suffixString' referenced before assignment 
>>> 

所以我們可以看到,suffixString被正確地傳遞下去。但是,當您將一個空字符串傳遞給函數時(從不輸入for循環),它永遠不會被初始化。

您需要考慮如何檢查遞歸基礎案例。通常你在你的函數開始時這樣做。