我正在学习官方的Python教程,到了我无法理解的地方,为什么X突然变成3。请检查下面的代码:
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
[循环返回到n = 9
时,为什么选择x = 3
而不是x = 2
????那么,何时循环到达x = 3
的位置?我的逻辑是如果为n = 9
,则为9 is a prime number
(尽管不是),因为x = 2
。
非常感谢!
这是一个称为for-else循环的结构。如果for循环运行完成而不调用break
,则将执行else块。如果再次查看,您会发现else缩进到与for相同的级别,而不是if。
因此x
的每个值在声明n为素数之前都要进行检查。
9 = 3 * 3因为您的程序中的else条件仅在第二个for循环完全执行后才运行。让我们从n = 9开始,x从2开始它将检查9%2 == 0是否为False,然后第二个for循环将迭代,并且x等于3,然后检查是否9%3 == 0,这是True,因此它显示9 = 3 * 3。