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

两段质数判断代码看似相同却输出不同,我的代码问题出在哪?

质数判断代码的Bug分析

你的代码和朋友的代码核心差异在于else语句的缩进位置,这直接导致了逻辑错误:

代码对比

朋友的代码

#my friend's
num = int(input())

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")
else:
   print(num,"is not a prime number")

你的代码

#mine
num = int(input())

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")
else:
    print(num,"is not a prime number")

问题原因

  • 朋友的代码用了Python特有的for-else语法:else块和for循环对齐,只有当for循环完整遍历完所有元素、没有被break中断时,才会执行else里的代码。也就是说,只有确认所有2到num-1的数都不能整除num时,才会打印一次"是质数"。
  • 你的代码里,else块和循环内部的if对齐:每一次循环中,只要当前的i不能整除num,就会执行else里的打印语句。输入121时,i从2到10都无法整除121,所以会重复打印"121 is a prime number",直到i=11时触发if条件,才会打印非质数信息并终止循环。

修正后的代码

把else块移到和for循环同一缩进级别即可:

#修正后的代码
num = int(input())

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")
else:
    print(num,"is not a prime number")

此时输入121,输出就会和朋友的代码一致:

121
121 is not a prime number
11 times 11 is 121

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:50:26