Python素数检测代码测试大于4的数时异常,请求排查
素数检测代码问题排查
你的代码核心问题是break语句的位置错误:它没有被包裹在if (x % i) == 0的代码块内,导致for循环仅执行一次迭代就直接终止,既无法完成所有除数的检查,也不会触发循环的else分支。
举个例子,当x=5时,循环第一次迭代i=2,判断5%2≠0后直接执行break,循环提前结束。此时既不会打印"NOT prime",也不会进入else块打印"YES, it's prime",所以没有任何输出,表现为返回NULL。
修正后的代码如下:
x = 5 if x > 1: for i in range(2, x): if (x % i) == 0: print("NOT prime") break # 仅当找到能整除的因数时才终止循环 else: print("YES, it's prime") else: print("NOT prime, because the number is < 1")
补充说明:Python的for循环else分支是特殊语法,只有当循环**正常结束(未被break终止)**时才会执行。把break移到if块内,就能保证只有找到因数时才提前终止循环,否则循环完成所有迭代后进入else分支,正确判断素数。
内容的提问来源于stack exchange,提问作者Silviu C.
相关产品推荐
相关产品推荐

