鱼C论坛

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

[已解决]48讲动动手 1

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

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

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

x
要求计算从现在开始到2000年的闰年年份

我打的这段
class LeapYear:
    def __init__(self):
        self.year=2020
        self.origin=2000

    def __iter__(self):
        return self

    def __next__(self):
        if self.year>=self.origin:
            if (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):
                print(self.year)
                self.year-=1
                
            else:
                self.year-=1
                

        else:
            raise StopIteration
            

通过L=LeapYear()  
        for i in L:
        print(i)

打出来的是
2020
None
None
None
None
2016
None
None
None
None
2012
None
None
None
None
2008
None
None
None
None
2004
None
None
None
None
2000
None

能请教下是哪里出问题了吗?
最佳答案
2020-8-27 21:14:54
那些None是因为你写的__next__没有返回值,那些年份是在__next__中输出的。
正常情况下应该是在__next__中有个循环,当是闰年的时候,进行return
class LeapYear:
    def __init__(self):
        self.year=2020
        self.origin=2000

    def __iter__(self):
        return self

    def __next__(self):
        if self.year>=self.origin:
            while not (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):#这里改为while循环,当不是闰年的时候,就继续循环
                #print(self.year)
                self.year-=1
            temp=self.year#是闰年的时候,保存该年份
            self.year-=1#继续减一
            return temp#然后返回闰年年份

        else:
            raise StopIteration
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-27 21:14:54 | 显示全部楼层    本楼为最佳答案   
那些None是因为你写的__next__没有返回值,那些年份是在__next__中输出的。
正常情况下应该是在__next__中有个循环,当是闰年的时候,进行return
class LeapYear:
    def __init__(self):
        self.year=2020
        self.origin=2000

    def __iter__(self):
        return self

    def __next__(self):
        if self.year>=self.origin:
            while not (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):#这里改为while循环,当不是闰年的时候,就继续循环
                #print(self.year)
                self.year-=1
            temp=self.year#是闰年的时候,保存该年份
            self.year-=1#继续减一
            return temp#然后返回闰年年份

        else:
            raise StopIteration
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 21:15:03 | 显示全部楼层
本帖最后由 昨非 于 2020-8-27 21:19 编辑
 if (self.year%4 == 0 and self.year%100 != 0) or (self.year%400 == 0):
                print(self.year)
                self.year-=1
               
            else:
                self.year-=1

看这段代码,只有判断为真(是闰年)时,才会答应出对应年份,此时,以迭代器访问到的 i 为你想要的闰年年份
否则(判断条件不成立时),迭代器没有任何返回值,所以循环访问i的结果就是none

所以应该:
L=LeapYear()  
for i in L:
    if i>=0:
        print(i)
    else:
        break
将返回为空的i跳过,就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-28 12:44:31 | 显示全部楼层
sunrise085 发表于 2020-8-27 21:14
那些None是因为你写的__next__没有返回值,那些年份是在__next__中输出的。
正常情况下应该是在__next__中 ...

所以说必须用return 是吗??print是不行的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 12:53:35 | 显示全部楼层
只爱整活周淑怡 发表于 2020-8-28 12:44
所以说必须用return 是吗??print是不行的?

当然啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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