这个函数为什么会返回错误的结果?
有人能告诉我为什么当我用这个特殊的例子试用这个函数:is_valid_sequence('ABCDEFG'),它出现“真”而不是“假”?一般来说,我对编程完全陌生。这是我正在参加的在线课程。谢谢。这个函数为什么会返回错误的结果?
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
但也有更多的“Python化”的方式来做到这一点,看看在all()
功能例如
你太早回来。试试这个
或者更简单地说
return all(char in 'ACTG' for char in dna_sequence)
'all'可能更pyiousonic。 –
+1(all)():) – 2012-10-22 05:07:23
完美,谢谢!这固定它! –
回报导致函数的出口无论什么这将只检查一个字符
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,而不是检查所有值。更正后的代码:
是的,我想象这是问题所在。但是,我该如何解决它? –
你真的会用'&='吗?顺便说一句,你忘了返回'res' –
不,这是为了解释,我会去所有() – 2012-10-22 05:10:01