求问:我的Python质数查找函数为何返回空列表?
问题分析与修正
原代码的核心错误
- 内层循环起始值错误:内层循环从
1开始,任何整数除以1的余数都是0,所以每次进入内层循环都会直接触发break,else分支永远不会执行,自然不会往列表里添加任何元素,最终返回空列表。 - 质数判断逻辑错误:原代码的逻辑是只要一次不能整除就添加数字,但质数的定义是大于1的自然数,除了1和自身外没有其他正因数,正确的逻辑应该是:遍历2到
data的平方根之间的数,如果都不能整除data,才判定为质数。
修正后的代码
def prime(): a = int(input("enter the first number")) b = int(input('enter the second number')) prime_list = [] for data in range(a, b + 1): # 小于2的数不是质数,直接跳过 if data < 2: continue # 假设当前数是质数 is_prime = True # 内层循环从2开始,到data的平方根(优化性能) for num in range(2, int(data ** 0.5) + 1): if data % num == 0: # 能被整除,说明不是质数 is_prime = False break if is_prime: prime_list.append(data) return prime_list print(prime())
修正说明
- 跳过小于2的数:质数的定义是大于1的自然数,所以直接排除小于2的数。
- 调整内层循环范围:从
2开始到data的平方根(int(data**0.5)+1),因为如果data有一个大于其平方根的因数,必然对应一个小于平方根的因数,这样可以减少循环次数,提升效率。 - 正确的质数判定逻辑:先假设数是质数,只要找到一个能整除的数就标记为非质数并跳出循环,遍历结束后如果仍为质数,再添加到列表中。
内容的提问来源于stack exchange,提问作者Jay_G
相关产品推荐
相关产品推荐

