-1

为了得到输入字符的补码,下面的代码怎么不能工作?似乎循环永远不会结束,但是假设我输入“Z”作为 dna,为什么它不会中断并退出?我是否使用了休息或错误?艾利夫呢?

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 ('')
4

2 回答 2

3

您应该设置一个地图,使用dictionary

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

然后对于一些字符串你可以做

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

输出

'CGATGAC'

对于一个字符:

complement['A']

输出

'C'
于 2014-06-30T13:02:42.487 回答
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

其中“original”产生“TAGCAGT”,“bad_original”产生“Contains non-DNA characters”。

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

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

于 2014-06-30T14:47:45.313 回答