生成器应该生成素数。它以值2作为self.number开始,然后测试从2到self.number的任何数字是否除以self.number,如果是这种情况,它就不是素数(因为素数只能除以1或它们本身(。
在Generator中,我们为什么需要在这个程序中增加这个步骤?你能详细解释一下吗?
class PrimeGenerator:
def __init__(self, stop):
self.stop = stop
self.start=2
self.number=0
def __next__(self):
for self.number in range(self.start,self.stop):
for x in range(2, self.number):
if self.number % x == 0:
break
else:
self.start=self.number+1
return self.number
raise StopIteration
obj = PrimeGenerator(5)
print(next(obj))
在上面的代码中,为什么我们在这里增加self.start
值?这就是self.start=self.number+1
。我怀疑它是否能够自动地通过for
循环进行迭代。还是为什么这里又增加了?
在它找到一个素数后(这意味着它没有进入break语句,因为没有数字对它进行除法(,你必须增加self.start,在你现在找到的素数之后开始一个数字。然后你返回素数。
如果你不增加self.start,那么你总是会测试第一个素数。
附加:您的测试只测试大于2的素数,因为2%等于零。
对于未来的帖子(尤其是python代码(,请确保正确填写标签。你的代码应该是这样的:
class PrimeGenerator:
def __init__(self, stop):
self.stop = stop
self.start=2
self.number=0
def __next__(self):
for self.number in range(self.start,self.stop):
for x in range(2, self.number):
if self.number % x == 0:
break
else:
self.start=self.number+1
return self.number
obj = PrimeGenerator(7)
print(next(obj))