を返していない私のコードです:Pythonの:イテレータはここでどれ
class Prizes(object):
def __init__(self, purchases, n, d):
self.p = purchases
self.n = n
self.d = d
self.x = 1
def __iter__(self):
return self
def __next__(self):
print(self.x)
if self.x % self.n == 0 and self.p[self.x - 1] % self.d == 0:
self.x = self.x + 1
return self.x - 1
elif self.x > len(self.p):
raise StopIteration
self.x = self.x + 1
def superPrize(purchases, n, d):
return list(Prizes(purchases, n, d))
使い方の例:
superPrize([12, 43, 13, 465, 1, 13], 2, 3)
出力は次のようになります。
[4]
しかし、実際の出力は次のようになります。
[None, None, None, 4, None, None].
どうしてですか?
あなたの問題は__next__' 'の実装です。 Pythonが '__next__'を呼び出すとき、常に戻り値を期待します。しかし、あなたのケースでは、必ずしもそれぞれの呼び出しで戻り値があるとは限りません。したがって、Pythonは関数のデフォルト戻り値 'None'を使います。 –
この「Prizes」イテレータを作ることのポイントは何ですか? –
また、最初の質問をここで聞いていい仕事をしました。あなたはすべてを正しくしました。あなたは[mcve]を提供し、あなたの期待される出力を掲示し、あなたの実際の投稿を掲載しました。このため、あなたは(うまくいけば)有用な答えを得ました。おめでとう。 –