-1

入力された文字の補数を取得するために、以下のコードが機能しないのはなぜですか? ループが終わらないように見えますが、たとえば、「Z」を DNA として入力すると、ループが壊れて終了しないのはなぜでしょうか? ブレークを使用しましたか、それとも間違っていましたか? エリフはどう?

デフォルト 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

0

あなたの例が書かれているので(そしてサイバーがあなたの例に基づいて彼の答えを書いているので)、あなたは補完を得ていません。A -> C (補数 T の代わりに)、T -> A の代わりに G などを取得しています。

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 ) を調べる必要があります。汎用性の向上、エラー チェックなど。

于 2014-06-30T14:47:45.313 に答える