|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
写一个迭代器,要求输出至今为止的所有闰年。如:
>>> leapYears = LeapYear()
>>> for i in leapYears:
if i >=2000:
print(i)
else:
break
2012
2008
2004
2000
import datetime as dt
class LeapYear:
def __init__(self):
self.now = dt.date.today().year
def isLeapYear(self, year):
if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
return True
else:
return False
def __iter__(self):
return self
def __next__(self):
while not self.isLeapYear(self.now):
self.now -= 1
temp = self.now
self.now -= 1
return temp
请问如果不引入datetime模块,如何做这个迭代器?
本帖最后由 jackz007 于 2024-4-18 12:53 编辑
- class LeapYear:
- def __init__(self , x) : # 为 __init__() 添加一个参数,用于输入当前年份
- self . org = x
- self . now = x
- def reset(self) : # 添加此函数,用于重新初始化迭代器
- self . now = self . org
- def isLeapYear(self, year):
- if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
- return True
- else:
- return False
-
- def __iter__(self):
- return self
- def __next__(self) :
- while self . now >= 0 and not self . isLeapYear(self . now) :
- self . now -= 1
- if self . now >= 0 :
- self . now -= 1
- else:
- raise StopIteration()
- return self . now + 1
- ax = LeapYear(2024)
- for x in ax :
- print(x)
- ax . reset() # 重新初始化迭代器
- for x in ax :
- print(x)
复制代码
|
|