知道如何在 python 中使用缩进的直觉
Intuition behind knowing how to use indentation in python
我完全不熟悉编程,因此决定通过学习 Python 开始我的旅程。一路上,我在了解代码在缩进方面的行为方式时遇到了一些问题。我举个例子:
问题:
给定一个整数数组,return数组中 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)
这是错误的,我后来(经过反复试验)发现原因是我没有正确缩进我的最后一行代码。
正确答案应该是:
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 到 return 列表中对象的总和整数是 9。在正确的示例中,Python 将 运行 遍历所有数字,并且仅当完成后,返回到之前的缩进和 return 列表。
我不知道,我想我想知道是否有人可以提供 "walk-through" 每一行中发生的事情,或者指导我找到进一步讨论这个问题的资源。我在网上找过这样的资源,但一直找不到。
如有任何帮助,我们将不胜感激!
在许多语言中,缩进用于使代码看起来整洁且易于阅读。但是,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
All done!
现在,让我们稍微修改一下代码。
for i in range(0,5):
print(i)
print("All done!")
现在,由于两个打印语句都在for循环下缩进,它们将被执行5次。因此,现在的输出将是这样的:
0
All done!
1
All done!
2
All done!
3
All done!
4
All done!
现在,让我们看看您的代码的初始版本。
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 循环下有 return 语句。这意味着对于 for 循环的每次迭代,都会调用 return 语句。但是,由于 return 语句结束函数,for 循环在第一次迭代时停止。您想要 return list_of_9 数组 在 迭代 nums 之后的总和。因此,return 语句将在 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)
我完全不熟悉编程,因此决定通过学习 Python 开始我的旅程。一路上,我在了解代码在缩进方面的行为方式时遇到了一些问题。我举个例子:
问题:
给定一个整数数组,return数组中 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)
这是错误的,我后来(经过反复试验)发现原因是我没有正确缩进我的最后一行代码。
正确答案应该是:
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 到 return 列表中对象的总和整数是 9。在正确的示例中,Python 将 运行 遍历所有数字,并且仅当完成后,返回到之前的缩进和 return 列表。
我不知道,我想我想知道是否有人可以提供 "walk-through" 每一行中发生的事情,或者指导我找到进一步讨论这个问题的资源。我在网上找过这样的资源,但一直找不到。
如有任何帮助,我们将不胜感激!
在许多语言中,缩进用于使代码看起来整洁且易于阅读。但是,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
All done!
现在,让我们稍微修改一下代码。
for i in range(0,5):
print(i)
print("All done!")
现在,由于两个打印语句都在for循环下缩进,它们将被执行5次。因此,现在的输出将是这样的:
0
All done!
1
All done!
2
All done!
3
All done!
4
All done!
现在,让我们看看您的代码的初始版本。
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 循环下有 return 语句。这意味着对于 for 循环的每次迭代,都会调用 return 语句。但是,由于 return 语句结束函数,for 循环在第一次迭代时停止。您想要 return list_of_9 数组 在 迭代 nums 之后的总和。因此,return 语句将在 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)