0

我正在编写一个程序,它读取许多 DNA 字符(总是能被 3 整除)并检查它们是否对应于相同的氨基酸。例如 AAT 和 AAC 都对应于 N,所以我的程序应该打印“It's the same”。它做得很好,但我只是不知道如何比较 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 拆分为一个以三个为间隔的列表,这可能会有所帮助:

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

我认为你应该做的是:

  • 编写一个函数将字符串拆分为 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 回答
0

我认为您可以将第二个循环和比较替换为:

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。生成器表达式比较长度为三个的字符串切片。

于 2013-08-29T10:10:59.453 回答