我有这个函数来找到从M [0] [0]到矩阵的矩阵中的最短路径 M [M] [N] 我创建了矩阵和一切 我想在aseq1中绘制最短的路径,而aseq2是空的 我无法找到问题
def path(seq1,seq2,matrix,gap):
aseq1 = ''
aseq2 = ''
#reconstruction de l'alignement aseq1 pour la premiere sequence et aseq2 pour la deuxieme
i = len(seq1[0])-1
j = len(seq2[1])-1
while i>0 and j>0:
if i%10==0:
stderr.write('.')
#utilisation de la matrice remplie pour tracer le chemin le plus court de M[0][0] a M[m][n]
score = M[i][j]
score_diag = M[i-1][j-1]
score_up = M[i][j-1]
score_left = M[i-1][j]
if score == score_diag + d[[seq1[i-1]][seq2[j-1]]]:
aseq1 = seq1[i-1] + aseq1
aseq2 = seq2[j-1] + aseq2
i -= 1
j -= 1
if score == score_left + gap:
aseq1 = seq1[i-1] + aseq1
aseq2 = '-' + aseq2
i -= 1
elif score == score_up + gap:
aseq1 = '-' + aseq1
aseq2 = seq2[j-1] + aseq2
j -= 1
else:
print("Erreur?")
while i>0:
# si j==0 avant i==0 on continue l'iteration avec i
aseq1 = seq1[i] + aseq1
aseq2 = '-' + aseq2
i -= 1
while j>0:
# si i==0 avant j==o on continue l'iteration avec j
aseq1 = '-' + aseq1
aseq2 = seq2[j] + aseq2
print (aseq1,aseq2)
j -= 1
print(aseq1,aseq2)
return (aseq1,aseq2)
答案 0 :(得分:0)
注意Python中的缩进。第一个while
循环中的所有代码都在if i%10==0
内。如果i
永远不能被10整除,程序将永远循环。
这就是我所说的。将标签与上面的代码进行比较:
while i>0 and j>0:
if i%10==0:
stderr.write('.')
#by performing a traceback of how the matrix was filled out above,
#i.e. we find a shortest path from a[n,m] to a[0,0]
score = M[i][j]
score_diag = M[i-1][j-1]
score_up = M[i][j-1]
score_left = M[i-1][j]