鱼C论坛

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

[已解决]迭代写闰年

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

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

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

x
  1. all_year = iter(range(2020))
  2. all_leapyear = []
  3. while True:
  4.     i = next(all_year)
  5.     if i%4==0:
  6.         if i%100!=0:
  7.             all_leapyear.append(i)
  8.     if i == 2020:
  9.         all_leapyear.append(i)
  10.         break
  11. LeapYear = iter(all_leapyear)
  12. leapyear = LeapYear()
  13. for i in leapyear:
  14.     if i == 2020:
  15.         print(i)
  16.         break
  17.     else:
  18.         print(i)
复制代码

报错
  1. Traceback (most recent call last):
  2.   File "C:\Users\chenh\Desktop\实验.py", line 4, in <module>
  3.     i = next(all_year)
  4. StopIteration
复制代码

为什么会报错
最佳答案
2020-8-10 08:00:30
[b]

两个错误:

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

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

参考代码:
  1. all_year = iter(range(2021))
  2. all_leapyear = []
  3. while True:
  4.     i = next(all_year)
  5.     if i%4==0:
  6.         if i%100!=0:
  7.             all_leapyear.append(i)
  8.     if i == 2020:
  9.         all_leapyear.append(i)
  10.         break
  11. LeapYear = iter(all_leapyear)

  12. for i in LeapYear:
  13.     if i == 2020:
  14.         print(i)
  15.         break
  16.     else:
  17.         print(i)
复制代码
[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. all_year = iter(range(2021))
  2. all_leapyear = []
  3. while True:
  4.     i = next(all_year)
  5.     if i%4==0:
  6.         if i%100!=0:
  7.             all_leapyear.append(i)
  8.     if i == 2020:
  9.         all_leapyear.append(i)
  10.         break
  11. LeapYear = iter(all_leapyear)
  12. leapyear = LeapYear()
  13. for i in leapyear:
  14.     if i == 2020:
  15.         print(i)
  16.         break
  17.     else:
  18.         print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

两个错误:

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

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

参考代码:
  1. all_year = iter(range(2021))
  2. all_leapyear = []
  3. while True:
  4.     i = next(all_year)
  5.     if i%4==0:
  6.         if i%100!=0:
  7.             all_leapyear.append(i)
  8.     if i == 2020:
  9.         all_leapyear.append(i)
  10.         break
  11. LeapYear = iter(all_leapyear)

  12. for i in LeapYear:
  13.     if i == 2020:
  14.         print(i)
  15.         break
  16.     else:
  17.         print(i)
复制代码
[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

,代码还有一个错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 04:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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