跟踪功能返回错误

时间:2015-12-08 07:55:45

标签: python

我正在尝试对此代码中的近似模式匹配执行动态编程。一旦创建了矩阵,我试图使用函数trace追溯到我的答案。但是当我运行程序时,跟踪函数不是返回任何结果,程序不会被终止。

class Structure :
    def __init__(self): 
        self.vertical =[]
        self.horizontal =[]
        self.diagnol=[]
    def merge(self, s):
        for i in s.vertical :
            self.vertical.append(i)
        for i in s.horizontal :
            self.horizontal.append(i)
        for i in s.diagonal:
            self.diagonal.append(i)
    def __str__(self):

        return "horizontal \n"+str(self.horizontal) +"\n vertical \n"+str(self.vertical)+"\n diagonal"+str(self.diagonal)



def posList(pattern, text): #determine the positions in the matrix
    retList = list()
    textList = [x for x in text.strip()]
    for i, char1 in enumerate(pattern):
        textPos = [j for j, char2 in enumerate(textList) if char1==char2]
        for j in textPos:
            retList.append((i+1,j+1))
    return retList

def trace(M,text,pattern,k) :
    positions=posList(pattern,text)

    struct = Structure()
    for i in range(0,2):
        for j in range(0,7):
            while M[i,j]<=k and M[2,j]!=0:
                if M[i,j] == M[i,j-1]+1:
                    struct.horizontal.append(j)
                    j -= 1
                elif M[i,j] == M[i-1,j]+1:
                    struct.vertical.append(i)
                    i -= 1
                elif (i+1,j+1)in positions and M[i,j]==M[i-1,j-1] :
                    struct.diagonal.append((i,j))
                    i -= 1
                    j -= 1
                elif (i+1,j+1) not in positions and M[i,j]==M[i-1,j-1]+1 and M[i,j]==M[i-1,j]+1:
                    struct.vertical.append(i)
                    i-=1
                    print "error"
                elif (i+1,j+1) not in positions and M[i,j]==M[i-1,j-1]+1 and M[i,j]==M[i,j-1]+1:
                    struct.horizontal.append(j)
                    j-=1
                elif M[i,j]==M[i-1,j]+1 and M[i,j]==M[i,j-1]+1:
                    struct.vertical.append(i)
                elif M[i,j]==M[i-1,j]+1 and M[i,j]==M[i,j-1]+1 and M[i,j]==M[i-1,j-1]+1:
                    struct.vertical.append(i)
                    i-=1

                else :
                    pass

    return struct

text='ACAGCAG'
pattern='GC'

n = len(pattern)
m = len(text)

text1=list(text)
pattern1=list(pattern)

M = [[0 0 0 0 0 0 0 0],[1 1 1 1 0 1 1 0],[2 2 1 2 1 0 1 1]]
#perform traceback
s= trace(M,text,pattern,1)
print s
s = trace(M, w, seq, max, 0, n-1)
print str(s)
print seq
result=real_string(s)
print "".join(result)

有人能建议我在功能上出错吗?

0 个答案:

没有答案
相关问题