获得角色的补充

时间:2014-06-30 12:59:21

标签: python string loops character complement

如何使用以下代码,以获得输入字符的补码?似乎循环永远不会结束,但是,如果我进入' Z'作为dna,为什么它不会破裂并退出?我是否使用了休息时间? elif怎么样?

def get_complement(dna):

''' (ch) -> ch

Reverse the 'A' to 'T' or vice versa and 'C' to 'G' and vice versa too.
>>> get_complement('A')
'C'
>>> get_complement('G')
'T'

'''
if dna == 'A':
    print ('C')
    if dna == 'C':
        print ('A')
        if dna == 'T':
            print ('G')
            if dna == 'G' :
                print ('T')
                while  {'A', 'C', 'G', 'T'}.isnotsubset(set(dna)) :
                    break
                return ('')

2 个答案:

答案 0 :(得分:2)

您应该使用dictionary

设置地图
complement = {'A': 'C', 'C': 'A', 'T': 'G', 'G': 'T'}

然后你可以做一些字符串

original = "ATCGTCA"
"".join(complement[letter] for letter in original)

输出

'CGATGAC'

仅限一个角色:

complement['A']

输出

'C'

答案 1 :(得分:0)

正如你的例子所写(并且因为Cyber​​根据你的例子写了他的答案)你没有得到补充。你得到A - > C(代替补码T),T - > G而不是A等

使用Cyber​​所做的字典,它应该如下所示:

complement = {'A':'T', 'T':'A', 'C':'G', 'G':'C'}

在代码中,包括检查非DNA字符:

original = "ATCGTCA"
bad_original = "ATCGTCAZ"

complement = {'A':'T', 'T':'A', 'C':'G', 'G':'C'}
for dna in (original, bad_original):
    try:
        output = "".join([complement[x] for x in dna])
    except KeyError:
        output = "Contains non-DNA characters"

    print output

“原始”产生“TAGCAGT”和“bad_original”产生“包含非DNA字符”。

请注意,这是补充,而不是反向补充,通常更有意义。

更一般地说,如果您打算将其用于DNA序列,您应该查看BioPython模块(http://biopython.org/wiki/Seq#Complement_and_reverse_complement),它将为您提供补充(和反向补充),具有更多功能,错误检查等等。