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