Python素数判断程序返回None而非预期True的问题排查
问题产生原因
- Python函数在没有显式执行
return语句时,默认返回值为None。你的代码逻辑存在分支遗漏:当输入的数字大于1,且能被2到int(num/2)+1区间内的任意整数整除时,会触发break跳出for循环,此时既不会执行for循环配套else分支的return "True",也不会走到外层else的return "False",该分支下函数无返回值,因此得到None。 - 额外说明:33本身是合数(3×11=33),逻辑上判定结果应为False,你预期返回True属于对素数判定逻辑的预期偏差,测试素数可使用2、3、5、31这类实际素数验证。
代码修复方案
只需在for循环结束后(即触发break跳出循环的场景)新增返回False的逻辑即可,修改后的完整代码如下:
def acc_p(num): if num > 1: for i in range(2, int(num/2)+1): if num % i == 0: break else: return "True" # 补充break场景的返回值 return "False" else: return "False" x = int(input("Enter number")) c = acc_p(x) print(c)
修改后输入素数会返回True,输入合数或小于等于1的数字会返回False,不会再出现None的情况。
内容的提问来源于stack exchange,提问作者Pranav
相关产品推荐
相关产品推荐

