鱼C论坛

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

[已解决]迭代写闰年

[复制链接]
发表于 2020-8-10 07:49:37 | 显示全部楼层 |阅读模式

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

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

x
all_year = iter(range(2020))
all_leapyear = []
while True:
    i = next(all_year)
    if i%4==0:
        if i%100!=0:
            all_leapyear.append(i)
    if i == 2020:
        all_leapyear.append(i)
        break
LeapYear = iter(all_leapyear)
leapyear = LeapYear()
for i in leapyear:
    if i == 2020:
        print(i)
        break
    else:
        print(i)
报错
Traceback (most recent call last):
  File "C:\Users\chenh\Desktop\实验.py", line 4, in <module>
    i = next(all_year)
StopIteration
为什么会报错
最佳答案
2020-8-10 08:00:30
[b]

两个错误:

第一个 range(2020) 不包含 2020 使得 i 不可能等于 2020 导致 next() 最后一次时候迭代器已经为空,抛出错误

第二个错误就是 leapyear = LeapYear() ,这段代码去掉,因为 LeapYear = iter(all_leapyear) 已经是一个迭代器了,你将 LeapYear() 进行调用会导致报错的

参考代码:
all_year = iter(range(2021))
all_leapyear = []
while True:
    i = next(all_year)
    if i%4==0:
        if i%100!=0:
            all_leapyear.append(i)
    if i == 2020:
        all_leapyear.append(i)
        break
LeapYear = iter(all_leapyear)

for i in LeapYear:
    if i == 2020:
        print(i)
        break
    else:
        print(i)
[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 07:57:49 | 显示全部楼层
range(2020) 不包括 2020,所以应该 range(2021):
all_year = iter(range(2021))
all_leapyear = []
while True:
    i = next(all_year)
    if i%4==0:
        if i%100!=0:
            all_leapyear.append(i)
    if i == 2020:
        all_leapyear.append(i)
        break
LeapYear = iter(all_leapyear)
leapyear = LeapYear()
for i in leapyear:
    if i == 2020:
        print(i)
        break
    else:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-10 08:00:30 | 显示全部楼层    本楼为最佳答案   
[b]

两个错误:

第一个 range(2020) 不包含 2020 使得 i 不可能等于 2020 导致 next() 最后一次时候迭代器已经为空,抛出错误

第二个错误就是 leapyear = LeapYear() ,这段代码去掉,因为 LeapYear = iter(all_leapyear) 已经是一个迭代器了,你将 LeapYear() 进行调用会导致报错的

参考代码:
all_year = iter(range(2021))
all_leapyear = []
while True:
    i = next(all_year)
    if i%4==0:
        if i%100!=0:
            all_leapyear.append(i)
    if i == 2020:
        all_leapyear.append(i)
        break
LeapYear = iter(all_leapyear)

for i in LeapYear:
    if i == 2020:
        print(i)
        break
    else:
        print(i)
[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 08:01:51 | 显示全部楼层
zltzlt 发表于 2020-8-10 07:57
range(2020) 不包括 2020,所以应该 range(2021):

,代码还有一个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 08:03:12 | 显示全部楼层
Twilight6 发表于 2020-8-10 08:01
,代码还有一个错误

评分

参与人数 1荣誉 +3 鱼币 +2 贡献 +5 收起 理由
Twilight6 + 3 + 2 + 5 0_0,还能这样,谢谢了~

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 11:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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