在递归过程中数组变为无

2024-04-26 18:31:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将matches[0]的每个元素与matches[1]的每个元素进行匹配,并最终得到哪个元素与哪个元素匹配的输出。但是在递归过程中变量path变成None。你知道吗

功能

def improve(ncipher,x): #probably do not have any problem
    for i in x:
        try:
            if x[i]!=ncipher[i]:
                return 0
        except:
            ncipher[i]=x[i]
    return ncipher
def find_indexes(matches,cipher,path):  #the function causing problems
    print 'matches=',matches,'cipher=',cipher,'path=',path,'\n'
    if len(matches)==0:
        return [(0)]
    for x in matches[0]:
        print 'x=',x,'path=',path
        cipher=improve(cipher,x[1])
        if cipher==0:
            return [(0)]
        path=find_indexes(matches[1:],cipher,path)
        if path==[(0)]:
            return [(0)]
        else:
            print 'path=',path
            return path.append((x)) 

输出

matches= [[['season', {'1': 's', '3': 'a', '2': 'e', '5': 'n', '4': 'o'}]], [['month', {'8': 'h', '5': 'n', '4': 'o', '7': 't', '6': 'm'}]]] cipher= {} path= [0] 

x= ['season', {'1': 's', '3': 'a', '2': 'e', '5': 'n', '4': 'o'}] path= [0]
matches= [[['month', {'8': 'h', '5': 'n', '4': 'o', '7': 't', '6': 'm'}]]] cipher= {'1': 's', '3': 'a', '2': 'e', '5': 'n', '4': 'o'} path= [0] 

x= ['month', {'8': 'h', '5': 'n', '4': 'o', '7': 't', '6': 'm'}] path= [0]
matches= [] cipher= {'1': 's', '3': 'a', '2': 'e', '5': 'n', '4': 'o', '7': 't', '6': 'm', '8': 'h'} path= [0] 

path= [0]
path= None

Traceback (most recent call last):
  File "E:\timepass\py\interviewstreet\fb_cipher.py", line 115, in <module>
    find_match(message,words)
  File "E:\timepass\py\interviewstreet\fb_cipher.py", line 67, in find_match
    sol_indexes=find_indexes(matches,{},[0])
  File "E:\timepass\py\interviewstreet\fb_cipher.py", line 24, in find_indexes
    return path.append((x))
AttributeError: 'NoneType' object has no attribute 'append'

问题

  1. 为什么在递归过程中path会变成None?你知道吗
  2. 如何克服这个问题并存储相互匹配的元素?你知道吗

Tags: pathinpynone元素returniffind
2条回答

这是因为代码中的最后一行。你知道吗

list.append()返回None。你知道吗

更改为:

path.append(x)
return path

或者

return path + [x]

return path.append((x))就地编辑path,并返回None。如果要返回path的新值,请将其分成两行。你知道吗

path.append((x)) 
return path

相关问题 更多 >