求智若渴 2022-11-24 12:12 采纳率: 0%
浏览 351
已结题

Python编写二十四个节气完整代码

Python编写完整动态二十四个节气的代码和注释
一段代码,输出的结果为一个节气

  • 写回答

12条回答 默认 最新

  • BsonJ 2022-11-24 13:14
    关注
    from ephem import *
    import math
    import datetime
    
    #24节气
    jieqi=["春分","清明","谷雨","立夏","小满","芒种",\
           "夏至","小暑","大暑","立秋","处暑","白露",\
           "秋分","寒露","霜降","立冬","小雪","大雪",\
           "冬至","小寒","大寒","立春","雨水","惊蛰"]
    
    #计算黄经
    def ecliptic_lon(jd_utc):
        s=Sun(jd_utc)#构造太阳
        equ=Equatorial(s.ra,s.dec,epoch=jd_utc)#求太阳的视赤经视赤纬(epoch设为所求时间就是视赤经视赤纬)
        e=Ecliptic(equ)#赤经赤纬转到黄经黄纬
        return e.lon#返回黄纬
    
    #根据时间求太阳黄经,计算到了第几个节气,春分序号为0
    def sta(jd):
        e=ecliptic_lon(jd)
        n=int(e*180.0/math.pi/15)
        return n
    
    #根据当前时间,求下个节气的发生时间
    def iteration(jd,sta):#jd:要求的开始时间,sta:不同的状态函数
        s1=sta(jd)#初始状态(太阳处于什么位置)
        s0=s1
        dt=1.0#初始时间改变量设为1天
        while True:
            jd+=dt
            s=sta(jd)
            if s0!=s:
                s0=s
                dt=-dt/2#使时间改变量折半减小
            if abs(dt)<0.0000001 and s!=s1:
                break
        return jd
    
    #从当前时间开始连续输出未来n个节气的时间
    def jq(num):
        jd=now()#获取当前时间的一个儒略日和1899/12/31 12:00:00儒略日的差值
        e=ecliptic_lon(jd)
        n=int(e*180.0/math.pi/15)+1
        for i in range(num):
            if n>=24:
                n-=24
            jd=iteration(jd,sta)
            d=Date(jd+1/3).tuple()
            print("{0}-{1:02d}-{2:02d} {3}:{4:02d}:{5:02d}:{6:03.1f}".format(d[0], d[1], d[2],jieqi[n],d[3], d[4], d[5]))
            n+=1
    
    if __name__=="__main__”:
       jq(24)
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 请详细说明问题背景 11月24日
  • 创建了问题 11月24日