鱼C论坛

 找回密码
 立即注册
查看: 1540|回复: 4

[已解决]小甲鱼零基础入门学习python第48讲动手00求助

[复制链接]
发表于 2018-4-27 15:50:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 三与七之间 于 2018-4-27 15:53 编辑

题目如图 捕获.PNG

我的代码:
  1. class LeapYear:

  2.     def __init__(self):
  3.         import datetime as dt
  4.         self.now = dt.date.today().year
  5.     def __iter__(self):
  6.         return self
  7.     def __next__(self):
  8.         temp = 0
  9.         if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
  10.             temp = self.now
  11.             self.now -= 1
  12.             return temp
  13.         else:
  14.             self.now -= 1

  15. l = LeapYear()
  16. for each in l:
  17.     if each >= 2000:
  18.         print(each)
  19.     else:
  20.         break
复制代码



为啥会报错呢??如图:
捕获.PNG

小甲鱼的答案是这样的:
  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.         return temp
复制代码


我就是把判断是否为闰年的函数写到__next__里头而已啊,为啥就不行呢?难道这个魔法函数是不能放这些判断语句的嘛。。。。
最佳答案
2018-4-27 21:48:40
自己参考下吧:
  1. import datetime as dt

  2. class LeapYear:

  3.     def __init__(self):
  4.         
  5.         self.now = dt.date.today().year
  6.     def __iter__(self):
  7.         return self
  8.     def __next__(self):
  9.         
  10.         temp = self.now #每次迭代都要用      
  11.       
  12.         if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
  13.             self.now -= 1 #每次迭代都要用
  14.             return str(temp) + '是' #不管你成不成,总是要返回值
  15.         else:
  16.             self.now -= 1 #每次迭代都要用
  17.             return str(temp) + '不是' #不管你成不成,总是要返回值
  18.         
  19.       
  20.         

  21. l = LeapYear()
  22. i = dt.date.today().year
  23. for each in l:
  24.     print(each)
  25.     if i<2000: #退出条件
  26.         break
  27.     i-=1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 21:48:40 | 显示全部楼层    本楼为最佳答案   
自己参考下吧:
  1. import datetime as dt

  2. class LeapYear:

  3.     def __init__(self):
  4.         
  5.         self.now = dt.date.today().year
  6.     def __iter__(self):
  7.         return self
  8.     def __next__(self):
  9.         
  10.         temp = self.now #每次迭代都要用      
  11.       
  12.         if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
  13.             self.now -= 1 #每次迭代都要用
  14.             return str(temp) + '是' #不管你成不成,总是要返回值
  15.         else:
  16.             self.now -= 1 #每次迭代都要用
  17.             return str(temp) + '不是' #不管你成不成,总是要返回值
  18.         
  19.       
  20.         

  21. l = LeapYear()
  22. i = dt.date.today().year
  23. for each in l:
  24.     print(each)
  25.     if i<2000: #退出条件
  26.         break
  27.     i-=1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-28 09:36:03 | 显示全部楼层
  1. def __next__(self):
  2.         temp = 0
  3.         if (self.now % 400 == 0) or (self.now % 4 == 0 and self.now % 100 != 0):
  4.             temp = self.now
  5.             self.now -= 1
  6.             return temp
  7.         else:
  8.             self.now -= 1
复制代码


在这个函数里,你的else没写返回值啊,所以就会出现你写的那个错误

还有__next__里面应该写一个循环呀,不是闰年的都不要,只有是闰年的时候才输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-28 16:32:55 | 显示全部楼层
shuofxz 发表于 2018-4-28 09:36
在这个函数里,你的else没写返回值啊,所以就会出现你写的那个错误

还有__next__里面应该写一个循环 ...

嗯呢,好的,让偶思考一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-28 16:42:33 | 显示全部楼层
shuofxz 发表于 2018-4-28 09:36
在这个函数里,你的else没写返回值啊,所以就会出现你写的那个错误

还有__next__里面应该写一个循环 ...

哎呀妈,我理解了,我之前相差了,觉得说每次不是闰年的话程序会自动跳过不输出还有还可以没事人似的继续往下运行,然后直到遇到是闰年为止,可没想到,若遇到不是闰年的其实程序就走不下去了,每次迭代只能走一圈,,,,,,,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-11 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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