|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小伤口 于 2020-12-22 10:30 编辑
题目:1. 写一个迭代器,要求输出至今为止的所有闰年。如:B"
- >>> 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
复制代码 (不得不说甲鱼老师眼光长远,这样答案永远是对的 )
- a=LeapYear()
- for i in a:
- if i >=2000:
- print(i)
- else:
- break
-
- 2020
- 2016
- 2012
- 2008
- 2004
- 2000
复制代码
俺的:- class LeapYear:
- def __init__(self,x=2020):
- self.b=x
- self.temp=0
- def __iter__(self):
- return self
- def __next__(self):
-
- if self.b%400==0 or (self.b%4==0 and self.b%100!=0):
- self.temp=self.b
- self.b-=1
-
- else:
-
- self.b-=1
- return self.temp
-
复制代码
可俺返回的是这玩意
- >>> leapYears = LeapYear()
- >>> for i in leapYears:
- if i >=2000:
- print(i)
- else:
- break
-
- 2020
- 2020
- 2020
- 2020
- 2016
- 2016
- 2016
- 2016
- 2012
- 2012
- 2012
- 2012
- 2008
- 2008
- 2008
- 2008
- 2004
- 2004
- 2004
- 2004
- 2000
- 2000
- 2000
- 2000
复制代码
有哪位大佬能给我解解惑吗
不胜感激
大概看了一下,你的问题在于第一次正确返回temp后,之后b-=1并未造成temp变化
所以在实例化的时候直到下一次temp改变(if再次判断通过,刚好隔了4次),之间i一直不变,一直可以输出
|
|