迭代器求解闰年
各位哥哥姐姐,帮帮忙看看我这段程序哪儿有问题?class LeapYear:
def __init__(self):
self.year=1
def __iter__(self):
return self
def __next__(self):
if self.year<=2020:
if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
return self.year
self.year+=1
else:
raise StopIteration
这样吧:
class LeapYear:
def __init__(self):
self.year=1
def __iter__(self):
return self
def __next__(self):
if self.year<=2020:
while True:
if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
self.year += 1
return self.year-1
self.year+=1
else:
raise StopIteration
a = LeapYear()
print(next(a))
print(next(a))
print(next(a))
print(next(a)) 需要在return之前加上self.year+=1,然后return self.year-=1
代码:
class LeapYear:
def __init__(self):
self.year=1
def __iter__(self):
return self
def __next__(self):
if self.year<=2020:
if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
self.year+=1
return self.year-1
self.year+=1
else:
raise StopIteration
for i in LeapYear():
if i!=None:
print(i) xiaofeiyu 发表于 2020-6-18 21:21
需要在return之前加上self.year+=1,然后return self.year-=1
代码:
这个是输出所有闰年
两个self.year+=1是因为不管是平年还是闰年都要把年份加“1”,所以if里外都加了 Twilight6 发表于 2020-6-18 21:14
这样吧:
大佬,可不可以解释一下,我代码这样写会出现什么问题?我实在想不明白,可能是没理解__next__. xiaofeiyu 发表于 2020-6-18 21:24
这个是输出所有闰年
两个self.year+=1是因为不管是平年还是闰年都要把年份加“1”,所以if里外都加了
您好,程序会输出None的原因是什么呀? 慕容逍客 发表于 2020-6-18 21:26
大佬,可不可以解释一下,我代码这样写会出现什么问题?我实在想不明白,可能是没理解__next__.
你的代码没有循环 所以不会进入 if 代码块 而且你 if 代码块之外没有设置 __next__ 魔法方法的返回值,所以当不满足 if 条件时候 返回的都是 None
你的代码只有打印到闰年才会返回也就是print(next(a)) 四次才会返回第一个闰年 4 ,而且要在 if 满足后 +1否则下次调用会一直在 4 那
慕容逍客 发表于 2020-6-18 21:29
您好,程序会输出None的原因是什么呀?
不对呀,我已经判断了:if i!=None:
print(i),只有i不是None的时候才输出i呀,而且我测试也没有问题。。。
您再看看代码吧 xiaofeiyu 发表于 2020-6-18 21:24
这个是输出所有闰年
两个self.year+=1是因为不管是平年还是闰年都要把年份加“1”,所以if里外都加了
平年加1不应该放到else里面吗?如果您这样写,不管平年闰年都要加1,而且闰年重复加了一次。 慕容逍客 发表于 2020-6-18 21:32
平年加1不应该放到else里面吗?如果您这样写,不管平年闰年都要加1,而且闰年重复加了一次。
你的代码可以这样改,如果不想用循环,而且不想打印 None 的话 就在 if 外也设置个 return 即可
class LeapYear:
def __init__(self):
self.year=1
def __iter__(self):
return self
def __next__(self):
if self.year<=2020:
if ((self.year%4==0 and self.year%100!=0) or (self.year%400==0)):
self.year += 1
return '%d'%(self.year-1)+'是闰年'
self.year+=1
return '%d'%(self.year-1)+'不是闰年'
else:
raise StopIteration
a = LeapYear()
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a)) 慕容逍客 发表于 2020-6-18 21:32
平年加1不应该放到else里面吗?如果您这样写,不管平年闰年都要加1,而且闰年重复加了一次。
else是当year大于2020的时候。。。
闰年没有重复加1,return是退出函数,到了这里程序就不会再执行下面的内容了 慕容逍客 发表于 2020-6-18 21:26
大佬,可不可以解释一下,我代码这样写会出现什么问题?我实在想不明白,可能是没理解__next__.
并不是因为你没有理解__next__ 所有函数都是这样的 ,如果函数没有执行到 return 的值 那么 Python 默认返回的就是 None滴~~
比如:
def func():
pass
print(func())
这样也是打印了 None就是因为没有设置 return~~~
xiaofeiyu 发表于 2020-6-18 21:34
else是当year大于2020的时候。。。
闰年没有重复加1,return是退出函数,到了这里程序就不会再执行下面 ...
emmmmmmmmm,我忘了return之后就会退出函数了,谢谢<抱拳> 慕容逍客 发表于 2020-6-18 21:41
emmmmmmmmm,我忘了return之后就会退出函数了,谢谢
不客气~ 慕容逍客 发表于 2020-6-18 21:41
emmmmmmmmm,我忘了return之后就会退出函数了,谢谢
两个都想设最佳怎么办{:10_297:},谢谢两位大佬<抱拳> 慕容逍客 发表于 2020-6-18 21:42
两个都想设最佳怎么办,谢谢两位大佬
哈哈没事 随意就好~ Twilight6 发表于 2020-6-18 21:35
并不是因为你没有理解__next__ 所有函数都是这样的 ,如果函数没有执行到 return 的值 那么 Python 默 ...
唉,搞了半天是我没有真正理解函数中的return{:10_243:} 慕容逍客 发表于 2020-6-18 21:45
唉,搞了半天是我没有真正理解函数中的return
多用就会娴熟起来了~开始的阶段都会的~加油吧!
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif 慕容逍客 发表于 2020-6-18 21:42
两个都想设最佳怎么办,谢谢两位大佬
哈哈没关系的
页:
[1]