使用Python计算100到200之间质数个数的代码错误排查
代码错误原因
- 核心逻辑反转:
isPrime函数中,当num % i == 0时说明当前数存在除了1和自身之外的因数,不是质数,你当前写的是返回True,逻辑完全写反。 - 缺少分支返回值:函数没有覆盖所有执行路径的返回结果:如果循环走完都没有找到可整除的因数,说明是质数,应该返回
True;同时num <= 1的分支也没有返回值,会默认返回None,后续判断会出错。 - 区间取值问题:
range(100, 200)是左闭右开区间,只会遍历到199,如果题目要求统计包含200的范围,需要改成range(100, 201)。
修复后代码
def isPrime(num): if num <= 1: return False for i in range(2, num): if num % i == 0: # 存在其他因数,不是质数 return False # 循环跑完没有找到因数,是质数 return True def primeNumbers(): count = 0 # 要包含200就把200改成201 for num in range(100, 200): if isPrime(num): count += 1 print(count) primeNumbers()
优化提示
你还可以把循环范围调整为range(2, int(num**0.5)+1),不用遍历到num-1,运行效率会更高。因为一个数如果存在大于它平方根的因数,对应的另一个因数一定小于它的平方根,已经提前完成判断了。
内容的提问来源于stack exchange,提问作者Qube
相关产品推荐
相关产品推荐

