鱼C论坛

 找回密码
 立即注册
查看: 1148|回复: 1

[已解决]魔法方法迭代器课后作业,动动手第1题

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

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

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

x
为什么我把作业正确答案最后while循环语句改了一下,代码运行结果是每个年份输出三边?
我的代码:
import datetime as dt
class LeapYear():
    def __init__(self):
        self.now = dt.date.today().year

    def isleapyear(self,year):
        if (self.now % 400 == 0) or (self.now % 4 ==0 and self.now %100 != 0):
            return True
        else:
            return False
        
    def __iter__(self):
        return self
   
    def __next__(self):
        while  self.isleapyear(self.now):
            self.temp = self.now
            self.now -= 1
        else:   
        
            self.now -= 1
        return self.temp
最佳答案
2020-8-12 13:57:42
你这样修改之后是有问题的。self.temp有时候有可能没有赋值
今年刚好是闰年,所以 self.temp能赋初值,程序没有出错,若今年不是闰年的话,你的程序就会报出temp 未赋值。
你的程序之所以将一个年份会打印三次,是因为你的while循环是当闰年的时候才循环,平年的时候while循环直接结束,self.temp没有被修改过,仍然是之前赋值的那个闰年值,然后就被输出了。也就是说你修改之后的循环,是当平年的时候则会return,输出一次上一个闰年,这样就会输出三次同一个年份
正常情况下,应该是在平年的时候进行while循环,直到遇到下一个闰年的时候跳出循环,进行return,这样是只有当遇到闰年的时候才return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-12 13:57:42 | 显示全部楼层    本楼为最佳答案   
你这样修改之后是有问题的。self.temp有时候有可能没有赋值
今年刚好是闰年,所以 self.temp能赋初值,程序没有出错,若今年不是闰年的话,你的程序就会报出temp 未赋值。
你的程序之所以将一个年份会打印三次,是因为你的while循环是当闰年的时候才循环,平年的时候while循环直接结束,self.temp没有被修改过,仍然是之前赋值的那个闰年值,然后就被输出了。也就是说你修改之后的循环,是当平年的时候则会return,输出一次上一个闰年,这样就会输出三次同一个年份
正常情况下,应该是在平年的时候进行while循环,直到遇到下一个闰年的时候跳出循环,进行return,这样是只有当遇到闰年的时候才return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 11:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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