2017-08-18 23 views
0

入力k =ある数とDNA = dnaの断片のリストを出力すると、出力はk-merを与えるはずです文字列の配列における最小ハミング距離を持つサイズkの文字列です。 3つの関数があります:1. k-merとフラグメントdnaの異なるウィンドウ間のハミング距離を計算し、最も低いスコアを持つウィンドウのハミング距離を返します。2.すべての可能なk-mersのサイズを生成する関数k、および3.サイズkのすべてのウィンドウおよび可能なすべてのk-merについて繰り返すもの。残念ながら、私のプログラムは出力AAAを与えていますが、これは間違っています。論理エラーは、私が正しい結果を得るために以前に使ったので、組み合わせ(k)やhammingDistanceにないことが分かります。dnaのリストのハミング距離が最小となるk-merを見つける

import itertools 
def combination(k): 
    bases=['A','T','G','C'] 
    combo=[''.join(p) for p in itertools.product(bases, repeat=k)] 
    return combo 

def hammingDistance(pattern, seq): 
     if pattern == seq: 
       return 0 
     else: 
       dist=0 
       for i in range(len(seq)): 
         if pattern[i] != seq[i]: 
           dist += 1 
     return dist 

def median_string(k, DNA): 
    k_mers = combination(k) 
    distance = 0 
    temp = 1000000000000000000 
    for string in DNA: 
     hamming = 1000000000000000000 
     c = 0 
     for k_mer in k_mers: 
      for subset in string[c: len(string) - k]: 
       if hamming > hammingDistance(k_mer, string[c : c+k]): 
        hamming = hammingDistance(k_mer, string[c : c+k]) 
       c += 1 
      distance += hamming 
      if distance < temp: 
       temp = distance 
       best_pattern = k_mer 
      distance = 0 
    return best_pattern 

答えて

0

最後の条件文ではインデントエラーであることが判明しました。

def median_string(k, DNA): 
    k_mers = combination(k) 
    distance = 0 
    temp = 1000000000000000000 
    for k_mer in k_mers: 
     for string in DNA: 
      hamming = 1000000000000000000 
      c = 0 
      for subset in string[c: len(string) - k]: 
       if hamming > hammingDistance(k_mer, string[c : c+k]): 
        hamming = hammingDistance(k_mer, string[c : c+k]) 
       c += 1 
      distance += hamming 
     if distance < temp: 
       temp = distance 
       best_pattern=k_mer 
     distance=0 
    return best_pattern 
関連する問題