我对python很新。我在网上找到了一些关于这个函数主体的帮助(我删除了一些例子来缩短它)但是我对于“返回真实”这个问题感到困惑。声明表示与整个代码的主体有关。我理解第一个if语句而不是'返回True'声明,因为没有elif或其他。我还注意到返回的True语句没有在if语句下缩进。这解释了什么吗?谢谢!
def is_valid_sequence(dna):
""" (str) -> bool
Return True if and only if the DNA sequence is valid
(that is, it contains no characters other than 'A', 'T', 'C' and 'G').
"""
valid_dna = 'ACGT'
for nucleotide in dna:
if nucleotide not in valid_dna:
return False
return True
答案 0 :(得分:1)
仅当for
循环结束而if
没有匹配时,才会到达最后一行。那时你知道所有nucleotide
测试都是有效的DNA字符。
如果if
测试与其中一个nucleotide
值匹配,则会到达return False
并且该功能结束。
因此,代码会在nucleotide
中测试每个dna
值,直到找到无效的nucleotide
值为止(因此if nucleotide not in valid_dna
为真,{ {1}}已执行),或者所有值都已经过测试且return False
循环结束,并且for
已执行。
另一方面,如果您使用return True
块进行else
测试,则只测试了第一个 if
值并返回nucleotide
过早,没有测试True
序列的其余部分。
您可以使用两个示例dna
和AGFT
来逐步完成代码。第一个是无效的DNA,第二个是。
对于AGCT
,代码执行此操作:
AGFT
如果核苷酸不在valid_dna nucleotide = 'A',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
如果核苷酸不在valid_dna nucleotide = 'G',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
如果核苷酸不在valid_dna nucleotide = 'F',
中,如果is *True* so the
返回False test **does** match and
False。对于is reached. The function ends, returning
,事件序列为:
AGCT
如果核苷酸不在valid_dna nucleotide = 'A',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
如果核苷酸不在valid_dna nucleotide = 'G',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
如果核苷酸不在valid_dna nucleotide = 'C',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
如果核苷酸不在valid_dna nucleotide = 'T',
中,如果`测试不匹配,则循环再次从顶部继续。is *False* so the
。该函数结束,返回return True
。答案 1 :(得分:0)
这意味着如果循环中的每个项目都没有返回false,那么最后会返回true。
答案 2 :(得分:0)
如果for循环中的任何if语句为true,则该函数将返回False ,这意味着离开该函数并返回 False 。
如果for循环中的if语句都不为true,for循环将遍历 dna 中的所有核苷酸,然后转到下一个语句返回真
答案 3 :(得分:0)
如果字符串dna
中有一个无效字符,则此函数将返回False
。
如果您已经完成整个dna
,并且找不到任何错误,那么此函数最后会返回True
。