我正在尝试编写一个迭代器,给出给定时间段内的闰年。它按预期返回值,但另外返回 None ,这是我不想返回的。这是我的代码。
class year:
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
value = self.start
if self.start < self.end:
if value%4 == 0 and (value%100 !=0 or value%400 == 0):
self.start+=4
return value
else:
self.start+=1
else:
raise StopIteration
y = year(2009,2115)
yiter = iter(y)
for i in y:
print(i)
它给出以下输出。
====== RESTART: C:\Users\Admin\AI-and-ML-practice\py programs\leapYearWithIterator.py ======
None
None
None
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
2052
2056
2060
2064
2068
2072
2076
2080
2084
2088
2092
2096
None
None
None
None
2104
2108
2112
>>>
预期产量
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
2052
2056
2060
2064
2068
2072
2076
2080
2084
2088
2092
2096
2104
2108
2112
>>>
尝试更改上面的代码并获得预期的输出。
将下一个逻辑包装到 while True 循环中。
def __next__(self):
while True:
value = self.start
if self.start < self.end:
if value%4 == 0 and (value%100 !=0 or value%400 == 0):
self.start+=4
return value
else:
self.start+=1
else:
raise StopIteration
我对你的代码做了一些修改,它正在工作。
class Year:
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
value = self.start
while value <= self.end:
if value % 4 == 0 and (value % 100 != 0 or value % 400 == 0):
self.start = value + 4
return value
value += 1
raise StopIteration
y = Year(2009, 2115)
yiter = iter(y)
for i in y:
print(I)