一个交互式的图形资源——以及对易经的解读——在其中你能够解码占卜的二进制,并仔细阅读学术解释。
  
  源码及演示:m.appwin.top

  

  安裝套件
  

    pip install kintaiyi    pip install --upgrade sxtwl, numpy, ephem, cn2an 

 
  起课形式

from kintaiyi import kintaiyi    # 0 為年計;1 為月計;2 為日計:3 為時計    #公元前    Taiyi(-202,9,16,23,14).pan(1)    {'太乙計': '月計', '公元日期': '-202年9月16日23時', '干支': ['戊戌', '辛酉', '庚戌', '丙子'], '農曆': {'年': -202, '月': 8, '日': 15}, '年號': '西漢高帝劉邦 高帝四年', '紀元': '第三紀第一甲子元', '時局': {'文': '陽遁十局', '數': 10}, '太乙': 4, '文昌': '丑', '太歲': '子', '合神': '丑', '計神': '寅', '始擊': '子', '定目': '子', '主算': [4, ['無天', '無地', '雜陽']], '客算': [11, ['無地', '陰中重陽']], '定算': [11, ['無地', '陰中重陽']], '九宮': {8: '大游', 3: '客參定參', 4: '主將太乙', 9: '', 5: '五風', 2: '主參八風', 7: '三風', 6: '', 1: '客將定將飛鳥小游'}, '十六宮': {'子': ['太歲', '始擊', '定目'], '丑': ['文昌', '合神', '四神'], '艮': [], '寅': [], '卯': [], '辰': ['君基'], '巽': ['五福'], '巳': ['民基'], '午': ['飛符', '太尊'], '未': ['臣基', '地乙'], '申': [], '坤': [], '酉': [], '戌': ['直符'], '乾': ['帝符'], '亥': ['天乙']}}    #公元    Taiyi(658,5,31,0,14).pan(0)     {'太乙計': '時計', '公元日期': '658年5月31日0時', '干支': ['戊午', '丁巳', '丙子', '戊子'], '農曆': {'年': 658, '月': 4, '日': 24}, '年號': '唐高宗李治 永徽九年', '紀元': '丙子元第二紀', '時局': '陽遁37局', '太乙': 6, '文昌': '坤', '太歲': '子', '合神': '丑', '計神': '寅', '始擊': '未', '定目': '未', '主算': [7, ['無天', '雜陰']], '客算': [8, ['無天', '雜陽']], '定算': [8, ['無天', '雜陽']], '九宮': {8: '客將定將大游', 3: '五風', 4: '客參定參', 9: '', 5: '', 2: '八風', 7: '主將三風', 6: '太乙', 1: '主參飛鳥小游'}, '十六宮': {'子': ['太歲', '太尊'], '丑': ['合神'], '艮': [], '寅': [], '卯': [], '辰': ['君基', '臣基', '帝符'], '巽': [], '巳': [], '午': [], '未': ['始擊', '定目'], '申': ['民基'], '坤': ['文昌'], '酉': [], '戌': [], '乾': ['五福'], '亥': []}}    

  kintaiyi.py

# -*- coding: utf-8 -*-"""Created on Sat Aug 27 18:11:44 2022@author: kentang"""import re, itertools, time, pickle, osimport numpy as npfrom math import pifrom sxtwl import fromSolarfrom ephem import Sun, Date, Ecliptic, Equatorial, hourfrom cn2an import an2cndef jiazi():    Gan, Zhi = '甲乙丙丁戊己庚辛壬癸','子丑寅卯辰巳午未申酉戌亥'    return list(map(lambda x: "{}{}".format(Gan[x % len(Gan)],Zhi[x % len(Zhi)]), list(range(60))))class Taiyi():    def __init__(self, year, month, day, hour, minute):        self.year, self.month, self.day, self.hour, self.minute = year, month, day, hour, minute        self.taiyiyear  = 10153917        self.jieqi = re.findall('..', '春分清明穀雨立夏小滿芒種夏至小暑大暑立秋處暑白露秋分寒露霜降立冬小雪大雪冬至小寒大寒立春雨水驚蟄')        self.num =  [8,3,4,9,2,7,6,1]        #干支        self.Gan,self.Zhi = '甲乙丙丁戊己庚辛壬癸', '子丑寅卯辰巳午未申酉戌亥'        #間辰        self.jc = list("丑寅辰巳未申戌亥")        self.jc1 = list("巽艮坤乾")        self.tyjc = [1,3,7,9]        #十六神        self.sixteengod = dict(zip(re.findall("..", "地主陽德和德呂申高叢太陽大炅大神大威天道大武武德太簇陰主陰德大義"), "子丑艮寅卯辰巽巳午未坤申酉戌乾亥"))        #陰陽遁定制        self.gong = dict(zip(list("子丑艮寅卯辰巽巳午未坤申酉戌乾亥"), range(1,17)))        self.gong1 = list("子丑艮寅卯辰巽巳午未坤申酉戌乾亥")        #self.gong2 = dict(zip(list("亥子丑艮寅卯辰巽巳午未坤申酉戌乾"), [8,8,3,3,4,4,9,9,2,2,7,7,6,6,1,1]))    #合神    def jigod(self, ji):        return dict(zip(list("子寅卯辰巳午丑亥戌酉申未"),list("丑亥戌酉申未子寅卯辰巳午"))).get(self.taishui(ji))    #太歲    def taishui(self, ji):        gz =  self.gangzhi()        return {0: gz[0][1], 1:gz[1][1], 2:gz[2][1], 3:gz[3][1]}.get(ji)    def kingyear(self):        def closest(lst, K):             return lst[min(range(len(lst)), key = lambda i: abs(lst[i]-K))]         data = pickle.load(open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'history.pkl'), "rb")).split(",")        y =  list(map(lambda x: int(x), data[0::7]))        period = data[3::7]        king = data[4::7]        king_realname = data[5::7]        preiodname = data[6::7]        idx = y.index(closest(y, self.lunar_date_d().get("年")))        year = year = self.lunar_date_d().get("年")        if year < 1900:            year = year - y[idx] +1            pn = "{}{}年".format(preiodname[idx], an2cn(year))            kn = "{}{}{}".format(period[idx], king[idx], king_realname[idx])        if year > 1900 and year <1949:            year = year - y[idx-1] +1            pn = "{}{}年".format(preiodname[idx-1], an2cn(year))            kn = "{}{}{}".format(period[idx-1], king[idx-1], king_realname[idx-1])        if year > 1949:            year = year - y[idx]            pn = "{}{}年".format(preiodname[idx], an2cn(year))            kn = "{}{}{}".format(period[idx], king[idx], king_realname[idx])        return  "{} {}".format(kn, pn)     def skyeyes_des(self, ji):        yy = self.kook(ji).get("文")[0]        k = self.kook(ji).get("數")        dd = {"陽":",,辰迫,,,,,辰迫,囚,辰迫,囚,辰迫,,,勝,辰迫,囚,囚,客挾,,,,,,,,,,,,,,,,,,,客挾,囚,辰迫,客挾,客挾,囚,,宮迫,,主挾,宮迫,辰迫,,,,主挾,辰迫,宮迫,宮迫,,,,,客挾,,,,,,主挾,,,,,,,".split(","),              "陰":",辰迫,,,,,,辰迫,囚,辰迫,囚,辰迫,,,,辰迫,囚,囚,,關客,,關客,,,宮迫,,,,,,,,,,,,辰迫,囚,,,,,囚,辰迫,宮迫,,宮迫,辰迫,,,,辰擊,宮迫,辰迫,,,,,,,,,,,,,客目掩,,,,,".split(",")}        return dict(zip(range(1,73), dd.get(yy))).get(k)        def skyeyes(self, ji):           skyeyes_dict = {            "陽" : list("申酉戌乾乾亥子丑艮寅卯辰巽巳午未坤坤申酉戌乾乾亥子丑艮寅卯辰巽巳午未坤坤申酉戌乾乾亥子丑艮寅卯辰巽巳午未坤坤申酉戌乾乾亥子丑艮寅卯辰巽巳午未坤坤"),            "陰" : list("寅卯辰巽巽巳午未坤申酉戌乾亥子丑艮艮寅卯辰巽巽巳午未坤申酉戌乾亥子丑艮艮寅卯辰巽巽巳午未坤申酉戌乾亥子丑艮艮寅卯辰巽巽巳午未坤申酉戌乾亥子丑艮艮")}        return dict(zip(range(1,73),skyeyes_dict.get(self.kook(ji).get("文")[0]))).get(int(self.kook(ji).get("數")))                #合神    def hegod(self, ji):        findji = {"陽":list("寅丑子亥戌酉申未午巳辰卯"), "陰":list("申未午巳辰卯寅丑子亥戌酉")}.get(self.kook(ji).get("文")[0])        return dict(zip(self.Zhi, findji )).get(self.taishui(ji))    def new_list(self, olist, o):        a = olist.index(o)        res1 = []        for i in range(len(olist)):            res1.append( olist[a % len(olist)])            a = a + 1        return res1        def multi_key_dict_get(self, d, k):        for keys, v in d.items():            if k in keys:                return v        return None    #干支    def gangzhi(self):        if self.hour == 23:            d = Date(round((Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2))) + 1 * hour), 3))        else:            d = Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2) ))        dd = list(d.tuple())        cdate = fromSolar(dd[0], dd[1], dd[2])        yTG,mTG,dTG,hTG = "{}{}".format(self.Gan[cdate.getYearGZ().tg], self.Zhi[cdate.getYearGZ().dz]), "{}{}".format(self.Gan[cdate.getMonthGZ().tg],self.Zhi[cdate.getMonthGZ().dz]), "{}{}".format(self.Gan[cdate.getDayGZ().tg], self.Zhi[cdate.getDayGZ().dz]), "{}{}".format(self.Gan[cdate.getHourGZ(dd[3]).tg], self.Zhi[cdate.getHourGZ(dd[3]).dz])        return [yTG, mTG, dTG, hTG]#%% #節氣    def ecliptic_lon(self, jd_utc):        return Ecliptic(Equatorial(Sun(jd_utc).ra,Sun(jd_utc).dec,epoch=jd_utc)).lon        def sta(self, jd):        return int(self.ecliptic_lon(jd)*180.0/pi/15)        def iteration(self, jd):        s1=self.sta(jd)        s0=s1        dt=1.0        while True:            jd+=dt            s=self.sta(jd)            if s0!=s:                s0=s                dt=-dt/2            if abs(dt)<0.0000001 and s!=s1:                break        return jd        def find_jq_date(self, year, month, day, hour, jq):        jd=Date("{}/{}/{} {}:00:00.00".format(str(year).zfill(4), str(month).zfill(2), str(day).zfill(2), str(hour).zfill(2) ))        e=self.ecliptic_lon(jd)        n=int(e*180.0/pi/15)+1        dzlist = []        for i in range(24):            if n>=24:                n-=24            jd=self.iteration(jd)            d=Date(jd+1/3).tuple()            b = {self.jieqi[n]: Date("{}/{}/{} {}:{}:00.00".format(str(d[0]).zfill(4), str(d[1]).zfill(2), str(d[2]).zfill(2), str(d[3]).zfill(2) , str(d[4]).zfill(2)))}            n+=1            dzlist.append(b)        return list(dzlist[list(map(lambda i:list(i.keys())[0], dzlist)).index(jq)].values())[0]        def lunar_date_d(self):        day = fromSolar(self.year, self.month, self.day)        return {"年":day.getLunarYear(),  "月": day.getLunarMonth(), "日":day.getLunarDay()}        def xzdistance(self):        return int(self.find_jq_date(self.year, self.month, self.day, self.hour, "夏至") -  Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2))))#%% 積年    def accnum(self, ji):        if ji == 0: #年計            if self.year >= 0:                return self.taiyiyear + self.year             elif self.year < 0:                return self.taiyiyear + self.year + 1         elif ji == 1: #月計            if self.year >= 0:                accyear = self.taiyiyear + self.year - 1            elif self.year < 0:                accyear = self.taiyiyear + self.year + 1             return accyear * 12 + 2 + self.lunar_date_d().get("月")        elif ji == 2:#日計            return int(Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2))) - Date("1900/06/19 00:00:00.00"))             #return (datetime.strptime("{0:04}-{1:02d}-{2:02d} 00:00:00".format(self.year, self.month, self.day), "%Y-%m-%d %H:%M:%S") - datetime.strptime("1900-06-19 00:00:00","%Y-%m-%d %H:%M:%S")).days        elif ji == 3: #時計            return int((Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2))) - Date("1900/06/19 00:00:00.00") - 1)) * 12 + (self.hour + 1 ) // 2 + 1             #return ((datetime.strptime("{0:04}-{1:02d}-{2:02d} 00:00:00".format(self.year, self.month, self.day), "%Y-%m-%d %H:%M:%S") - datetime.strptime("1900-06-19 00:00:00","%Y-%m-%d %H:%M:%S")).days - 1 ) * 12 + (self.hour + 1 ) // 2 + 1        def kook(self, ji):        xz = self.xzdistance()        current_date =  Date("{}/{}/{} {}:00:00.00".format(str(self.year).zfill(4), str(self.month).zfill(2), str(self.day).zfill(2), str(self.hour).zfill(2)))        xz_date =  current_date - xz        k = self.accnum(ji)%72        if k == 0:            k = 72        if ji == 0 or ji == 1 or ji ==2:            dun = "陽遁"        elif ji == 3:            if current_date >= xz_date and self.month >= 6:                dun = "陰遁"            else:                dun = "陽遁"        return {"文":"{}{}局".format(dun, an2cn(k)), "數":k}        def getyuan(self, ji):        accnum = self.accnum(ji)        if round(accnum % 360) == 1:            find_ji_num = 1        else:            find_ji_num = int(round((accnum % 360) / 72, 0))        fiveyuen_d = dict(zip(range(1,6), jiazi()[0::12]))        if find_ji_num == 0:            find_ji_num = 1        jiyuan = fiveyuen_d.get(find_ji_num)         return jiyuan        def getepoch(self, ji):        accnum = self.accnum(ji)        if ji == 0 or ji == 1 or ji ==2:            if round(accnum % 360) == 1:                find_ji_num = 1            else:                find_ji_num = int((accnum % 360) / 60)            if find_ji_num == 0:                find_ji_num = 1            find_ji_num2 = int(accnum % 360 % 72 % 24 / 3)            cnum = list("一二三四五六七八九十")            return {"元":dict(zip(range(1,8), cnum[0:7])).get(find_ji_num), "紀":dict(zip(range(1,8), cnum[0:7])).get(find_ji_num2)}        elif ji == 3:            epochdict = dict(zip([                        ('甲子', '甲午', '乙丑', '乙未', '丙寅', '丙申', '丁卯', '丁酉', '戊辰', '戊戌'),                         ('己巳', '己亥', '庚午', '庚子', '辛未', '辛丑', '壬申', '壬寅', '癸酉', '癸卯'),                        ('甲戌', '甲辰', '乙亥', '乙巳', '丙子', '丙午', '丁丑', '丁未', '戊寅', '戊申'),                        ('己卯', '己酉', '庚辰', '庚戌', '辛巳', '辛亥', '壬午', '壬子', '癸未', '癸丑'),                        ('甲申', '甲寅', '乙酉', '乙卯', '丙戌', '丙辰', '丁亥', '丁巳', '戊子', '戊午'),                        ('己丑', '己未', '庚寅', '庚申', '辛卯', '辛酉', '壬辰', '壬戌', '癸巳', '癸亥')],                                  list("一二三四五六")))            return "第{}紀".format(self.multi_key_dict_get(epochdict, self.gangzhi()[2]))        def jiyuan(self, ji):        if ji == 3:            j = dict(zip([('甲子', '甲午', '乙丑', '乙未', '丙寅', '丙申', '丁卯', '丁酉', '戊辰', '戊戌', '己巳', '己亥'),                                   ('庚午', '庚子', '辛未', '辛丑', '壬申', '壬寅', '癸酉', '癸卯', '甲戌', '甲辰', '乙亥', '乙巳'),                                  ('丙子', '丙午', '丁丑', '丁未', '戊寅', '戊申', '己卯', '己酉', '庚辰', '庚戌', '辛巳', '辛亥'),                                  ('壬午', '壬子', '癸未', '癸丑', '甲申', '甲寅', '乙酉', '乙卯', '丙戌', '丙辰', '丁亥', '丁巳'),                                  ('戊子', '戊午', '己丑', '己未', '庚寅', '庚申', '辛卯', '辛酉', '壬辰', '壬戌', '癸巳', '癸亥')], "甲子,丙子,戊子,庚子,壬子".split(",")))                        return "{}{}元".format(self.getepoch(ji), self.multi_key_dict_get(j, self.gangzhi()[2]))        else:            return "第{}紀第{}{}元".format(self.getepoch(ji).get("紀") ,self.getepoch(ji).get("元"), self.getyuan(ji))        def ty(self, ji):        arr = np.arange(10)         repetitions = 3        arrangement = np.repeat(arr, repetitions)         arrangement_r = list(reversed(arrangement))        yy_dict = {"陽": dict(zip(range(1,73), list(itertools.chain.from_iterable([list(arrangement)[3:15]+ list(arrangement)[18:]] * 3)))),  "陰": dict(zip(range(1,73), (list(arrangement_r)[:12] + list(arrangement_r)[15:][:-3]) * 3))}        return yy_dict.get(self.kook(ji).get("文")[0]).get(self.kook(ji).get("數"))          #始擊    def sf(self, ji):        wc = self.skyeyes(ji)        jd = self.jigod(ji)        if wc == jd:            sf = "艮"            return sf        elif wc != jd:            start = self.new_list(self.gong1, jd)            start1 = len(start[0:start.index("艮")+1])            start2 = self.new_list(self.gong1, wc)[start1-1]            return  start2            #定目    def se(self, ji):        wc,hg,ts = self.skyeyes(ji),self.hegod(ji),self.taishui(ji)        start = self.new_list(self.gong1, hg)        start1 = len(start[:start.index(ts)+1])        start2 = self.new_list(self.gong1, wc)[start1-1]        return  start2    def home_cal(self, ji):        num = self.num        lnum = [8, 8, 3,  3, 4,4, 9, 9, 2, 2, 7, 7, 6, 6, 1, 1]        gong = list("亥子丑艮寅卯辰巽巳午未坤申酉戌乾")        wc = self.skyeyes(ji)        lg = dict(zip(gong, lnum))        wc_num = lg.get(wc)        ty = self.ty(ji)        wc_jc = list(map(lambda x: x == wc, self.jc)).count(True)        ty_jc = list(map(lambda x: x == ty, self.tyjc)).count(True)        wc_jc1  = list(map(lambda x: x == wc, self.jc1)).count(True)        wc_order = self.new_list(num, wc_num)        if wc_jc == 1 and ty_jc != 1 and wc_jc1 !=1 :            return sum(wc_order[: wc_order.index(ty)])+1        elif wc_jc !=1 and ty_jc != 1 and wc_jc1 ==1:            return sum(wc_order[: wc_order.index(ty)])        elif wc_jc != 1 and ty_jc ==1 and wc_jc1 !=1:            return sum(wc_order[: wc_order.index(ty)])        elif wc_jc ==1 and ty_jc ==1 and wc_jc1 !=1 :            return sum(wc_order[: wc_order.index(ty)])+1        elif wc_jc !=1 and ty_jc ==1 and wc_jc1 ==1 :            return sum(wc_order[: wc_order.index(ty)])        elif wc_jc !=1 and ty_jc !=1 and wc_jc1 !=1 and ty != wc_num:            return sum(wc_order[: wc_order.index(ty)])        elif wc_jc !=1 and ty_jc !=1 and wc_jc1 !=1 and ty == wc_num:            return ty            def home_general(self, ji):        home_g = self.home_cal(ji)  % 10        if home_g == 0:            home_g = 5        return home_g        def home_vgen(self, ji):        home_vg = self.home_general(ji) *3 % 10        if home_vg ==0:            home_vg = 5        return home_vg            def away_cal(self, ji):        num = self.num        lnum = [8, 8, 3,  3, 4,4, 9, 9, 2, 2, 7, 7, 6, 6, 1, 1]        gong = list("亥子丑艮寅卯辰巽巳午未坤申酉戌乾")        sf = self.sf(ji)        lg = dict(zip(gong, lnum))        sf_num = lg.get(sf)        ty = self.ty(ji)        sf_jc = list(map(lambda x: x == sf, self.jc)).count(True)        ty_jc = list(map(lambda x: x == ty, self.tyjc)).count(True)        sf_jc1 = list(map(lambda x: x == sf, self.jc1)).count(True)        sf_order = self.new_list(num, sf_num)        if sf_jc == 1 and ty_jc != 1 and sf_jc1 !=1 :            return sum(sf_order[: sf_order.index(ty)])+1        elif sf_jc !=1 and ty_jc != 1 and sf_jc1 ==1:            return sum(sf_order[: sf_order.index(ty)])        elif sf_jc != 1 and ty_jc ==1 and sf_jc1 !=1:            return sum(sf_order[: sf_order.index(ty)])         elif sf_jc ==1 and ty_jc ==1 and sf_jc1 !=1 :            return sum(sf_order[: sf_order.index(ty)])        elif sf_jc !=1 and ty_jc ==1 and sf_jc1 ==1 :            return sum(sf_order[: sf_order.index(ty)])        elif sf_jc !=1 and ty_jc !=1 and sf_jc1 !=1 and sf_num != ty:            return sum(sf_order[: sf_order.index(ty)])        elif sf_jc !=1 and ty_jc !=1 and sf_jc1 !=1 and sf_num == ty:            return ty        def away_general(self, ji):        away_g = self.away_cal(ji)  % 10        if away_g == 0:            away_g = 5        return away_g        def away_vgen(self, ji):        away_vg = self.away_general(ji) *3 % 10        if away_vg == 0:            away_vg = 5        return away_vg            def set_cal(self, ji):        num = self.num        lnum = [8, 8, 3,  3, 4,4, 9, 9, 2, 2, 7, 7, 6, 6, 1, 1]        gong = list("亥子丑艮寅卯辰巽巳午未坤申酉戌乾")        se = self.se(ji)        lg = dict(zip(gong, lnum))        se_num = lg.get(se)        ty = self.ty(ji)        se_jc = list(map(lambda x: x == se, self.jc)).count(True)        ty_jc = list(map(lambda x: x == ty, self.tyjc)).count(True)        se_jc1 = list(map(lambda x: x == se, self.jc1)).count(True)        se_order = self.new_list(num, se_num)        if se_jc == 1 and ty_jc != 1 and se_jc1 !=1 :            return sum(se_order[: se_order.index(ty)])+1        elif se_jc !=1 and ty_jc != 1 and se_jc1 ==1:            return sum(se_order[: se_order.index(ty)])        elif se_jc != 1 and ty_jc ==1 and se_jc1 !=1:            return sum(se_order[: se_order.index(ty)])        elif se_jc ==1 and ty_jc ==1 and se_jc1 !=1 :            return sum(se_order[: se_order.index(ty)])        elif se_jc !=1 and ty_jc ==1 and se_jc1 ==1 :            return sum(se_order[: se_order.index(ty)])        elif se_jc !=1 and ty_jc !=1 and se_jc1 !=1 :            return sum(se_order[: se_order.index(ty)])        elif se_jc !=1 and ty_jc !=1 and se_jc1 !=1 and se_num != ty:            return sum(se_order[: se_order.index(ty)])        elif se_jc !=1 and ty_jc !=1 and se_jc1 !=1 and se_num == ty:            return ty        def cal_des(self, num):        t = []        if num > 10 and num % 10 > 5:            t.append("三才足數")        if num < 10:            t.append("無天")        if num % 10 < 5:            t.append("無地")        if num % 10 == 0:            t.append("無人")        numdict = {1: "雜陰", 2: "純陰", 3: "純陽", 4: "雜陽", 6: "純陰", 7: "雜陰",                   8: "雜陽", 9: "純陽", 11: "陰中重陽", 12: "下和", 13: "雜重陽",                    14: "上和", 16: "下和", 17: "陰中重陽", 18: "上和", 19: "雜重陽",                   22: "純陰", 23: "次和", 24: "雜重陰", 26: "純陰", 27: "下和",                    28: "雜重陰", 29: "次和", 31: "雜重陽", 32: "次和", 33: "純陽",                    34: "下和", 37: "雜重陽", 38: "下和", 39: "純陽"}        t.append(numdict.get(num, None))        return [i for i in t if i is not None]        def set_general(self, ji):        set_g = self.set_cal(ji)  % 10        if set_g == 0:            set_g = 5        return set_g        def set_vgen(self, ji):        set_vg =  self.set_general(ji) *3 % 10        if set_vg == 0:            set_vg = 5        return set_vg        def sixteen_gong1(self, ji):        dict1 = [{self.skyeyes(ji):"昌"},{self.hegod(ji):"合"},{self.sf(ji):"始"},                {self.se(ji):"目"}, {self.kingbase(ji):"君"}, {self.officerbase(ji):"臣"}, {self.pplbase(ji):"民"},                {self.fgd(ji):"四"},{self.skyyi(ji):"乙"},{self.earthyi(ji):"地"},{self.zhifu(ji):"符"},                {self.flyfu(ji):"飛"},{self.kingfu(ji):"帝"}, {self.wufu(ji):"福"},  {self.jigod(ji):"計"}]        res = {"子":"", "丑":"", "艮":"","寅":"", "卯":"", "辰":"", "巽":"","巳":"", "午":"", "未":"", "申":"", "坤":"", "酉":"", "戌":"", "乾":"", "亥":"", "中":""}        for dict in dict1:           for list in dict:               if list in res:                   try:                       res[list] += (dict[list])                   except TypeError:                       pass               else:                   try:                       res[list] = dict[list]                   except TypeError:                       pass        rres = str(res.values())[11:].replace("([","").replace("'","").replace("])","").replace(" ", "").split(",")        rrres = [re.findall("..", i) for i in rres]        r = str(res.keys())[11:].replace("([","").replace("'","").replace("])","").replace(" ", "").split(",")        return {r[i]:rrres[i] for i in range(0,16)}        def sixteen_gong(self, ji):        dict1 = [{self.skyeyes(ji):"文昌"},{self.taishui(ji):"太歲"},{self.hegod(ji):"合神"},{self.sf(ji):"始擊"},                 {self.se(ji):"定目"}, {self.kingbase(ji):"君基"}, {self.officerbase(ji):"臣基"}, {self.pplbase(ji):"民基"},                 {self.fgd(ji):"四神"},{self.skyyi(ji):"天乙"},{self.earthyi(ji):"地乙"},{self.zhifu(ji):"直符"},                 {self.flyfu(ji):"飛符"},{self.kingfu(ji):"帝符"},{self.taijun(ji):"太尊"}, {self.wufu(ji):"五福"} ]        res = {"子":"", "丑":"", "艮":"","寅":"", "卯":"", "辰":"", "巽":"","巳":"", "午":"", "未":"", "申":"", "坤":"", "酉":"", "戌":"", "乾":"", "亥":"", "中":""}        for dict in dict1:            for list in dict:                if list in res:                    try:                        res[list] += (dict[list])                    except TypeError:                        pass                else:                    try:                        res[list] = dict[list]                    except TypeError:                        pass        rres = str(res.values())[11:].replace("([","").replace("'","").replace("])","").replace(" ", "").split(",")        rrres = [re.findall("..", i) for i in rres]        r = str(res.keys())[11:].replace("([","").replace("'","").replace("])","").replace(" ", "").split(",")        return {r[i]:rrres[i] for i in range(0,16)}    #九宮    def nine_gong(self, ji):        dict1 = [{self.home_general(ji):"主將"},{self.home_vgen(ji):"主參"},{self.away_general(ji):"客將"},                 {self.away_vgen(ji):"客參"},{self.set_general(ji):"定將"},{self.set_vgen(ji):"定參"},                 {self.ty(ji):"太乙"}, {self.threewind(ji):"三風"},  {self.fivewind(ji):"五風"},                 {self.eightwind(ji):"八風"},  {self.flybird(ji):"飛鳥"},{self.bigyo(ji):"大游"},                 {self.smyo(ji):"小游"},]        res = {8:"", 3:"", 4:"", 9:"",5:"", 2:"", 7:"", 6:"", 1:""}        for dict in dict1:            for list in dict:                if list in res:                    try:                        res[list] += (dict[list])                    except TypeError:                        pass                else:                    try:                        res[list] = dict[list]                    except TypeError:                        pass        return res         #君基    def kingbase(self, ji):        kb = (self.accnum(ji) +250) % 360  / 30        kb_v = dict(zip(range(1,13), self.new_list(self.Zhi, "午"))).get(int(kb))        if kb_v == 0 or kb_v ==None:            kb_v = "中"        return kb_v        #臣基    def officerbase(self, ji):        ob = (self.accnum(ji)  +250) % 360  % 36 / 3        ob_v =  dict(zip(range(1,13), self.new_list(self.Zhi, "午"))).get(int(ob))        if ob_v == 0 or ob_v ==None:            ob_v = "中"        return ob_v    #民基    def pplbase(self, ji):        pb = (self.accnum(ji)  +250) % 360 % 12        pb_v = dict(zip(range(1,13), self.new_list(self.Zhi, "戌"))).get(int(pb))        if pb_v == 0 or pb_v ==None:            pb_v = "中"        return  pb_v    #大游    def bigyo(self, ji):        by = int((self.accnum(ji) +34) % 388)        if by < 36:            by = by        elif by > 36:            by = by / 36        byv = dict(zip([7,8,9,1,2,3,4,6],range(1,9))).get(int(by))        if byv == 0 or byv ==None:            byv = 5        return byv    #小游    def smyo(self, ji):        sy = int(self.accnum(ji)  % 360)        if sy < 24:            sy = sy % 3         elif sy > 24:            sy = sy % 24            if sy > 3:                sy = sy % 3        syv = dict(zip([1,2,3,4,6,7,8,9],range(1,9))).get(int(sy))        if syv == 0 or syv == None:            syv = 5        return syv    #四神    def fgd(self, ji):        f = self.accnum(ji)  % 360 % 36 / 3         fv = dict(zip(range(1,13), self.new_list(self.Zhi, "亥"))).get(int(f))        if fv == 0 or fv == None:            fv = "中"        return fv    #天乙    def skyyi(self, ji):        f = self.accnum(ji)  % 360 % 36 / 3         fv = dict(zip(range(1,13), self.new_list(self.Zhi, "酉"))).get(int(f))        if fv == 0 or fv == None:            fv = "中"        return fv    #地乙    def earthyi(self, ji):        f = self.accnum(ji)  % 360 % 36 / 3        fv = dict(zip(range(1,13), self.new_list(self.Zhi, "巳"))).get(int(f))        if fv == 0 or fv == None:            fv = "中"        return fv    #直符    def zhifu(self, ji):        f = self.accnum(ji)  % 360 % 36 / 3        fv = dict(zip(range(1,14), ["中"]+self.new_list(self.Zhi, "酉"))).get(int(f))        if fv == 0 or fv == None:            fv = "中"        return fv    #飛符    def flyfu(self, ji):        f = self.accnum(ji) % 360 % 36 / 3        fv = dict(zip(range(1,13), self.new_list(self.Zhi, "辰"))).get(int(f))        if fv == 0 or fv == None:            fv = "中"        return fv    #帝符    def kingfu(self, ji):        f = self.accnum(ji)  %20        if f > 16:            f = f - 16        fv = dict(zip(range(1,17), self.new_list(self.gong1, "戌"))).get(int(f))        if fv == 0 or fv== None:            fv = "中"        return fv    #太尊    def taijun(self, ji):        f = self.accnum(ji)   % 4        fv = dict(zip(range(1,5), list("子午卯酉"))).get(int(f))        if fv == 0  or fv == None:            fv = "中"        return fv    #飛鳥    def flybird(self, ji):        f = self.accnum(ji)   % 9        fv = dict(zip(range(1,10), [1,8,3,4,9,2,7,6])).get(int(f))        if fv == 0 or fv ==None:            fv = 5        return fv    #五行    def wuxing(self, ji):        f = self.accnum(ji) // 5        f = f % 5        fv =  dict(zip(range(1,10), [1,3,5,7,9,2,4,6,8])).get(int(f))        if fv == 0 or fv ==None:            fv = 5        return fv    #三風    def threewind(self, ji):        f = self.accnum(ji)  % 9        fv = dict(zip(range(1,9), [7,2,6,1,5,9,4,8])).get(int(f))        if fv == 0 or fv == None:            fv = 5        return fv    #五風    def fivewind(self, ji):        f = self.accnum(ji)  % 29        if f > 10:            f = f - 9        fv = dict(zip(range(1,10), [1,3,5,7,9,2,4,6,8])).get(int(f))        if fv == 0 or fv == None:            fv = 5        return fv    #八風    def eightwind(self, ji):        f = self.accnum(ji)  % 9        fv = dict(zip(range(1,9), [2,3,5,6,7,8,9,1])).get(int(f))        if fv == 0 or fv == None:            fv = 5        return fv    #五福    def wufu(self, ji):        f = int(self.accnum(ji)  + 250) % 225 / 45         fv = dict(zip(range(1,6), list("乾艮巽坤中"))).get(int(f))        if fv == 0 or fv ==None:            fv = 5        return fv    #八門    def eight_door(self, ji):        acc = self.accnum(ji) % 120        if acc == 0:            acc = 120        eightdoor_zhishi = acc // 30        if eightdoor_zhishi % 30 != 0:           eightdoor_zhishi = eightdoor_zhishi + 1        if self.kook()[0] == "陽":            fdoor = [1,8,3,6]        elif self.kook()[0] == "陰":            fdoor = [9,2,7,4]        #ty_gong = self.ty()        return self.new_list(self.num, fdoor[eightdoor_zhishi]), eightdoor_zhishi        def pan(self, ji):        return {                "太乙計":{0:"年計", 1:"月計", 2:"日計", 3:"時計"}.get(ji),                 "公元日期":"{}年{}月{}日{}時".format(self.year, self.month, self.day, self.hour),                "干支":self.gangzhi(),                "農曆":self.lunar_date_d(),                "年號":self.kingyear(),                "紀元":self.jiyuan(ji),                "局式":self.kook(ji),                "太乙":self.ty(ji),                "文昌":[self.skyeyes(ji), self.skyeyes_des(ji)],                "太歲":self.taishui(ji),                "合神":self.hegod(ji),                "計神":self.jigod(ji),                "始擊":self.sf(ji),                "定目":self.se(ji),                "主算":[self.home_cal(ji), self.cal_des(self.home_cal(ji))],                "客算":[self.away_cal(ji), self.cal_des(self.away_cal(ji))],                "定算":[self.set_cal(ji), self.cal_des(self.set_cal(ji))],                "九宮":self.nine_gong(ji),                 "十六宮":self.sixteen_gong(ji),                }        def html(self, ji):        text = '''<html><body><table border="0" cellpadding="1" cellspacing="1" style="width:500px">        <tbody>            <tr>                <td colspan="5">                <p><span style="font-size:large"><strong>'''+str(self.year)+"年"+str(self.month)+"月"+str(self.day)+"日"+str(self.hour)+"時"+'''<br />                干支: '''+self.gangzhi()[0]+"  "+self.gangzhi()[1]+"  "+self.gangzhi()[2]+"  "+self.gangzhi()[3]+'''&nbsp;</strong></span></p>                <p><span style="font-size:large"><strong>'''+self.kingyear()+'''<br />                <p><span style="font-size:large"><strong>'''+self.jiyuan(ji)+"  "+self.kook(ji).get("文")+'''<br />                主算:'''+str(self.home_cal(ji))+"".join(self.cal_des(self.home_cal(ji)))+'''<br />                客算:'''+str(self.away_cal(ji))+"".join(self.cal_des(self.away_cal(ji)))+'''<br />                定算:'''+str(self.set_cal(ji))+"".join(self.cal_des(self.set_cal(ji)))+'''</strong></span></p>                </td>            </tr>            <tr>                <td><span style="font-size:large"><strong>巽</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("巽")])+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>巳</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("巳")])+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>午</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("午")])+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>未&nbsp;</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("未")])+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>坤</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("坤")])+'''</tbody>                </table>                </td>            </tr>            <tr>                <td><span style="font-size:large"><strong>辰</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(['''<tr><td>'''+i+'''</td></tr>''' for i in self.pan(ji).get("十六宮").get("辰")])+'''</tbody>                </table>                </td>                <td colspan="3" rowspan="3">&nbsp;</td>                <td><span style="font-size:large"><strong>申</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("申"))))+'''</tbody>                </table>                </td>            </tr>            <tr>                <td><span style="font-size:large"><strong>卯</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("卯"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>酉</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("酉"))))+'''</tbody>                </table>                </td>            </tr>            <tr>                <td><span style="font-size:large"><strong>寅</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("寅"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>戌</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("戌"))))+'''</tbody>                </table>                </td>            </tr>            <tr>                <td><span style="font-size:large"><strong>艮</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("艮"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>丑</strong></span>                    <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("丑"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>子</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("子"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>亥</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("亥"))))+'''</tbody>                </table>                </td>                <td><span style="font-size:large"><strong>乾</strong></span>                <table border="0" cellpadding="1" cellspacing="1" style="width:100px">                    <tbody>'''+"".join(list(map(lambda i:'''<tr><td>'''+i+'''</td></tr>''', self.pan(ji).get("十六宮").get("乾"))))+'''</tbody>                </table>                </td>            </tr>        </tbody>    </table>    <p>&nbsp;</p></body></html>'''         return textif __name__ == '__main__':    tic = time.perf_counter()    print(Taiyi(2022,9,22,0,0).pan(3) )    toc = time.perf_counter()    print(f"{toc - tic:0.4f} seconds")