awaken_gx 2021-09-13 21:52 采纳率: 100%
浏览 28
已结题

在__next__函数中 两个self.cur_pos += 1 有什么不一样 ,第一个 self.cur_pos += 1是什么用途?

写一个实现迭代器协议的类

让此类可以生成从b开始的n个素数

class Primes:
    @staticmethod
    def __isprime(x):
        for i in range(2, x):  # 判断是否为素数,
            if x % i == 0:   # 除了 1和他本身外不能被其他自然数整除
                return False
        return True

    def __init__(self, b, n):
        self.begin = b
        self.count = n

    def __iter__(self):
        self.cur_pos = self.begin  # 设置迭代的起始值
        self.cur_count = 0
        return self

    def __next__(self):
        # 已完成生成,不需要再生成,我停止迭代
        if self.cur_count >= self.count:
            raise  StopIteration
        self.cur_count += 1  # 计数加1
        while True:
            if self.__isprime(self.cur_pos):
                v = self.cur_pos
                self.cur_pos  +=  1
                return v
            self.cur_pos += 1  # 为下一次循环做准备



for x in Primes(10, 4):
    print(x)  # 11 13 17 19

![img](

"=600 #l

  • 写回答

1条回答 默认 最新

  • 我不是玉 2021-09-13 22:26
    关注

    两个 self.cur_pos += 1 作用一样,都是为下一次判断做准备(当前数加一)。写成下面等效形式会更好理解一些:如果当前不是素数,+1继续在当前次迭代内判断(还没退出while循环);如果当前是素数,则返回当前值(退出while),同时也要+1以便 下一次迭代 继续找新的素数。

    while True:
        if self.__isprime(self.cur_pos):
            v = self.cur_pos
            self.cur_pos  +=  1
            return v
        else:
            self.cur_pos += 1  # 为下一次循环做准备
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器