Python中的DNA序列比对,使块更干净

Python中的DNA序列比对,使块更干净,python,recursion,try-catch,except,Python,Recursion,Try Catch,Except,我在写一个程序,你输入一个短的DNA序列和一个长的,它试图返回DNA序列的最佳排列。标准是,如果存在差距,则减去10;如果存在匹配,则加1;如果存在不匹配,则减去1。 我的程序的第一部分对对齐进行评分,它通过不断删除长序列的第一个元素,然后对对齐进行评分,从而递归地工作。我的问题是我的积木很难看。有没有一种方法可以让我在不断删除元素之前回调原来的x lst=[] def align_score(x,y): gap_score=(len(x)-len(y))*(-10) match

我在写一个程序,你输入一个短的DNA序列和一个长的,它试图返回DNA序列的最佳排列。标准是,如果存在差距,则减去10;如果存在匹配,则加1;如果存在不匹配,则减去1。 我的程序的第一部分对对齐进行评分,它通过不断删除长序列的第一个元素,然后对对齐进行评分,从而递归地工作。我的问题是我的积木很难看。有没有一种方法可以让我在不断删除元素之前回调原来的x

lst=[]
def align_score(x,y):
    gap_score=(len(x)-len(y))*(-10)
    match_score=0
    mismatch_score=0
    ref=0
    try:
        for base in y:
            if y[ref]==x[ref]:
                match_score+=1
                ref+=1
            else:
                mismatch_score-=1
                ref+=1
        a=gap_score+match_score+mismatch_score
        lst.append(a)
        del(x[0])
        align_score(x,y)
    except:
        z=lst.index(max(lst))
        x='ACGTCCTTCATT'
        print x
        y='GTCTCATG'
        print "%s%s"%(" "*z, y)

x=list('ACGTCCTTCATT')
y=list('GTCTCATG')
align_score(x,y)

有两种方法可以轻松做到这一点:

  • 将函数中的变量
    x_orig=x
    y_orig=y
    指定为第一个变量 然后在except块中调用
    x_orig
    y_orig
    的行
  • 在函数外部设置
    STRAND_X
    STRAND_Y
    全局常量 作用域,使用常量作为参数调用函数,操纵 try块中的局部变量
    x
    y
    ,然后参考 块中的全局常量