For loop 互补DNA序列

For loop 互补DNA序列,for-loop,python-3.x,sequence,For Loop,Python 3.x,Sequence,我在写这个循环时遇到问题;它似乎在第二个序列之后停止 我想把互补的DNA序列返回给给定的DNA序列 例如('AGATTC')->('TCTAAG'),其中A:T和C:g def get_complementary_sequence(dna): """(str) -> str > Return the DNA sequence that is complementary to the given DNA sequence >>> get_compl

我在写这个循环时遇到问题;它似乎在第二个序列之后停止

我想把互补的DNA序列返回给给定的DNA序列

例如('AGATTC')->('TCTAAG'),其中A:T和C:g

def get_complementary_sequence(dna):
    """(str) -> str

> Return the DNA sequence that is complementary to the given DNA sequence

    >>> get_complementary_sequence('AT')
    ('TA')
    >>> get_complementary_sequence('AGATTC')
    ('TCTAAG')

    """

    x = 0
    complementary_sequence = ''

    for char in dna:
            complementary_sequence = (get_complement(dna))

    return complementary_sequence + (dna[x:x+1])

有人能发现为什么循环没有继续吗?

你在所有
dna
上调用
get\u complete
,而不是每个
char
。这将简单地调用具有相同参数len(dna)次的come函数。如果从不使用
char
s,就没有理由循环使用它们。如果
get\u complete()
可以使用字符,我建议:

for char in dna:
    complementary_sequence += get_complement(char)
get_补码的实现将使用单个字符并返回其补码

另外,您将返回互补序列+(dna[x:x+1])。如果您希望函数符合您所记录的行为,
+(dna[x:x+1])
将从
dna
字符串的开头添加一个额外的(错误的)字符。您只需返回互补序列!感谢@Kevin的关注

你在做什么:

>>> dna = "1234"
>>> for char in dna:
...     print dna
... 
1234
1234
1234
1234
我所想的更接近你想要做的事情:

>>> for char in dna:
...     print char
... 
1
2
3
4
总而言之:

# you could also use a list comprehension, with a join() call, but
# this is closer to your original implementation.
def get_complementary_sequence(seq):
    complement = ''
    for char in seq:
        complement += get_complement(char)
    return complement

def get_complement(base):
    complements = {'A':'T', 'T':'A', 'C':'G', 'G':'C'}
    return complements[base]

>>> get_complementary_sequence('AT')
'TA'
>>> get_complementary_sequence('AGATTC')
'TCTAAG'
发生了什么? 你的电话是:

complementary_sequence = (get_complement(dna))
…n次,其中n是字符串的长度。这就给您留下了
get\u complement(dna)
complemental\u序列中的返回值。大概只有一封信吧

然后返回这一个字母(
complementary_sequence
),后跟子字符串
dna[0:1]
(即
dna
中的第一个字母),因为
x
总是
0

这就是为什么总是返回两个字符

如何修复它? 假设您有如下函数:

def get_complement(d):
    return {'T': 'A', 'A': 'T', 'C': 'G', 'G': 'C'}.get(d, d)
…您可以通过简单地使用和来修复您的函数:


下面是一个我将如何做到这一点的示例-实际上只有两行代码:

from string import maketrans

DNA="CCAGCTTATCGGGGTACCTAAATACAGAGATAT" #example DNA fragment

def complement(sequence):
  reverse = sequence[::-1]
  return reverse.translate(maketrans('ATCG','TAGC'))

print complement(DNA)

什么是
get_completedo?get_complete产生互补碱基对,例如'A':'T'@user2773611这确实打印互补字符串刚才尝试了上面的代码,它只产生了:get_completive_sequence('AGATTC')返回'T'@user2773611我想你误解了我的解释。我已经编辑过了,给你一个完整的,有效的版本。也许我理解了get_补码应该做的错误。你的get_补码工作得很好,就在我运行get_补码序列('AGATTC')时,我得到('T')@user2773611你使用的正是我实现的那个吗?从测试用例中可以看出,它是有效的。您确定循环缩进正确吗?如果不是,它可能会运行一次,您会看到这种行为。
from string import maketrans

DNA="CCAGCTTATCGGGGTACCTAAATACAGAGATAT" #example DNA fragment

def complement(sequence):
  reverse = sequence[::-1]
  return reverse.translate(maketrans('ATCG','TAGC'))

print complement(DNA)