鱼C论坛

 找回密码
 立即注册
查看: 2664|回复: 8

[已解决]代码有病?把把脉

[复制链接]
发表于 2020-12-11 18:53:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小伤口 于 2020-12-22 10:30 编辑

题目:1. 写一个迭代器,要求输出至今为止的所有闰年。如:B"
  1. >>> leapYears = LeapYear()
  2. >>> for i in leapYears:
  3.         if i >=2000:
  4.                 print(i)
  5.         else:
  6.                 break

  7. 2012
  8. 2008
  9. 2004
  10. 2000
复制代码

甲鱼老师代码:
  1. import datetime as dt

  2. class LeapYear:
  3.     def __init__(self):
  4.         self.now = dt.date.today().year

  5.     def isLeapYear(self, year):
  6.         if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
  7.             return True
  8.         else:
  9.             return False
  10.         
  11.     def __iter__(self):
  12.         return self

  13.     def __next__(self):
  14.         while not self.isLeapYear(self.now):
  15.             self.now -= 1

  16.         temp = self.now
  17.         self.now -= 1
  18.         
  19.         return temp
复制代码
(不得不说甲鱼老师眼光长远,这样答案永远是对的
  1. a=LeapYear()
  2. for i in a:
  3.         if i >=2000:
  4.                 print(i)
  5.         else:
  6.                 break

  7.         
  8. 2020
  9. 2016
  10. 2012
  11. 2008
  12. 2004
  13. 2000
复制代码

俺的:
  1. class LeapYear:
  2.     def __init__(self,x=2020):
  3.         self.b=x
  4.         self.temp=0
  5.     def __iter__(self):
  6.         return self
  7.     def __next__(self):
  8.         
  9.         if self.b%400==0 or (self.b%4==0 and self.b%100!=0):
  10.             self.temp=self.b
  11.             self.b-=1
  12.             
  13.         else:   
  14.         
  15.             self.b-=1
  16.         return self.temp
  17.    
复制代码

可俺返回的是这玩意
  1. >>> leapYears = LeapYear()
  2. >>> for i in leapYears:
  3.         if i >=2000:
  4.                 print(i)
  5.         else:
  6.                 break

  7.         
  8. 2020
  9. 2020
  10. 2020
  11. 2020
  12. 2016
  13. 2016
  14. 2016
  15. 2016
  16. 2012
  17. 2012
  18. 2012
  19. 2012
  20. 2008
  21. 2008
  22. 2008
  23. 2008
  24. 2004
  25. 2004
  26. 2004
  27. 2004
  28. 2000
  29. 2000
  30. 2000
  31. 2000
复制代码

有哪位大佬能给我解解惑吗
不胜感激
最佳答案
2020-12-11 19:25:36
大概看了一下,你的问题在于第一次正确返回temp后,之后b-=1并未造成temp变化
所以在实例化的时候直到下一次temp改变(if再次判断通过,刚好隔了4次),之间i一直不变,一直可以输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-11 19:25:36 | 显示全部楼层    本楼为最佳答案   
大概看了一下,你的问题在于第一次正确返回temp后,之后b-=1并未造成temp变化
所以在实例化的时候直到下一次temp改变(if再次判断通过,刚好隔了4次),之间i一直不变,一直可以输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

nice
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 21:42:19 | 显示全部楼层

回帖奖励 +2 鱼币

还有鱼币?刚刚发现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-12 10:17:06 | 显示全部楼层
昨非 发表于 2020-12-11 21:42
还有鱼币?刚刚发现

小机灵鬼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 15:20:59 | 显示全部楼层

回帖奖励 +2 鱼币

good
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-18 15:21:47 | 显示全部楼层

还能找到这个帖子,我很欣赏你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 17:09:06 | 显示全部楼层

回帖奖励 +2 鱼币

学习了,之前还没遇上过这个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 03:41:28 From FishC Mobile | 显示全部楼层
小伤口 发表于 2020-12-18 15:21
还能找到这个帖子,我很欣赏你

哈哈哈哈学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-30 00:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表