小伤口 发表于 2020-12-11 18:53:55

代码有病?把把脉

本帖最后由 小伤口 于 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
(不得不说甲鱼老师眼光长远,这样答案永远是对的{:10_256:} )
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
有哪位大佬能给我解解惑吗{:10_266:}
不胜感激

昨非 发表于 2020-12-11 19:25:36

大概看了一下,你的问题在于第一次正确返回temp后,之后b-=1并未造成temp变化
所以在实例化的时候直到下一次temp改变(if再次判断通过,刚好隔了4次),之间i一直不变,一直可以输出

小伤口 发表于 2020-12-11 19:31:50

昨非 发表于 2020-12-11 19:25
大概看了一下,你的问题在于第一次正确返回temp后,之后b-=1并未造成temp变化
所以在实例化的时候直到下一 ...

nice
{:10_297:}

昨非 发表于 2020-12-11 21:42:19

还有鱼币?刚刚发现{:10_256:}

小伤口 发表于 2020-12-12 10:17:06

昨非 发表于 2020-12-11 21:42
还有鱼币?刚刚发现

小机灵鬼{:10_334:}

lonhun 发表于 2020-12-18 15:20:59

good

小伤口 发表于 2020-12-18 15:21:47

lonhun 发表于 2020-12-18 15:20
good

还能找到这个帖子,我很欣赏你{:10_256:}

Daniel_Zhang 发表于 2020-12-18 17:09:06

学习了,之前还没遇上过这个问题

lonhun 发表于 2020-12-22 03:41:28

小伤口 发表于 2020-12-18 15:21
还能找到这个帖子,我很欣赏你

哈哈哈哈学习
页: [1]
查看完整版本: 代码有病?把把脉