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

Python迭代器实现问题:仅用__iter__和next方法求除数出错

我来帮你排查这个问题~

问题根源分析

你的代码里有两个关键问题导致输出不符合预期:

  • 非除数时错误返回0:在next()方法中,你只检查当前self.divisor是否是除数,如果不是就直接返回初始值0,同时不管是否找到除数都让self.divisor +=1。这就导致遇到4、5这种非6的除数时,会输出0。
  • 终止条件遗漏了整数本身:你的终止条件是self.divisor >= self.integer,但实际上整数本身也是自己的除数(比如6的除数应该包含6),这个条件会提前终止,没处理到等于的情况。

修正后的代码

class Divisors(object):
    def __init__(self, integer):
        self.integer = integer

    def __iter__(self):
        self.divisor = 1
        return self

    def next(self):
        # 循环找到下一个有效的除数
        while self.divisor <= self.integer:
            if self.integer % self.divisor == 0:
                current_div = self.divisor
                self.divisor += 1
                return current_div
            self.divisor += 1
        # 所有数检查完毕,抛出终止迭代的异常
        raise StopIteration

代码说明

  • 改成循环查找下一个除数:不再只检查一次就返回,而是持续递增self.divisor,直到找到能整除的数才返回它,避免了非除数时输出0的问题。
  • 调整终止条件:只有当self.divisor超过self.integer时才抛出StopIteration,这样就能包含整数本身这个除数。
  • 测试for i in Divisors(6): print(i),会得到预期的1 2 3 6。

小补充:如果是在Python 3环境中,迭代器的方法名应该是__next__()而不是next(),记得对应修改方法名哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:58:51