2016-07-07 80 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循环),它永远不会被初始化。

您需要考虑如何检查递归基础案例。通常你在你的函数开始时这样做。