鱼C论坛

 找回密码
 立即注册
查看: 864|回复: 10

[已解决]迭代器

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

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

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

x
class Run():
    def __init__(self):
        self.a=2020
    def __iter__(self):
        return self
    def __next__(self):
        if 0<=self.a:
            if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
                return self.a
            self.a-=1
        else:
            raise StopIteration('太小了!')
r=Run()
for i in r:
    if i>=2000:
        print(i)
    else:
        break
  求指教这段代码的错误在哪 为什么一直输出2020不停?
最佳答案
2020-6-19 12:10:22
今天的我更强了 发表于 2020-6-19 12:09
最后一个问题.....我的也设置成你那样之后
class Run():
    def __init__(self):

因为第二次for 循环不满足条件 就执行 else 了  然后就 break 退出循环了~

去掉 else 和 break 即可
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-19 11:37:37 | 显示全部楼层
Twilight6 发表于 2020-6-19 11:36
因为你这的代码:

迭代器条件成立后 return 执行就不会执行下面的代码,也就是红色代码不会运行了,导 ...

懂了懂了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 11:44:47 | 显示全部楼层

class Run():
    def __init__(self):
        self.a=2021
    def __iter__(self):
        return self
    def __next__(self):
        if 0<=self.a:
            self.a-=1
            if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
                return self.a
        else:
            raise StopIteration('太小了!')
r=Run()
for i in r:
    if i>=2000:
        print(i)
    else:
        break
修改了之后还是报错  TypeError: '>=' not supported between instances of 'NoneType' and 'int'
感觉逻辑上没问题啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 11:57:46 | 显示全部楼层

你的代码我看懂了 也理解了,可是这一段代码的问题在哪?能再帮忙点一下吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 12:09:33 | 显示全部楼层

最后一个问题.....我的也设置成你那样之后
class Run():
    def __init__(self):
        self.a=2021
    def __iter__(self):
        return self
    def __next__(self):
        if 0<=self.a:
            self.a-=1
            if (self.a%4==0 and self.a%100!=0) or (self.a%400==0):
                return self.a
        else:
            raise StopIteration('太小了!')
r=Run()
for i in r:
    if i!=None and i>=2000:
        print(i)
    else:
        break
为什么只返回来一个2020..
拜托了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 12:12:00 | 显示全部楼层
Twilight6 发表于 2020-6-19 12:10
因为第二次for 循环不满足条件 就执行 else 了  然后就 break 退出循环了~

去掉 else 和 break 即可

卧槽. 牛 谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-11 03:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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