为什么我的Python递归函数没有破坏?

时间:2015-03-11 01:10:43

标签: python python-3.x

我有这个代码,一旦它满足某个条件就会中断,即当isuniquestring(listofchar)函数返回True时,但有时它不会这样做,它会进入无限循环。我尝试打印条件以检查条件是否有问题,但即使条件打印为true,该功能仍然继续运行,我不知道为什么。

其中一个引发无限循环的字符串是'thisisazoothisisapanda',所以当我确实得到了重新列表('thisisazoothisisapanda')时,它会进入一个无限循环。

如果有人可以提供帮助,我将非常感激 谢谢!

这是我的代码:

def getunrepeatedlist(listofchar):
    for ch in listofchar:
        if isrepeatedcharacter(ch,listofchar):
            listofindex = checkrepeatedcharacters(ch,listofchar)
            listofchar = stripclosertoends(listofindex,listofchar)
            print (listofchar)
            print (isuniquestring(listofchar))
            if isuniquestring(listofchar):
                return listofchar
                #print (listofchar)
            else:   
                getunrepeatedlist(listofchar)

    return listofchar

仅供参考,这些是我称之为的函数

def isrepeatedcharacter(ch,list):
if list.count(ch) == 1 or list.count(ch) == 0:
    return False
else:
    return True

def checkrepeatedcharacters(ch,list):
listofindex=[]
for indexofchar in range(len(list)):
    if list[indexofchar] == ch:
        listofindex.append(indexofchar)
return listofindex

def stripclosertoends(listofindices,listofchar):
stringlength = len(listofchar)-1
if listofindices[0] > (stringlength-listofindices[-1]):
    newstring = listofchar[:listofindices[-1]]

elif listofindices[0] < (stringlength-listofindices[-1]):
    newstring = listofchar[listofindices[0]+1:]

elif listofindices[0] == (stringlength-listofindices[-1]):
    beginningcount = 0
    endcount = 0
    for index in range(listofindices[0]):
        if isrepeatedcharacter(listofchar[index],listofchar):
            beginningcount += 1
    for index in range(listofindices[-1]+1,len(listofchar)):
        if isrepeatedcharacter(listofchar[index],listofchar):
            endcount += 1
    if beginningcount < endcount:
        newstring = listofchar[:listofindices[-1]]
    else: 
        #print (listofindices[0])
        newstring = listofchar[listofindices[0]+1:]
        #print (newstring)

return newstring

def isuniquestring(list):
if len(list) == len(set(list)):
    return True
else:
    return False

1 个答案:

答案 0 :(得分:0)

这可能是因为您正在更改for循环中的listofchar。尝试将该变量克隆为新名称,并使用该变量进行操作并返回新变量。