这是一个从2和11打印素数的程序。
for num in range(2,12):
prime = True
for i in range(2,num):
if (num%i==0):
prime = False
if prime:
print num
在最后一次迭代期间的第二个for循环中,num = 11的值..所以范围应该取num为10即(n-1)但是在这个程序中值11仍然被打印..怎么样是什么?
答案 0 :(得分:0)
num
确实是11,正在打印num
:
if prime:
print num
range(2, num)
范围从2到10(包括两者),但该范围内的for
循环使用i
作为目标,而不是num
:
for i in range(2, num):
# ^ the target of the for loop
因此,i
的值,而不是num
的值从2到10,永远不会打印i
。内部循环不会更改num
的值,它始终保持设置为11。所以是的,如果打印10
,那就令人惊讶。
请注意,只有print num
仍设置为prime
时才会执行True
行。如果False
可以被任何num
值整除,则会设置为i
。对于11
,2和10(含)之间没有可以除以11的值,因此prime
仍然设置为True
并打印num
。