Python返回语句缩进级别

时间:2017-05-29 22:13:38

标签: python indentation

在教程中,第二个返回语句的缩进级别(返回False)正好位于循环的下方,因此在循环之外。 它不应该在for循环中吗?

nix-shell -p coq_8_6 --run coqide

我有另一个片段,其中相同的缩进级别导致输出错误:

nix-env --rollback

当我在上面的片段上运行时,结果是“单词列表中没有o” 为什么不将返回语句全部置于条件检查之下?

2 个答案:

答案 0 :(得分:1)

让我们来看看paranoid: false

的逻辑
  1. 有多个单词,所以我们需要迭代它们:has_o_in_it(words)
  2. 对于每个字词,我们需要检查它是否包含“o”:for word in words:
    1. 如果word包含“o”,我们知道该列表有:if "o" in word:
    2. 如果单词不包含“o”,我们需要继续检查:return True
  3. 如果我们在没有continue的情况下浏览整个列表,我们可以断定列表中不包含“o”:returning True
  4. 因此代码应如下所示:

    return False

    还有其他(更简洁的方法)来编写此代码(第一个是最好的):

    def has_o_in_it(words):
        for word in words:
            if "o" in word:
                return True
            else: 
                continue
        return False
    

答案 1 :(得分:1)

  

我有另一个片段,其中相同的缩进级别导致输出错误

输出只是错误的,因为逻辑有缺陷。

自己跳过列表。它会立即在三点返回False并声称没有单词包含o。

你不应该在循环中返回。假设您想要查看所有元素

,您可以跟踪它
def has_o_in_it(words):
  seen = False 
  for word in words:
    if "o" in word:
      seen = True 
  return seen

然而,这非常冗长,而且可能是

return any(lambda word: 'o' in word, words) 

return 'o' in ''.join(words)