如何编写接收两个整数参数并返回区间内素数列表的Python函数?
代码修正方案
现有代码存在的问题
- 函数职责混淆:
isPrime的作用应该是判断单个数字是否为素数,你当前的实现把输入的区间参数直接写到了素数判断逻辑里,逻辑完全错位 - 素数判断逻辑错误:判断一个数x是否为素数,只需要验证2到√x之间有没有能整除x的整数,不需要遍历你输入的区间范围
- 缺少核心业务逻辑:没有遍历两个输入整数之间的所有数、收集符合要求素数的流程
修正后可直接运行的代码
# 首先实现单独判断单个数字是否为素数的工具函数 def is_prime(x): if x <= 1: return False # 优化:只需要遍历到x的平方根即可,减少循环次数 for i in range(2, int(x**0.5) + 1): if x % i == 0: return False return True # 实现查询区间内所有素数的函数,接收两个整数参数,返回素数列表 def get_primes_between(start, end): prime_list = [] # 处理start比end大的异常情况,保证可以兼容输入顺序颠倒的场景 left = min(start, end) right = max(start, end) for num in range(left, right + 1): if is_prime(num): prime_list.append(num) return prime_list # 原有输入逻辑,调用函数拿到结果 a, n = map(int, input("Enter a and n: ").split()) result = get_primes_between(a, n) # 打印结果 print(result)
代码说明
- 拆分了工具函数和业务函数,
is_prime只负责单个数字的素数判断,逻辑清晰易维护 - 兼容输入的两个参数大小顺序问题,就算先输入大的数再输入小的数也能正常返回结果
- 素数判断做了性能优化,循环次数比原有逻辑少很多,数值大的时候效率提升非常明显
内容的提问来源于stack exchange,提问作者Ava
相关产品推荐
相关产品推荐

