鱼C论坛

 找回密码
 立即注册
查看: 1102|回复: 3

[已解决]请问如何写出一个日期生成器

[复制链接]
发表于 2018-2-2 11:10:33 | 显示全部楼层 |阅读模式

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

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

x
要求写一个time_gen(begin,end)
使得:
  1. for i in time_gen(201301,201405):
  2.     print(i)
复制代码

的结果为:
201301
201302
201303
201304
201305
201306
201307
201308
201309
201310
201311
201312
201401
201402
201403
201404
201405


最佳答案
2018-2-2 12:28:44
喔 只是 year + mouth 的话就简单了 都不用做日期验证
  1. def time_gen(start,stop):
  2.     year, month = start // 100, start % 100
  3.     flag = True
  4.     while flag:
  5.         for i in range(month,13):
  6.             if year * 100 + i > stop:
  7.                 flag = False
  8.                 break
  9.             yield '{0}{1:0>2}'.format(year,i)
  10.         month = 1
  11.         year += 1

  12. for x in time_gen(201301,201405):
  13.     print(x)
复制代码

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

使用道具 举报

发表于 2018-2-2 11:24:17 | 显示全部楼层
不明白你想说什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 11:45:10 | 显示全部楼层
  1. def time_gen(begin,end):
  2.     b,e = str(begin),str(end)
  3.     years = int(e[:4]) - int(b[:4])
  4.     if b[-2] == 0:
  5.         start = int(b[-1])
  6.     else:
  7.         start = int(b[-2:])
  8.     if e[-2] == 0:
  9.         stop = int(e[-1])
  10.     else:
  11.         stop = int(e[-2:])  
  12.     if not years:
  13.         for i in range(start,stop+1):
  14.             mons = str(i) if i//10 else '0'+str(i)
  15.             print(int(b[:4]+mons))   
  16.     else:
  17.         for i in range(start,13):
  18.             mons = str(i) if i//10 else '0'+str(i)
  19.             print(int(b[:4]+mons))
  20.         for y in range(years-1):
  21.             year = str(int(b[:4]) + y + 1)
  22.             for k in range(1,13):
  23.                 mons = str(k) if k//10 else '0'+str(k)
  24.                 print(int(year+mons))
  25.         for j in range(1,stop+1):
  26.             mons = str(j) if j//10 else '0'+str(j)
  27.             print(int(e[:4]+mons))

  28. print("首尾同年的情况:")
  29. time_gen(201303,201312)
  30. print("首尾跨一年的情况:")
  31. time_gen(201303,201412)
  32. print("首尾跨很多年的情况:")
  33. time_gen(201103,201512)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 12:28:44 | 显示全部楼层    本楼为最佳答案   
喔 只是 year + mouth 的话就简单了 都不用做日期验证
  1. def time_gen(start,stop):
  2.     year, month = start // 100, start % 100
  3.     flag = True
  4.     while flag:
  5.         for i in range(month,13):
  6.             if year * 100 + i > stop:
  7.                 flag = False
  8.                 break
  9.             yield '{0}{1:0>2}'.format(year,i)
  10.         month = 1
  11.         year += 1

  12. for x in time_gen(201301,201405):
  13.     print(x)
复制代码

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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