魔法方法迭代器课后作业,动动手第1题
为什么我把作业正确答案最后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):
whileself.isleapyear(self.now):
self.temp = self.now
self.now -= 1
else:
self.now -= 1
return self.temp 你这样修改之后是有问题的。self.temp有时候有可能没有赋值
今年刚好是闰年,所以 self.temp能赋初值,程序没有出错,若今年不是闰年的话,你的程序就会报出temp 未赋值。
你的程序之所以将一个年份会打印三次,是因为你的while循环是当闰年的时候才循环,平年的时候while循环直接结束,self.temp没有被修改过,仍然是之前赋值的那个闰年值,然后就被输出了。也就是说你修改之后的循环,是当平年的时候则会return,输出一次上一个闰年,这样就会输出三次同一个年份
正常情况下,应该是在平年的时候进行while循环,直到遇到下一个闰年的时候跳出循环,进行return,这样是只有当遇到闰年的时候才return
页:
[1]