0

ここで何が間違っているのかわかりません。どんな助けでも大歓迎です。不適切な変数 (Z など) を含む DNA シーケンスを入力すると、True が返され続けます。誰かが理由を指摘できますか?

ありがとう

def is_valid_sequence(dna):
    """ (str) -> bool

    >>> is_valid_sequence('ATCG')
    True
    >>> is_valid_sequence('AZT')
    False
    >>> is_valid_sequence('atcg')
    False

    Returns a boolean result based on whether dna is a valid
    dna sequence.
    """



    for char in dna:
        if char in "TCGA":
            return True
        else:
            return False
4

3 に答える 3

7

ループの最初の反復で戻ります:関数をreturn 終了し、ループの本体のすべてのパスにreturn. あなたはおそらくしたいです

for char in dna:
    if char not in 'TCGA':
        return False
return True

または、よりPython的に:

return all(char in 'TCGA' for char in dna)
于 2013-09-12T18:22:07.717 に答える
1

コードでは、char を 1 つずつ取得し、「TCGA」にある場合は True を返します。したがって、最初の文字が「TCGA」にある場合、True が返され、実行が停止します。次のようにする必要があります。

for char in dna:
    if char not in "TCGA":
        return False
于 2013-09-12T18:21:50.633 に答える
1

最初のキャラクターをテストした後は常に戻ってきます。悪い文字に到達するまでテストを続けますTrue。文字列全体をテストするまで戻らないでください。

于 2013-09-12T18:22:24.943 に答える