0

多数の DNA 文字 (常に 3 で割り切れる) を読み取り、それらが同じアミノ酸に対応するかどうかをチェックするプログラムを作成しています。たとえば、AAT と AAC は両方とも N に対応するため、プログラムは「同じです」と出力する必要があります。これは問題ありませんが、6/9/12/任意の 3 の倍数を比較して、定義が同じかどうかを確認する方法がわかりません。例えば:

AAAAACAAG
AAAAACAAA 

私を返してください 二人ともKNKだから同じです。

これは私のコードです:

sequence = {}
d = 0
for line in open('codon_amino.txt'):
  pattern, character = line.split()
  sequence[pattern] = character
a = input('Enter original DNA: ')
b = input('Enter patient DNA: ')
for i in range(len(a)):
  if sequence[a] == sequence[b]:
    d = d + 0
  else:
    d = d + 1
if d == 0:
  print('It\'s the same')
else:
  print('Mutated!')

そして、私の codon_amino.txt の構造は次のようになっています。

AAA K
AAC N
AAG K
AAT N
ACA T
ACC T
ACG T
ACT T

3 つのパターンで DNA 構造を比較するにはどうすればよいですか? 3文字の長さの文字列に対しては機能していますが、それ以上の文字列に対してはエラーが返されます。

編集:

a と b を 3 間隔のリストに分割する方法を知っていれば、次のように役立つかもしれません。

a2 = a.split(SPLITINTOINTERVALSOFTHREE)

次に、for ループを使用してそれらを反復処理するのは簡単ですが、そもそもそれらを分割するにはどうすればよいでしょうか?

編集:解決策:

sequence = {}
d = 0
for line in open('codon_amino.txt'):
  pattern, character = line.split()
  sequence[pattern] = character
a = input('Enter original DNA: ')
b = input('Enter patient DNA: ')
for i in range(len(a)):
  if all(sequence[a[i:i+3]] == sequence[b[i:i+3]] for i in range(0, len(a), 3)):
    d = d + 1
  else:
    d = d + 0
if d == 0:
  print('The patient\'s amino acid sequence is mutated.')
else:
  print('The patient\'s amino acid sequence is not mutated.')
4

3 に答える 3

0

2 番目のループと比較を次のように置き換えることができると思います。

if all(sequence[a[i:i+3]] == sequence[b[i:i+3]] for i in range(0, len(a), 3)):
    print('It\'s the same')
else:
    print('Mutated!')

関数はallジェネレーター式を繰り返し処理し、いずれかの値が False の場合は False になります。ジェネレータ式は、文字列の長さ 3 のスライスを比較します。

于 2013-08-29T10:10:59.453 に答える
0

あなたがすべきことは次のとおりだと思います:

  • 文字列を 3 文字のチャンクに分割する関数を作成します。(ここにいくつかのヒントがあります
  • 文字列を対応するアミノ酸配列に変換する関数を作成します (前の関数を使用)
  • シーケンスを比較します。
于 2013-08-29T10:09:30.403 に答える
0

これがあなたの言いたいことなら:

def DNA(string): 
    return [string[i:i+3] for i in xrange(0,len(string),3)]

amino_1 = DNA("AAAAACAAG")
amino_2 = DNA("AAAAACAAA")

print amino_1, amino_2
print amino_1 == amino_2

Output: ['AAA', 'AAC', 'AAG'] ['AAA', 'AAC', 'AAA']
False
于 2013-08-29T10:10:08.990 に答える