鱼C论坛

 找回密码
 立即注册
查看: 865|回复: 10

[已解决]迭代器

[复制链接]
发表于 2020-6-19 11:36:14 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-19 11:37 编辑


因为你这的代码:
if 0<=self.a:
            if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
                return self.a
            self.a-=1

迭代器条件成立后 return 执行就不会执行下面的代码,也就是红色代码不会运行了,导致你每次迭代都是执行上一次条件成立的值了~

这样即可
  1. class Run():
  2.     def __init__(self):
  3.         self.a=2020
  4.     def __iter__(self):
  5.         return self
  6.     def __next__(self):
  7.         if 0<=self.a:
  8.             if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
  9.                 self.a -= 1
  10.                 return self.a+1
  11.             self.a-=1
  12.         else:
  13.             raise StopIteration('太小了!')
  14. r=Run()
  15. for i in r:
  16.     if i!=None and i>=2000:
  17.         print(i)
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 11:38:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 11:47:49 | 显示全部楼层
今天的我更强了 发表于 2020-6-19 11:44
class Run():
    def __init__(self):
        self.a=2021

看报错:
TypeError: '>=' not supported between instances of 'NoneType' and 'int'


说  NoneType 无法和整型判断大小 说明你函数返回了 None   你参考下我上面的代码,就可以正常运行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 11:59:58 | 显示全部楼层
今天的我更强了 发表于 2020-6-19 11:57
你的代码我看懂了 也理解了,可是这一段代码的问题在哪?能再帮忙点一下吗?

好 看代码这里:

def __next__(self):
        if 0<=self.a:
            self.a-=1
            if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
                return self.a

        else:
            raise StopIteration('太小了!')

迭代过程中只有 if 条件成立 才会执行里面的 return ,当你 if 条件不满足时候 if 外部没有设置 return 返回值

所以 Python 会默认返回一个 None  而 None 无法比较大小,导致报错,所以我那 for 循环里的 if 条件先判断是否为 None 才进行下一步

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 12:10:22 | 显示全部楼层    本楼为最佳答案   
今天的我更强了 发表于 2020-6-19 12:09
最后一个问题.....我的也设置成你那样之后
class Run():
    def __init__(self):

因为第二次for 循环不满足条件 就执行 else 了  然后就 break 退出循环了~

去掉 else 和 break 即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-12 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表