为什么这个函数返回错误的结果?

时间:2012-10-22 05:00:49

标签: python

有人可以告诉我为什么当我尝试使用这个特定的例子时这个函数: is_valid_sequence('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

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

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

您需要浏览整个字符串,看看所有字符是否匹配。

答案 2 :(得分: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()函数

答案 3 :(得分:1)

一旦碰到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

答案 4 :(得分:0)

return会导致函数退出而不管它只检查一个字符

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

答案 5 :(得分:0)

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

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