我一直在寻找答案,但是找不到这个问题。我对break语句中python文档(教程的4.4)中的以下代码感到困惑。该代码可以正常工作,但是为什么发现2是质数呢?在第一次运行时,似乎n%x为2%2 == 0?关于范围如何迭代,我缺少什么?
for n in range(2, 100):
for x in range (2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
print(n, 'is prime')
其他类似代码首先排除了2,因为它是“特殊”素数,我无法弄清楚如果不这样做,该代码将如何消失。
答案 0 :(得分:3)
如果n
为2,则range(2, n)
中没有2。这是一个空范围。
range(a,b)
贯穿于大于或等于a
且严格小于b
的整数。
在您的程序中,语句
if n % x == 0:
...
处于给定范围内每个x
运行的循环中。如果范围为空,则循环执行0次,因此不检查任何因素。
答案 1 :(得分:1)
range()
认为第一个限制为包括性,而第二个限制为排除性。因此,当第一次迭代运行时,range(2, 2)
不会返回任何元素。因此,不进行任何检查,将2视为素数。