鱼C论坛

 找回密码
 立即注册
查看: 1262|回复: 18

[已解决]迭代器求解闰年

[复制链接]
发表于 2020-6-18 21:14:58 | 显示全部楼层    本楼为最佳答案   

这样吧:
  1. class LeapYear:
  2.     def __init__(self):
  3.         self.year=1
  4.     def __iter__(self):
  5.         return self
  6.     def __next__(self):
  7.         if self.year<=2020:
  8.             while True:
  9.                 if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
  10.                     self.year += 1
  11.                     return self.year-1
  12.                 self.year+=1
  13.         else:
  14.             raise StopIteration

  15. a = LeapYear()
  16. print(next(a))
  17. print(next(a))
  18. print(next(a))
  19. print(next(a))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 21:30:28 | 显示全部楼层
慕容逍客 发表于 2020-6-18 21:26
大佬,可不可以解释一下,我代码这样写会出现什么问题?我实在想不明白,可能是没理解__next__.


你的代码没有循环 所以不会进入 if 代码块 而且你 if 代码块之外没有设置 __next__ 魔法方法的返回值,所以当不满足 if 条件时候 返回的都是 None

你的代码只有打印到闰年才会返回也就是print(next(a)) 四次才会返回第一个闰年 4 ,而且要在 if 满足后 +1  否则下次调用会一直在 4 那

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

使用道具 举报

发表于 2020-6-18 21:33:54 | 显示全部楼层
慕容逍客 发表于 2020-6-18 21:32
平年加1不应该放到else里面吗?如果您这样写,不管平年闰年都要加1,而且闰年重复加了一次。



你的代码可以这样改,如果不想用循环,而且不想打印 None 的话 就在 if 外也设置个 return 即可

  1. class LeapYear:
  2.     def __init__(self):
  3.         self.year=1
  4.     def __iter__(self):
  5.         return self
  6.     def __next__(self):
  7.         if self.year<=2020:
  8.             if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
  9.                 self.year += 1
  10.                 return '%d'%(self.year-1)+'是闰年'
  11.             self.year+=1
  12.             return '%d'%(self.year-1)+'不是闰年'
  13.         else:
  14.             raise StopIteration


  15. a = LeapYear()
  16. print(next(a))
  17. print(next(a))
  18. print(next(a))
  19. print(next(a))
  20. print(next(a))
  21. print(next(a))
  22. print(next(a))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 21:35:58 | 显示全部楼层
慕容逍客 发表于 2020-6-18 21:26
大佬,可不可以解释一下,我代码这样写会出现什么问题?我实在想不明白,可能是没理解__next__.


并不是因为你没有理解__next__ 所有函数都是这样的 ,如果函数没有执行到 return 的值 那么 Python 默认返回的就是 None滴~~

比如:
  1. def func():
  2.     pass
  3. print(func())
复制代码

这样也是打印了 None  就是因为没有设置 return~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 21:44:45 | 显示全部楼层
慕容逍客 发表于 2020-6-18 21:42
两个都想设最佳怎么办,谢谢两位大佬

哈哈  没事 随意就好~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 21:46:19 | 显示全部楼层
慕容逍客 发表于 2020-6-18 21:45
唉,搞了半天是我没有真正理解函数中的return

多用就会娴熟起来了~开始的阶段都会的~加油吧!

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-10 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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