Python 迭代器类不递增值

Python 迭代器类不递增值,python,iterator,Python,Iterator,我正在使用迭代器类生成几何级数。当我编译代码时,它运行的次数是正确的,但是迭代器的值与第一个值没有变化。例如,如果输入5表示项数,2表示第一项,3表示公共比率,程序将输出2五次。我搞砸了什么 class geo_p: def __init__(self, n): self.a = int(input('Enter the first term:')) self.d = int(input('Enter the common ratio:'))

我正在使用迭代器类生成几何级数。当我编译代码时,它运行的次数是正确的,但是迭代器的值与第一个值没有变化。例如,如果输入5表示项数,2表示第一项,3表示公共比率,程序将输出2五次。我搞砸了什么

class geo_p:
    def __init__(self, n):
        self.a = int(input('Enter the first term:'))
        self.d = int(input('Enter the common ratio:'))
        self.i = self.a
        self.n = n

    def _iter_(self):
        return self

    def _next_(self):
            i = 1
            if i < self.n:
                #sets curr = to the current term in progression
                current = self.i
                self.i = (self.i * (self.d**(i-1))) 
                i +=1
                return current

            else:
                raise StopIteration()

y = geo_p
n = int(input('Enter the number of terms: '))
y.__init__(y, n)
print(y)
for i in range (n):
    print(y._next_(y)) 



        
class geo\u p:
定义初始化(self,n):
self.a=int(输入('输入第一项:'))
self.d=int(输入('输入公共比率:'))
self.i=self.a
self.n=n
定义(自我):
回归自我
定义下一个(自我):
i=1
如果我
i
始终为1(在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

1-0总是零

任何升到零的值都是1(@
self.d**(i-1)

所以你最终得到的是
self.i=self.i*1


但正如对这个答案和原始问题的评论所指出的。。。你还有其他问题。。。但是这就是为什么调用self.i
时不递增的原因。为什么使用类而不是生成器函数?你是说
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?这毫无意义。Just do
y=geo_p(n)
Stack Overflow无意取代现有的文档和教程。您需要重复有关此主题的教程,并按照其中的示例进行操作。您试图将
y
用作类、实例和值。您已经实现了自己的方法(单下划线)而不是标准的迭代器命名(双下划线)。您似乎从根本上对迭代器/可重用性的观点感到困惑
print(y._next_(y))
不要直接调用特殊方法。如果您确实想这样做,请使用
next(y)
,但实际上,迭代器的全部要点是,您可以在y中为x执行
:print(x)
。问题的很大一部分是OP甚至没有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu next\uuuuuuuuu
…他有。。。我想。。。他的缩进是错误的(因为他不知道如何将代码块添加到stackoverflow(我假设))。,。。但听起来他好像在迭代和打印真实代码中的某些内容。。。因此,我只是假设他们的抄本中有打字错误,这与
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不同。这同样适用于我现在看到的lol:为我的误解道歉。我意识到我犯的错误。似乎我对一些关键概念有一个根本性的误解,我需要回顾一下。谢谢你的回答。