如果if语句说不应该是2,那么为什么将2打印为素数

bga*_*day 0 python python-3.x

我知道2是素数,但是当运行此代码时,它与if语句条件不匹配if n % x == 0.但2 % 2 == 0它应该是平等的:

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')
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

来自Python的文档 range()

对于正步骤,范围的内容r由公式确定,r[i] = start + step*i其中i >= 0r[i] < stop.

如果r[0]不满足值约束,则范围对象将为空.

所以当n = 2,range(2, n)是一个空范围,因为r[0]2和那不符合约束2 < 2.因此for循环从不运行,因此它永远不会中断,因此,else:块被执行并报告它是素数.