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