我的Python质数检查器异常:2、3等质数被误判为非质数
质数判断代码的错误修复
问题根源
- 返回语句缩进错误:
check_prime函数里的return True被写在了for循环内部,导致循环只执行一次就返回结果。比如输入9时,仅检查除数2就返回True,错误判定9为质数; - 边界值处理缺失:输入2时,
range(2, 2)是空序列,循环不会执行,函数无返回值默认返回None,被判定为非质数。
修正后的代码
def prompt_input(input_msg, error_msg): while True: userinput = input(input_msg) try: integer = int(userinput) if integer > 1: return integer print(error_msg) except ValueError: print(error_msg) def check_prime(number): # 直接判定2为质数 if number == 2: return True # 除2外的偶数都不是质数 if number % 2 == 0: return False # 优化循环范围:仅检查到number的平方根,减少迭代次数 for i in range(3, int(number**0.5) + 1, 2): if number % i == 0: return False # 所有可能除数检查完都无法整除,判定为质数 return True primenum = prompt_input( "Give an integer that's bigger than 1: ", "You had one job" ) if check_prime(primenum): print("This is a prime.") else: print("This is not a prime.")
修正说明
- 把
return True移到for循环外部,确保遍历完所有可能的除数后再返回质数判定; - 新增对2的直接判定,同时提前过滤非2的偶数,还将循环范围缩小到目标数的平方根,大幅提升代码运行效率;
- 输入2、3这类质数时,函数会正确返回
True,输出对应判定结果。
内容的提问来源于stack exchange,提问作者Aleksi Vuorinen
相关产品推荐
相关产品推荐

