在迭代器的课后作业卡住了,没弄明白,还请大佬帮忙解答一下
迭代器的课后作业动动手,题目:写一个迭代器,要求输出迄今为止所有的闰年;我的代码是这样:
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值...
还请大神帮忙看一下原理,万分感谢。 你想要这样?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
else:
return self.__next__()
leapyear = Leapyear()
for each in leapyear:
if each < 1e5:
print(each) 因为你的迭代器的 __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)
isdkz 发表于 2022-3-26 22:35
因为你的迭代器的 __next__ 方法里面如果 if 条件不满足的话,就不会执行 if 语句块里面的 return self.yea ...
万分感谢 傻眼貓咪 发表于 2022-3-26 22:10
你想要这样?
万分感谢~
页:
[1]