Python嵌套for-loops&休息声明

时间:2015-09-19 00:23:34

标签: python python-2.7 for-loop range

我正在通过一个官方的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, n2, 3,则第一对n如何成为2 - 1,因为range()的最后一个位置将被排除。我完全失去了。

2 个答案:

答案 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开始,然后是34,直到9

在嵌套循环中:

    for x in range(2, n):

n2时,for x in range(2, 2)为空范围。当n3时,x可以为2,生成第一个有效对2 3。当n4时,x可以是23,生成第二对2 43 4。其余的相似。