Python指定区间素数打印代码逻辑错误排查请求
素数检测代码逻辑错误排查
问题根源
你把prime=True放在了外层for循环外面,这个变量只会初始化一次。当程序遇到第一个非素数时,prime会被设为False,后续循环里没有重置prime的操作,哪怕后面遇到素数,prime依然是False,自然不会被打印。
举个例子,假设输入区间是2到5:
- i=2时,
prime为True,内层循环不执行,正常打印2; - i=3时,
prime还是True,内层循环检查2,3%2≠0,循环结束,打印3; - i=4时,内层循环j=2触发4%2=0,
prime设为False并break,不打印4; - i=5时,
prime仍为False,哪怕5是素数也不会被打印。
修正后的代码
把prime=True移到外层循环内部,每次检查新数字前都重置为True:
n1=int(input("Enter the lower limit of the range: ")) n2=int(input("Enter the upper limit of the range: ")) for i in range(n1,n2+1): if(i>1): prime=True # 每次检查新数时,先默认它是素数 for j in range(2,i): if(i%j==0): prime=False break if(prime==True): print(i)
关于for-else结构的作用
你看到的for-else写法其实是简化了维护prime变量的逻辑:当内层for循环正常结束(没触发break),说明这个数没被任何小于它的数整除,也就是素数,此时执行else块的打印操作。本质和修正后的代码逻辑一致,只是不用手动维护prime变量,写法更简洁:
n1=int(input("Enter the lower limit of the range: ")) n2=int(input("Enter the upper limit of the range: ")) for i in range(n1,n2+1): if i > 1: for j in range(2, i): if i % j == 0: break else: print(i)
内容的提问来源于stack exchange,提问作者Somanath Nayak
相关产品推荐
相关产品推荐

