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

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

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)

是要动态计算每一年的二十四个节气的日期?输入是什么?

参考一下


二十四节气查询 Python调用示例代码_weixin_34393428的博客-CSDN博客 二十四节气的时间、由来、习俗以及养生二十四节气查询 查询二十四节气复制代码 查询节气详情复制代码注意,该示例代码仅适用于 www.apishop.net网站下API 使用该产品前,您需要通过 https://www.apishop.net/#/api/detail/?productID=88申请API服务1、查询二十四节气#!/usr/bin/env pyt... https://blog.csdn.net/weixin_34393428/article/details/91474256?ops_request_misc=&request_id=&biz_id=102&utm_term=Python%E7%BC%96%E5%86%99%E4%BA%8C%E5%8D%81%E5%9B%9B%E4%B8%AA%E8%8A%82%E6%B0%94%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-91474256.nonecase&spm=1018.2226.3001.4450


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
def jq(num):#从当前时间开始连续输出未来n个节气的时间
    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
jq(36)

参考一下呢


python 节气_二十四节气_weixin_39943370的博客-CSDN博客 package api.jisuapi.jieqi;import api.util.HttpUtil;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Query {public static final String APPKEY = "your_appkey_here";// 你的appkeypubl... https://blog.csdn.net/weixin_39943370/article/details/111451662

请看:https://zhuanlan.zhihu.com/p/101273758?utm_id=0

# ephem库计算,使用二分法迭代函数
from ephem import *
import math
import datetime
from skyfield.api import load
planets = load('de422.bsp')
tropicl_year=365.24219647#回归年长度
ts = load.timescale()
earth = planets[399]
#24节气
jieqi=["春分","清明","谷雨","立夏","小满","芒种",\
       "夏至","小暑","大暑","立秋","处暑","白露",\
       "秋分","寒露","霜降","立冬","小雪","大雪",\
       "冬至","小寒","大寒","立春","雨水","惊蛰"]
#计算黄经
def ecliptic_lon(jd):
    #sun = planets['SUN']
    #astrometric = earth.at(jd).observe(sun)
    #apparent = astrometric.apparent()
    lat, lon, distance = earth.at(jd).observe(planets['SUN']).apparent().ecliptic_latlon(epoch='date')
    #lat, lon, distance = apparent.ecliptic_latlon(epoch='date')#求太阳的视黄经经视黄纬和距离(epoch设为所求时间就是视赤经视赤纬)
    #p=earth.at(jd).observe(planets['SUN']).astrometric.apparent().ecliptic_latlon(epoch='date')
    #lon=p[0]
    return lon._degrees*math.pi/180.0#返回黄纬
#根据时间求太阳黄经,计算到了第几个节气,春分序号为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
    e=ecliptic_lon(jd)
    #dt=((s1+1)*15.0-e*180.0/math.pi)/360.0*tropicl_year#初始时间改变量设为当前太阳黄经和下个节气点黄经相差度数换算为的天数
    dt=14#如果不是14天,下面有可能出现连续加两个14天,导致跳过了一个节气
    #print(s1," ",dt," ",e*180.0/math.pi)
    while True:
        jd=ts.tai_jd(jd.tai+dt)
        #jd+=dt
        s=sta(jd)
        if s0!=s:
            s0=s
            dt=-dt/2#使时间改变量折半减小
        if abs(dt)<0.000001 and s!=s1:#s!=s1是为了使时间跨到下个节气时间之后,方便接下来节气的计算,skyfield时间精度是微秒
            break
    return jd
def jq(num):#从当前时间开始连续输出未来n个节气的时间
    #jd=now()#获取当前时间的一个儒略日和1899/12/31 12:00:00儒略日的差值
    t = ts.now()
    #t= ts.tt(1501, 1, 1, 12, 0,0)
    e=ecliptic_lon(t)
    n=int(e*180.0/math.pi/15)+1
    print(' 年 -月-日 节气:时:分:秒')
    for i in range(num):
        if n>=24:
            n-=24
        t=iteration(t,sta)
        e=ecliptic_lon(t)
        #e=ecliptic_lon(t)
        #d=Date(jd+1/3).tuple()
        t1=ts.tai_jd(t.tai+1/3)
        #print("{0}-{1:02d}-{2:02d} {3}:{4:02d}:{5:02d}:{6:02d}.{7:02d}".format(t1.utc.year, t1.utc.month, t1.utc.day,jieqi[n],#存在截断误差
        #                                                                  t1.utc.hour,t1.utc.minute, int(t1.utc.second),int(100*(t1.utc.second-int(t1.utc.second)))))
        print("{0}-{1:02d}-{2:02d} {3}:{4:02d}:{5:02d}:{6:03.1f}".format(t1.utc.year, t1.utc.month, t1.utc.day,jieqi[n],t1.utc.hour,t1.utc.minute, t1.utc.second))#秒数可能会出现60
        n+=1
jq(24)

计算节气和计算春节等动态日期是一样的,以某一个固定时间点开始,处理好瑞年、瑞月,方法都差不多,参考:https://zhuanlan.zhihu.com/p/101273758?utm_id=0

直接爬气象的信息就可以,这个实际的应用目的是什么呢?按照题目的连接https://article.itxueyuan.com/LgAjj3


import turtle                # 导入turtle库(模块)
turtle.bgcolor("#ffff55")    # 设置背景颜色为#ffff55,一种浅黄色
turtle.speed(0)              # 设置海龟的绘图速度,参数为0时最快
turtle.delay(0)              # 设置海龟绘图的延迟时间,参数为0时,表示绘图没有延迟
 
### ② 变量初始化设置
# 创建列表name,存放24节气中文名称
name=["雨水","惊蛰","春风",
      "清明","谷雨","立夏",
      "小满","芒种","夏至",
      "小暑","大暑","立秋",
      "处暑","白露","秋风",
      "寒露","霜降","立冬",
      "小雪","大雪","冬至",
      "小寒","大寒","立春"]
 
# 创建列表en_name,存放24节气英文名称
en_name=["Rain Water","Awakening of Insects","Spring Equinox",
         "Pure Brightness","Grain Rain","Beginning of Summer",
         "Grain Buds","Grain in Ear","Summer Solstice",
         "Minor Heat","Major Heat","Beginning of Autumn",
         "End of Heat","White Dew","Autumn Equinox",
         "Cold Dew","Frost's Descent","Beginning of Winter",
         "Minor Snow","Major Snow","Winter Solstice",
         "Minor Cold","Major Cold","Beginning of Spring"]
 
# 创建列表poem,存放诗词
# 没有对应的诗词,就定义为空字符串。如果不定义,调用时会报错
poem=["随风潜入夜 润物细无声","春雷响 万物长","春风如贵客 一到便繁华",
      "清明时节雨纷纷","风吹雨洗一城花","天地始交 万物并秀",
      "物至于此 小得盈满","家家麦饭美 处处菱歌长","绿筠尚含粉 圆荷始散芳",
      "荷风送香气 竹露滴清响","桂轮开子夜 萤火照空时","天阶夜色凉如水 坐看牵牛织女星",
      "春种一粒粟 秋收万颗子","露从今夜白 月是故乡明","",
      "","","",
      "","","",
      "","",""]
 
# 定义变量n,作为累加器
n=0
 
### ③ 自定义函数fun()
# fun()的功能是,写一个倒计时数字,以及一个节气的名称、英文名称和对应的诗词
def fun():
    global n                      # 强制n是全局变量的n(即声明本函数体内的变量n为主函数中的那个全局变量n)
    turtle.clear()                # 清除屏幕中的已有绘图。(如果不用clear(),5个数字会重叠在一起)
    turtle.dot(500,"#b1352b")     # 画一个直径为500,颜色为#b1352b(一种红色)的圆点,作为背景装饰
    turtle.penup()                # 海龟抬脚,移动时不会留下痕迹,但是仍然可以写字,所以后面无需再写pendown()
    turtle.setheading(-90)        # 让海龟头部向下
 
    turtle.backward(10)           # 海龟向上移动10像素,准备写字.(如果不向上移动10像素,海龟写出的几行字会偏下)
    turtle.write(24-n,align="center",font=("黑体",120))       # 写倒计时数字(第1行)
    turtle.forward(50)            # 海龟向下移动50像素,准备写字
    turtle.write(name[n],align="center",font=("黑体",30))     # 写节气中文名称(第2行)
    turtle.forward(50)            # 海龟再向下移动50像素,准备写字
    turtle.write(en_name[n],align="center",font=("Arial",25)) # 写节气英文名称(第3行)
    turtle.forward(50)            # 海龟再向下移动50像素,准备写字
    turtle.write(poem[n],align="center",font=("隶书",20))     # 写节气对于诗词(第4行)
 
    turtle.home()                 # 海龟返回原点,回到初始位置
    n=n+1                         # 累加器n加1
 
 
### ④ 主程序
# 显示两行引导文字
turtle.pencolor("black")         # 设置画笔颜色为黑色black
turtle.penup()                   # 海龟抬脚,移动时不会留下痕迹,但是仍然可以写字,所以后面无需再写pendown()
turtle.setheading(-90)           # 让海龟头部向下
turtle.backward(30)              # 海龟向上移动30像素(步),准备写字.(如果不向上移动30像素,海龟写出的两行字会偏下)
turtle.write("让我们一起倒计时,迎接春的到来",align="center",font=("黑体",20))  # 写中文引导语
turtle.forward(60)               # 海龟再向下移动60像素(步),准备写字
turtle.write("Let's greet the arrival of spring with a countdown",align="center",font=("Arial",20))  # 写英文引导语
turtle.home()                    # 海龟返回原点,回到初始位置
 
# 24秒倒计时开始
turtle.pencolor("white")         # 设置画笔颜色为白色white
for i in range(24):              # 每次调用fun()写4行文字,要循环24次
    # 调用自定义函数fun()
    turtle.ontimer(fun, t=1000*(i+1))  # 安装一个计时器,t毫秒后调用fun()函数
 
### ⑤ 海龟绘图结束,隐藏海龟
turtle.hideturtle()


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
def jq(num):#从当前时间开始连续输出未来n个节气的时间
    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
jq(36)



```python
#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# 测试环境: python2.7  
# 安装requests依赖 => pip install requests/ easy_install requests  
  
# 导入requests依赖  
import requests  
import json  
import sys  
  
reload(sys)  
sys.setdefaultencoding('utf-8')  
  
  
def apishop_send_request(method, url, params=None, headers=None):  
    ''''' 
    转发请求到目的主机 
    @param method str 请求方法 
    @param url str 请求地址 
    @param params dict 请求参数 
    @param headers dict 请求头 
    '''  
    method = str.upper(method)  
    if method == 'POST':  
        return requests.post(url=url, data=params, headers=headers)  
    elif method == 'GET':  
        return requests.get(url=url, params=params, headers=headers)  
    else:  
        return None  
  
  
method = "POST"  
url = "https://api.apishop.net/common/jieqi/Get24Jieqi"  
headers = None  
params = {  
}  
result = apishop_send_request(method=method, url=url, params=params, headers=headers)  
if result:  
    body = result.text  
    response = json.loads(body)  
    status_code = response["statusCode"]  
    if (status_code == '000000'):  
        # 状态码为000000, 说明请求成功  
        print('请求成功:%s' % (body,))  
    else:  
        # 状态码非000000, 说明请求失败  
        print('请求失败: %s' % (body,))  
else:  
    # 返回内容异常,发送请求失败  
    print('发送请求失败')  
[python] view plain copy
#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# 测试环境: python2.7  
# 安装requests依赖 => pip install requests/ easy_install requests  
  
# 导入requests依赖  
import requests  
import json  
import sys  
  
reload(sys)  
sys.setdefaultencoding('utf-8')  
  
  
def apishop_send_request(method, url, params=None, headers=None):  
    ''''' 
    转发请求到目的主机 
    @param method str 请求方法 
    @param url str 请求地址 
    @param params dict 请求参数 
    @param headers dict 请求头 
    '''  
    method = str.upper(method)  
    if method == 'POST':  
        return requests.post(url=url, data=params, headers=headers)  
    elif method == 'GET':  
        return requests.get(url=url, params=params, headers=headers)  
    else:  
        return None  
  
  
method = "POST"  
url = "https://api.apishop.net/common/jieqi/Get24Jieqi"  
headers = None  
params = {  
}  
result = apishop_send_request(method=method, url=url, params=params, headers=headers)  
if result:  
    body = result.text  
    response = json.loads(body)  
    status_code = response["statusCode"]  
    if (status_code == '000000'):  
        # 状态码为000000, 说明请求成功  
        print('请求成功:%s' % (body,))  
    else:  
        # 状态码非000000, 说明请求失败  
        print('请求失败: %s' % (body,))  
else:  
    # 返回内容异常,发送请求失败  
    print('发送请求失败')  

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# 测试环境: python2.7  
# 安装requests依赖 => pip install requests/ easy_install requests  
  
# 导入requests依赖  
import requests  
import json  
import sys  
  
reload(sys)  
sys.setdefaultencoding('utf-8')  
  
  
def apishop_send_request(method, url, params=None, headers=None):  
    ''''' 
    转发请求到目的主机 
    @param method str 请求方法 
    @param url str 请求地址 
    @param params dict 请求参数 
    @param headers dict 请求头 
    '''  
    method = str.upper(method)  
    if method == 'POST':  
        return requests.post(url=url, data=params, headers=headers)  
    elif method == 'GET':  
        return requests.get(url=url, params=params, headers=headers)  
    else:  
        return None  
  
  
method = "POST"  
url = "https://api.apishop.net/common/jieqi/GetJieqiDetail"  
headers = None  
params = {            
        "jieqiID":"" #节气ID:从查询二十四节气接口获得,如“1”  
}  
result = apishop_send_request(method=method, url=url, params=params, headers=headers)  
if result:  
    body = result.text  
    response = json.loads(body)  
    status_code = response["statusCode"]  
    if (status_code == '000000'):  
        # 状态码为000000, 说明请求成功  
        print('请求成功:%s' % (body,))  
    else:  
        # 状态码非000000, 说明请求失败  
        print('请求失败: %s' % (body,))  
else:  
    # 返回内容异常,发送请求失败  
    print('发送请求失败')  
[python] view plain copy
#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# 测试环境: python2.7  
# 安装requests依赖 => pip install requests/ easy_install requests  
  
# 导入requests依赖  
import requests  
import json  
import sys  
  
reload(sys)  
sys.setdefaultencoding('utf-8')  
  
  
def apishop_send_request(method, url, params=None, headers=None):  
    ''''' 
    转发请求到目的主机 
    @param method str 请求方法 
    @param url str 请求地址 
    @param params dict 请求参数 
    @param headers dict 请求头 
    '''  
    method = str.upper(method)  
    if method == 'POST':  
        return requests.post(url=url, data=params, headers=headers)  
    elif method == 'GET':  
        return requests.get(url=url, params=params, headers=headers)  
    else:  
        return None  
  
  
method = "POST"  
url = "https://api.apishop.net/common/jieqi/GetJieqiDetail"  
headers = None  
params = {            
        "jieqiID":"" #节气ID:从查询二十四节气接口获得,如“1”  
}  
result = apishop_send_request(method=method, url=url, params=params, headers=headers)  
if result:  
    body = result.text  
    response = json.loads(body)  
    status_code = response["statusCode"]  
    if (status_code == '000000'):  
        # 状态码为000000, 说明请求成功  
        print('请求成功:%s' % (body,))  
    else:  
        # 状态码非000000, 说明请求失败  
        print('请求失败: %s' % (body,))  
else:  
    # 返回内容异常,发送请求失败  
    print('发送请求失败')  


```

调用日历,哈哈哈哈哈