Python嵌套for循环疑问:第二个for中range(2,k)的k及a的取值
关于这段Python质数判断代码的疑问解答
先贴出你提到的代码:
for k in range(2, 10): for a in range(2, k): if k % a == 0: print(k, "equals", a, "*", k // a) break else: print(k, "is a prime number")
核心疑问解答
第二个for循环里的k是什么?
它就是外层循环当前正在处理的k值,根本不是什么k-1。比如外层循环第一次迭代k=2时,第二个循环的range(2, k)就是range(2,2),这个区间是空的,循环直接不执行;当k=3时,range(2,3)只包含2,a就取2;k=4时,range(2,4)包含2、3,a依次取这两个数。变量a的取值范围
Python的range(start, end)是左闭右开区间,所以range(2, k)会生成从2开始,到k-1结束的所有整数。举几个例子:- 当k=5时,a的取值是2、3、4
- 当k=7时,a的取值是2、3、4、5、6
- 当k=9时,a的取值是2到8的所有整数
为啥第二个循环不取2到9?
这段代码是判断k是不是质数,质数的定义是只能被1和自身整除的数。要验证这一点,只需要检查2到k-1之间的数能不能整除k就行——比k大的数不可能整除k(除了k自己,但k自己不在检查范围内),完全没必要去检查到9,那样做纯粹是做无用功。
内容的提问来源于stack exchange,提问作者asumus
相关产品推荐
相关产品推荐

