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

为何这段Python质数判断代码会重复输出相同质数?

质数重复输出的原因及修复方案

问题根源

你的代码逻辑错在每次内层循环检测到当前i不能整除number时,就立刻打印number,而不是等所有i都检测完毕,确认没有任何数能整除它之后再打印。

举个例子,拿数字5来说:

  • 内层循环i从2到4(共3次循环)
  • 每次i=2、3、4时,5%i都不等于0,所以每次都会执行print(number),于是5被打印了3次
  • 同理,7的内层循环i从2到6(共5次),每次都不能整除,所以打印5次7

另外要纠正一个错误:你预期里的9不是质数,它能被3整除。你的代码里9只打印了1次,是因为当i=3时,9%3=0触发了break,内层循环提前结束,所以只在i=2时打印了一次9。

修复代码

利用Python的for-else语法(else块会在for循环正常结束,没有被break中断时执行),就能实现每个质数只打印一次:

nums = range(1, 11)

for number in nums:
    if number > 1:
        for i in range(2, number):
            if number % i == 0:
                break
        else:
            # 内层循环完整跑完,说明没有找到能整除number的数,是质数
            print(number)

运行这段代码,输出会是:

3
5
7

这才是1到10之间的正确质数列表。

另一种写法(用标记变量)

如果你对for-else不太习惯,也可以用一个布尔变量标记是否为质数:

nums = range(1, 11)

for number in nums:
    if number > 1:
        is_prime = True
        for i in range(2, number):
            if number % i == 0:
                is_prime = False
                break
        if is_prime:
            print(number)

效果和上面的代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:27:24