鱼C论坛

 找回密码
 立即注册
查看: 1241|回复: 20

[已解决]鱼油们好!python 048讲动动手迭代器求闰年

[复制链接]
发表于 2020-6-4 21:03:38 | 显示全部楼层 |阅读模式

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

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

x
这是题目
QQ截图20200604205958.jpg

这是我的代码,我想的是从0开始每次加一,每次加一后判断条件,符合的self.a就返回。但是运行起来既不报错也没有任何反应。。。希望大家指点迷津,谢谢
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        self.a += 1
        if self.a > self.b:
            raise StopIteration
        if (self.a%4) == 0 and (self.a%100 != 0):
            self.a = self.a
        return self.a

最佳答案
2020-6-4 21:31:31
straightup 发表于 2020-6-4 21:29
谢谢你!不过照这个写法,那如果我想要获取2020年前的所有闰年,岂不是要弄好多个print函数,而且要弄多 ...

那直接加个循环就好了~
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        while True:
            self.a += 1
            if self.a > self.b:
                raise StopIteration
            if (self.a%4) == 0 and (self.a%100 != 0):
                self.a = self.a
                return self.a

l = LeapYear()
while True:
    temp = next(l)
    print(temp)
    if temp > 2020:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 21:08:38 | 显示全部楼层
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        self.a += 1
        if self.a > self.b:
            raise StopIteration
        if (self.a%4) == 0 and (self.a%100 != 0):
            self.a = self.a
            return str(self.a)+'是闰年'
        return str(self.a)+'不是闰年'
l = LeapYear()

print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:09:51 | 显示全部楼层
好像是没有输出函数print?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:10:09 | 显示全部楼层
SyntaxError: cannot assign to function call
  你的报错是这样吗   报错发来康康
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:10:51 | 显示全部楼层

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

使用道具 举报

发表于 2020-6-4 21:12:12 | 显示全部楼层

习惯就好 基本操作  坐下 坐下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:13:53 | 显示全部楼层
Twilight6 发表于 2020-6-4 21:12
习惯就好 基本操作  坐下 坐下

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

使用道具 举报

 楼主| 发表于 2020-6-4 21:19:16 | 显示全部楼层

QQ截图20200604211619.jpg
这也不是理想的答案唉,有点不太灵活。还是说我的思路是不对的呢,这已经是能得到最好的改善
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:19:59 | 显示全部楼层
柿子饼同学 发表于 2020-6-4 21:10
你的报错是这样吗   报错发来康康

没有报错,什么东西都没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:21:14 | 显示全部楼层
柿子饼同学 发表于 2020-6-4 21:10
你的报错是这样吗   报错发来康康

这个报错可以认定是你自己的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:22:55 | 显示全部楼层
straightup 发表于 2020-6-4 21:19
这也不是理想的答案唉,有点不太灵活。还是说我的思路是不对的呢,这已经是能得到最好的改善


对啊  这样就是手动打印闰年了,要不改成这种也行 加个循环 只显示闰年
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        while True:
            self.a += 1
            if self.a > self.b:
                raise StopIteration
            if (self.a%4) == 0 and (self.a%100 != 0):
                self.a = self.a
                return '闰年:'+str(self.a)+'年'

l = LeapYear()

print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:25:50 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-6-4 21:57 编辑
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        while self.a<self.b:
            self.a+=1
            if self.a%4==0 and (self.a%100!=0 or self.a%400==0):
                return self.a
        raise StopIteration
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:29:09 | 显示全部楼层
Twilight6 发表于 2020-6-4 21:22
对啊  这样就是手动打印闰年了,要不改成这种也行 加个循环 只显示闰年

谢谢你!不过照这个写法,那如果我想要获取2020年前的所有闰年,岂不是要弄好多个print函数,而且要弄多少个我自己也不知道。。。有没有能得到小甲鱼老师参考答案的那种效果(图在帖子开头)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:31:31 | 显示全部楼层    本楼为最佳答案   
straightup 发表于 2020-6-4 21:29
谢谢你!不过照这个写法,那如果我想要获取2020年前的所有闰年,岂不是要弄好多个print函数,而且要弄多 ...

那直接加个循环就好了~
class LeapYear:
    def __init__(self, b=2020):
        self.a = 0
        self.b = b

    def __iter__(self):
        return self

    def __next__(self):
        while True:
            self.a += 1
            if self.a > self.b:
                raise StopIteration
            if (self.a%4) == 0 and (self.a%100 != 0):
                self.a = self.a
                return self.a

l = LeapYear()
while True:
    temp = next(l)
    print(temp)
    if temp > 2020:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:37:23 | 显示全部楼层

QQ截图20200604213540.jpg

谢谢版主回复!但是我在IDLE里跑的时候,输入了题目的实现要求,还是什么都不显示......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:38:42 | 显示全部楼层
straightup 发表于 2020-6-4 21:37
谢谢版主回复!但是我在IDLE里跑的时候,输入了题目的实现要求,还是什么都不显示......

把 else 块 和 break 去掉,第一次就 break 了能显示什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:45:04 | 显示全部楼层
Twilight6 发表于 2020-6-4 21:31
那直接加个循环就好了~

爱死你了我在循环里加个try-except把StopIteration捕获后break,就能实现答案的效果了。谢谢你!那看来我之前测试没有反应就是因为没有输出内容,学习到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:45:39 | 显示全部楼层
straightup 发表于 2020-6-4 21:45
爱死你了我在循环里加个try-except把StopIteration捕获后break,就能实现答案的效果了。谢谢你 ...

哈哈哈   那就给个最佳吧 宝贝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:53:31 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-4 21:38
把 else 块 和 break 去掉,第一次就 break 了能显示什么?

对哦,谢谢版主提醒!因为我的是从小往上加的,把 else 块 和 break 去掉才能实现。不过我还有个问题,你发给我的代码,def __next__(self): 下面那行self.a+=1应该是要去掉的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:57:46 | 显示全部楼层
straightup 发表于 2020-6-4 21:53
对哦,谢谢版主提醒!因为我的是从小往上加的,把 else 块 和 break 去掉才能实现。不过我还有个问题,你 ...

是的又是一个只在交互式改了的 BUG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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