写一个实现迭代器协议的类,让此类可以生成从b开始的n个素数

class Prime:
    def __init__(self,b,n):
        self.begin = b
        self.count = n
    def __repr__():
        return 'Prime(%s,%s)'%(self.begin,self.count)
    def __iter__(self):
        '''创建一个迭代器'''
        return Primeiterable(self.begin,self.count)

class Primeiterable:
    @staticmethod #静态函数  判断素数
    def primenext(m):
        for i in range(2,m+1):
            if m % i == 0:
                break
        else:
            return m

    def __init__(self,begin,num):
        self.count = 0  #素数出现的次数  
        self.number = num
        self.begin = begin 

    def __next__(self):
        #判断素数出现的次数与需要几个素数
        if self.count >= self.number: 
            raise StopIteration
        #进行遍历self.begin后面的数进行判断
        else:
            while True:
                if self.primenext(self.begin):
                    self.count += 1  #计数加1
                    n = self.begin
                    self.begin +=1
                    return n
                self.begin += 1

L = [x for x in Prime(10,4)]

print(L) #L = [11,13,17,19]

猜你喜欢

转载自blog.csdn.net/zhangshuaijun123/article/details/82118815