48讲动动手 1
要求计算从现在开始到2000年的闰年年份我打的这段class LeapYear:
def __init__(self):
self.year=2020
self.origin=2000
def __iter__(self):
return self
def __next__(self):
if self.year>=self.origin:
if (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):
print(self.year)
self.year-=1
else:
self.year-=1
else:
raise StopIteration
通过L=LeapYear()
for i in L:
print(i)
打出来的是
2020
None
None
None
None
2016
None
None
None
None
2012
None
None
None
None
2008
None
None
None
None
2004
None
None
None
None
2000
None
能请教下是哪里出问题了吗? 那些None是因为你写的__next__没有返回值,那些年份是在__next__中输出的。
正常情况下应该是在__next__中有个循环,当是闰年的时候,进行return
class LeapYear:
def __init__(self):
self.year=2020
self.origin=2000
def __iter__(self):
return self
def __next__(self):
if self.year>=self.origin:
while not (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):#这里改为while循环,当不是闰年的时候,就继续循环
#print(self.year)
self.year-=1
temp=self.year#是闰年的时候,保存该年份
self.year-=1#继续减一
return temp#然后返回闰年年份
else:
raise StopIteration 本帖最后由 昨非 于 2020-8-27 21:19 编辑
if (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):
print(self.year)
self.year-=1
else:
self.year-=1
看这段代码,只有判断为真(是闰年)时,才会答应出对应年份,此时,以迭代器访问到的 i 为你想要的闰年年份
否则(判断条件不成立时),迭代器没有任何返回值,所以循环访问i的结果就是none
所以应该:
L=LeapYear()
for i in L:
if i>=0:
print(i)
else:
break
将返回为空的i跳过,就好 sunrise085 发表于 2020-8-27 21:14
那些None是因为你写的__next__没有返回值,那些年份是在__next__中输出的。
正常情况下应该是在__next__中 ...
所以说必须用return 是吗??print是不行的? 只爱整活周淑怡 发表于 2020-8-28 12:44
所以说必须用return 是吗??print是不行的?
当然啦!
页:
[1]