下面代码中的最后一个return语句到底意味着什么?

时间:2016-12-10 22:36:11

标签: python python-3.x

我对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

4 个答案:

答案 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序列的其余部分。

您可以使用两个示例dnaAGFT来逐步完成代码。第一个是无效的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