我正在通过一个官方的Python教程,我不能在我的生活中弄清楚嵌套的for循环如何在例4.4中起作用:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, '==', x, '*', n/x
break
else:
# loop fell through w/o finding a factor
print n, 'is a prime number'
range(2, 10)
生成:n = [2, 3, 4, 5, 6, 7, 8, 9]
,所以我理解它的内部循环方式:for x in range(2, n):
应该生成(x, n-1)
,因此每次迭代都会产生以下x, n
对:
(2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8)
。
现在,显然这永远不会产生n % x == 0
,但这是我能想到的唯一方法。
当我打印这段代码时:
for n in range(2, 10):
for x in range(2, n):
print x, n
检查将生成什么数字,它返回(前6对):
2 3
2 4
3 4
2 5
3 5
4 5
如果第一个x, n
为2, 3
,则第一对n
如何成为2 - 1
,因为range()
的最后一个位置将被排除。我完全失去了。
答案 0 :(得分:0)
原因是range(x,x)
返回一个空列表。在第一次迭代中,您使用for x in range(2, n)
调用n=2
。完全跳过此循环,Python继续外循环的下一次迭代。
答案 1 :(得分:0)
使用第二个代码段:
for n in range(2, 10):
n
不是从2 - 1
开始,而是从2
开始,然后是3
,4
,直到9
。
在嵌套循环中:
for x in range(2, n):
当n
为2
时,for x in range(2, 2)
为空范围。当n
为3
时,x
可以为2
,生成第一个有效对2 3
。当n
为4
时,x
可以是2
和3
,生成第二对2 4
和3 4
。其余的相似。