|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
迭代器的课后作业动动手,题目:写一个迭代器,要求输出迄今为止所有的闰年;
我的代码是这样:
- class Leapyear:
- def __init__(self):
- self.year=0
- def __iter__(self):
- return self
- def __next__(self):
- self.year=self.year+1
- if self.year%4==0 and self.year%100 !=0:
- return self,year
复制代码
- for each in leapyear:
- if each<10000:
- print(each)
复制代码
我理解的是在next里面让年份每次自动+1,然后碰到满足的条件时,就返回符合条件的年份。但是输出的结果报错“TypeError: '<' not supported between instances of 'NoneType' and 'int'”
错误的地方应该是在返回的self.year里面有很多None的值,没办法和int类型进行比较。这里的代码只是想初步测试一下核心功能能否实现,但是在测试的时候就发现了问题。
但是不明白为什么会在类里返回大量的none值...
还请大神帮忙看一下原理,万分感谢。
因为你的迭代器的 __next__ 方法里面如果 if 条件不满足的话,就不会执行 if 语句块里面的 return self.year,
所以就返回了默认的 None,而你后面在 for 循环里面用 each 与 10000 比较,当 each 为 None 时,是没法比较的,
所以你应该要先判断一下 each 存不存在,用 and 就可以,
因为 and 的短路机制只有第一个表达式为 True 才会判断第二个表达式,None 很显然为 False,
故对你的代码修改如下:
- class Leapyear:
- def __init__(self):
- self.year=0
- def __iter__(self):
- return self
- def __next__(self):
- self.year=self.year+1
- if self.year%4==0 and self.year%100 !=0:
- return self.year
- leapyear = Leapyear()
- for each in leapyear:
- if each and each<10000: # 改了这行
- print(each)
复制代码
|
|