Python 为什么此函数返回错误的结果?

Python 为什么此函数返回错误的结果?,python,Python,有人能告诉我为什么当我用这个特殊的例子尝试这个函数时:序列有效吗('ABCDEFG'),它会出现“True”而不是“False”?一般来说,我对编程一无所知。这是我参加的在线课程。谢谢 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.

有人能告诉我为什么当我用这个特殊的例子尝试这个函数时:序列有效吗('ABCDEFG'),它会出现“True”而不是“False”?一般来说,我对编程一无所知。这是我参加的在线课程。谢谢

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

因为您使用了
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”方法可以做到这一点,看看函数,例如,您返回得太早了。试试这个

for char in dna_sequence:
    if char not in 'ACTG':
        return False
return True
或者更简单地说

return all(char in 'ACTG' for char in dna_sequence)

return会导致函数退出,不管发生什么,这将只检查一个字符

for char in dna_sequence:
    if char not in 'ACTG':
        return False
return true # after whole string checked 

发生的情况是,一旦它点击
A
,它就会返回True。您的逻辑在遇到无效字符或字符串结尾之前不需要返回:

    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

您的方法将在匹配的第一个字符处退出。由于
ABCDEFG
的第一个字符是有效字符,因此方法返回
True


您需要遍历整个字符串并查看所有字符是否匹配。

在循环中,如果第一个值匹配,则返回True,而不是检查所有值。更正代码:

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

是的,我想这就是问题所在。但是我如何修复它呢?你真的会这样使用
&=
?顺便说一句,你忘了返回
res
不,这是为了解释,我会选择all()
all
可能更像python。投票支持“all”,我能说的就是哇!周日午夜,在我的答案提交之前有6个回复——都在8分钟之内。我要坐下来,从今往后等。。。