如何在python中使用缩进的直觉?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (98)

给定一个整数数组,返回数组中的9‘s数。

我的第一次尝试是这样做的:

def array_count9(nums):
    list_of_9 = []
    for num in nums:
        if num == 9:
            list_of_9.append(1)
        return sum(list_of_9)

这是错误的,我后来发现(经过尝试和错误),原因是我没有正确地缩进我的最后一行代码。

正确的答案应该是:

def array_count9(nums):
    list_of_9 = []
    for num in nums:
        if num == 9:
            list_of_9.append(1)
    return sum(list_of_9)

这是我反复遇到的问题,我认为这是因为我不太明白Python是如何处理缩进的。

因为在我的第一次尝试中,我告诉Python在测试第一个整数是否为9之后立即返回列表中对象的和。在正确的示例中,Python将运行所有数字,并且只有在完成时,才返回到前面的缩进并返回列表。

提问于
用户回答回答于

在许多语言中,缩进是用来使代码看起来整洁和易于阅读。然而,Python的情况并非如此。在Python中,需要缩进来指示语句所属的代码块。例如,让我们看看下面的代码:

for i in range(0,5):
   print(i)
print("All done!")

声明print(i)在for-循环下缩进;这意味着语句位于for-循环下。因此,该语句将执行5次。自从声明print("All done!")不缩进,则不在for-循环下;因此,它将只执行一次。上述代码的输出是

0 1 2 3 4全部完成!

现在,让我们修改一下代码。

for i in range(0,5):
    print(i)
    print("All done!")

现在,由于两个print语句都缩进了for-循环下,它们将被执行5次。因此,现在的输出如下:

0全部完成!1全部完成!2全部完成!3全部完成!4全部完成!

现在,让我们看一下您的代码的初始版本。

def array_count9(nums):
    list_of_9 = []
    for num in nums:
        if num == 9:
            list_of_9.append(1)
        return sum(list_of_9)

由于缩进,在for-循环下有返回语句。这意味着,对于for-循环的每一次迭代,都将调用返回语句。但是,由于返回语句结束了函数,所以for-循环在第一次迭代时停止。您希望返回列表的和。_的_9阵反复遍历。因此,返回语句将在for-循环之后,因此不会缩进for-循环下。这就是为什么以下修正版本的工作原理:

def array_count9(nums):
    list_of_9 = []
    for num in nums:
        if num == 9:
            list_of_9.append(1)
    return sum(list_of_9)

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励