0

我试图将每个元素匹配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. 我该如何克服这个问题并存储相互匹配的元素?
4

2 回答 2

4

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

path.append((x)) 
return path
于 2012-11-19T13:56:23.293 回答
2

This is because of the last line in your code.

list.append() returns None.

Change it to:

path.append(x)
return path

or

return path + [x]
于 2012-11-19T13:57:24.820 回答