You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

质数判断代码输出重复矛盾结果,请求排查错误原因

质数判断代码的错误分析

我正在实现判断给定数字是否为质数的功能,例如输入5时,应输出“5 is a prime”。但运行代码后得到了多次相互矛盾的输出。

我的代码如下:

num = int(input("Enter the number: "))
if num > 1:
  for i in range(2,num):
    if (num % i) == 0:
      print(num,"is not a prime number")
      #print(i,"times",num//i,"is",num)
      break
    else:
        print(num,"is a prime number")
        # if input number is less than
        # or equal to 1, it is not prime
  else:
          print(num,"is not a prime number")

输入5后的输出为:

Enter the number: 5

5 is a prime number
5 is a prime number
5 is a prime number
5 is not a prime number

上述输出显示5被三次判定为质数、一次判定为非质数,请问我的代码存在什么错误?


错误原因分析

  • 循环内的else分支频繁触发打印:你写的else是和if (num % i) == 0绑定的,每次循环中只要当前i无法整除num,就会执行一次质数判定的打印。输入5时,循环会遍历i=2、3、4,这三个数都不能整除5,所以会连续打印三次“5 is a prime number”。
  • for...else的逻辑完全颠倒:Python里for...else结构中,else分支会在循环**正常结束(没有被break打断)**时执行,这说明遍历完所有可能的因数都没找到能整除num的数,num应该是质数,但你这里却打印了“is not a prime number”,逻辑完全搞反了。

修正后的代码

方案一:用标志位判断

num = int(input("Enter the number: "))
if num > 1:
    is_prime = True
    for i in range(2, num):
        if num % i == 0:
            print(num, "is not a prime number")
            is_prime = False
            break
    if is_prime:
        print(num, "is a prime number")
else:
    print(num, "is not a prime number")

方案二:正确利用for...else结构

num = int(input("Enter the number: "))
if num > 1:
    for i in range(2, num):
        if num % i == 0:
            print(num, "is not a prime number")
            break
    else:
        # 循环正常结束,无因数,是质数
        print(num, "is a prime number")
else:
    print(num, "is not a prime number")

内容的提问来源于stack exchange,提问作者Anusha_Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:45:10