这是我到目前为止所用的,它不是出于某种原因用G替换C.为什么会这样?
DNASeq=raw_input("Enter the DNA sequence here: ")
DNASeq=DNASeq.upper().replace(" ","")
reverse=DNASeq[::-1]
print reverse.replace('A','U').replace('T','A').replace('C','G').replace('G','C')
答案 0 :(得分:3)
问题是您将C
替换为G
,然后将G
替换为C
。阻止您从一个转到另一个的一种简单方法是将C
替换为g
,因此它不会返回C
,然后将结果大写:
gattaca="GATTACA"
rev = gattaca[::-1]
print rev.replace('A','u').replace('T','a').replace('C','g').replace('G','c').upper()
这正确地输出了UGUAAUC
而不是UCUAAUC
,就像你的例子一样。
更多的Pythonic方式,并避免基于案例的黑客,并且因为字符串不需要被扫描五次而且更加有效,并且更明显的目的,将是:< / p>
from string import maketrans
transtab = maketrans("ATCG", "UAGC")
print rev.translate(transtab)
答案 1 :(得分:2)
正如已经指出的那样,问题是你首先用Gs替换所有Cs。我想抛弃这种方法,因为我认为它会是最有效的:
>>> complement = {'A':'U', 'G':'C', 'C':'G','T':'A'}
>>> seq = "GATTACA"
>>> "".join(complement[c] for c in seq)[::-1]
'UGUAAUC'
>>>
答案 2 :(得分:0)
你做了几乎正确的代码。 但是你需要理解的一件事是首先用G代替C,然后用C代替G.
.replace(&#39; C&#39;&#39; G&#39)。代替(&#39; G&#39;,&#39; C&#39)
从代码中删除.replace('G','C')
,一切正常。
这是正确的代码:
DNASeq=raw_input("Enter the DNA sequence here: ")
DNASeq=DNASeq.upper().replace(" ","")
reverse=DNASeq[::-1]
print reverse.replace('A','U').replace('T','A').replace('C','G').replace('G','C')