2017-06-28 1 views
0

私は短いDNA配列と長い配列を入力し、DNA配列の可能な限り最良の配列を返そうとするプログラムを書いています。条件にはギャップがあれば10を減じ、一致すれば1を加え、不一致があれば1を引きます。 私のプログラムの最初の部分はアライメントを得ています。これは再帰的に働きます長いシーケンスの最初の要素を一貫して削除した後、アライメントをスコアリングします。私の問題は、私の例外ブロックが非常に醜いということです。そこから要素を削除し続ける前に元のxを返すことができるような方法はありますか?あなたは簡単にこれを行うことができますPythonでDNA配列を整列させ、ブロックを除いてクリーナーを作成する

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) 

答えて

0

二つの方法:

  • 除くブロックでx_origy_origを呼び出して、最初の 線としてあなたの関数内の変数x_orig = xy_orig = yを割り当てます。
  • は、引数として定数を持つ関数を呼び出し、機能 範囲外STRAND_XSTRAND_Yグローバル定数を作る ローカル変数xとtryブロックでyを操作して、ブロックを除いに グローバル定数を参照してください。
関連する問題