|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 三与七之间 于 2018-4-27 15:53 编辑
题目如图
我的代码:
- class LeapYear:
- def __init__(self):
- import datetime as dt
- self.now = dt.date.today().year
- def __iter__(self):
- return self
- def __next__(self):
- temp = 0
- if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
- temp = self.now
- self.now -= 1
- return temp
- else:
- self.now -= 1
- l = LeapYear()
- for each in l:
- if each >= 2000:
- print(each)
- else:
- break
复制代码
为啥会报错呢??如图:
小甲鱼的答案是这样的:
- 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
复制代码
我就是把判断是否为闰年的函数写到__next__里头而已啊,为啥就不行呢?难道这个魔法函数是不能放这些判断语句的嘛。。。。
自己参考下吧:
- import datetime as dt
- class LeapYear:
- def __init__(self):
-
- self.now = dt.date.today().year
- def __iter__(self):
- return self
- def __next__(self):
-
- temp = self.now #每次迭代都要用
-
- if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
- self.now -= 1 #每次迭代都要用
- return str(temp) + '是' #不管你成不成,总是要返回值
- else:
- self.now -= 1 #每次迭代都要用
- return str(temp) + '不是' #不管你成不成,总是要返回值
-
-
-
- l = LeapYear()
- i = dt.date.today().year
- for each in l:
- print(each)
- if i<2000: #退出条件
- break
- i-=1
复制代码
|
|