我一直在寻找答案,但没有找到,因此出现了这个问题。我对 python 文档(教程 4.4)中关于break语句的以下代码感到困惑。代码工作正常,但为什么 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,因为它是一个“特殊”素数,我无法弄清楚这段代码如何不这样做。
最佳答案
如果n
为2,则2不在range(2, n)
内。这是一个空范围。
range(a,b)
遍历大于或等于 a
且严格小于 b
的整数。
在你的程序中,语句
if n % x == 0:
...
处于针对给定范围内的每个 x
运行的循环中。如果范围为空,则循环执行零次,因此不检查任何因素。
关于python - 为什么这将 2 评估为素数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091626/