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

Python如何解决素数生成代码重复打印问题,让素数仅输出一次

素数生成器重复输出问题修复方案

问题根因

  • 内层循环逻辑错误:yield n 被放在了内层for循环的分支判断里,每遇到一个无法整除当前数值的因子就返回一次目标数,比如判断5是否为素数时,会分别在5%2≠0、5%3≠0、5%4≠0时各返回一次5,最终导致同一个素数被多次返回打印
  • 额外逻辑缺陷:当前代码会错误输出9、15、25等合数,原因是内层循环只要遇到第一个不能整除的数就会先返回数值,还没等到后续能整除的因子校验触发break

修复方案

核心修改点是将yield语句放到内层for循环的else分支下(Python中for...else语法规则为:仅当循环正常执行完毕、未被break中断时才会执行else代码块),确认遍历完所有小于目标数的因子都无法整除后,再判定为素数返回。

修复后完整代码

def prime_number_generator(num):
    for n in range(2, num):
        for prime in range(2, n):
            if n % prime == 0:
                break
        # 内层循环无break触发,说明n为素数,仅返回一次
        else:
            yield n

number = input('Please input the number:') 
if number.isnumeric():
    num = int(number)
    if num <= 2:
        print('Number must be greater than 2') 
    else: 
        for prime in prime_number_generator(num):
            print(prime, end=', ') 
else: 
    print('Must be a positive integer') 

输入27的输出结果

2, 3, 5, 7, 11, 13, 17, 19, 23, 

如果不需要输出素数2,可以将外层遍历的起始值从2改为3即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:03