2

この特定の例でこの関数を試してみると、is_valid_sequence('ABCDEFG')、「False」ではなく「True」になる理由を教えてもらえますか? 私は一般的にプログラミングにまったく慣れていません。これは私が取っているオンラインコースです。ありがとう。

def is_valid_sequence(dna_sequence):
    ''' (str) -> bool

    Return True if and only if DNA sequence is made up of 'A', 'T', 'C', and 'G' nucleotides.

    >>> is_valid_sequence('ATCGGC')
    True
    >>> is_valid_sequence('aTcGGc')
    False
    >>> is_valid_sequence('ABCDEFG')
    False

    '''    

    for char in dna_sequence:
        if char not in 'ACTG':
            return False
        else:
            return True
4

6 に答える 6

11

あなたは帰りが早すぎます。これを試して

for char in dna_sequence:
    if char not in 'ACTG':
        return False
return True

またはもっと簡単に

return all(char in 'ACTG' for char in dna_sequence)
于 2012-10-22T05:03:42.490 に答える
3

メソッドは、一致する最初の文字で終了します。の最初の文字ABCDEFGは有効な文字であるため、メソッドは を返しTrueます。

文字列全体を調べて、すべての文字が一致するかどうかを確認する必要があります。

于 2012-10-22T05:04:43.240 に答える
2

最初のテストreturnのみを使用するためです。char

簡単な修正:

res = True
for ch in dna_sequence:
    if ch not in 'ACTG':
        res &= False # or return as you know it's false
    else:
        res &= True
return res

しかし、これを行うにはもっと「pythonic」な方法がありますall()。たとえば、関数を見てください

于 2012-10-22T05:03:27.797 に答える
1

にヒットするとすぐに、ATrue が返されます。無効な文字または文字列の末尾に到達するまで、ロジックを返さない必要があります。

    for char in dna_sequence:
        if char not in 'ACTG':
            return False
    # we hit the end of the string, so it must be valid
    return True
于 2012-10-22T05:04:24.333 に答える
0

return は、何に関係なく関数を終了させます。これは1文字のみをチェックします

for char in dna_sequence:
    if char not in 'ACTG':
        return False
return true # after whole string checked 
于 2012-10-22T05:04:20.353 に答える
0

ループでは、すべての値を調べるのではなく、最初の値が一致した場合に True を返しています。修正されたコード:

for char in dna_sequence:
    if char not in 'ACTG':
        return False
return True
于 2012-10-22T05:08:19.727 に答える