2016-09-15 70 views
1

我知道2是一个素数,但是当这个代码运行它不匹配if语句条件if n % x == 0。但2 % 2 == 0所以它应该是一个等于:为什么是2打印为主要时,如果声明说,它不应该

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') 
+0

https://docs.python.org/2/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops – Li357

+0

@ AndrewL.It's _ironic_ that you're posting a链接到[OP获得代码的地方](https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops)对于他/她的问题:-) OP应该提及哪些。 – aneroid

+0

是什么让你觉得它曾经测试'2%2'? –

回答

6

range()

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

如果r[0]不符合值约束,范围对象将为空。

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

+0

第二个参数被称为“停止”,这里使用的值是n。所以我会说它在n停止。由于这是关于Python 3的,'range(2,n)'不是一个列表。 –

+0

@StefanPochmann我改写了它。 – Barmar

相关问题