算四柱八字,灵龟八法开穴 第一版


from datetime import datetime

class Suanbazis:
    #天干地支60组合 
    def __init__(self):
        self.Chinese_era=[
        "甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未","壬申","癸酉","甲戌","乙亥",
        "丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥",
        "戊子","己丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","己亥",
        "庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","己酉","庚戌","辛亥",
        "壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬戌","癸亥",]

        self.Shi_tiangan=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
        self.Wu_hu = ["丙","戊","庚","壬","甲"] #五虎与五鼠相差4
        self.Wu_shu = ["甲","丙","戊","庚","壬",]
        self.Shier_dizhi=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]#0~11

            
         #以下为灵龟八法支撑
         #阳日
        self.yang_ri=[
        "甲子","丙寅","戊辰","庚午","壬申"
        "甲戌","丙子","戊寅","庚辰","壬午"
        "甲申","丙戌","戊子","庚寅","壬辰"
        "甲午","丙申","戊戌","庚子","壬寅"
        "甲辰","丙午","戊申","庚戌","壬子"
        "甲寅","丙辰","戊午","庚申","壬戌"]
        self.zhuri_era={
        "甲子":17,"乙丑":19,"丙寅":15,"丁卯":16,"戊辰":17,"己巳":17,"庚午":16,"辛未":17,"壬申":17,"癸酉":16,
        "甲戌":20,"乙亥":16,"丙子":14,"丁丑":18,"戊寅":15,"己卯":18,"庚辰":19,"辛巳":14,"壬午":15,"癸未":17,
        "甲申":19,"乙酉":18,"丙戌":17,"丁亥":15,"戊子":14,"己丑":20,"庚寅":17,"辛卯":15,"壬辰":18,"癸巳":14,
        "甲午":17,"乙未":19,"丙申":16,"丁酉":17,"戊戌":17,"己亥":17,"庚子":16,"辛丑":17,"壬寅":16,"癸卯":15,
        "甲辰":20,"乙巳":16,"丙午":14,"丁未":18,"戊申":16,"己酉":19,"庚戌":19,"辛亥":14,"壬子":15,"癸丑":17,
        "甲寅":18,"乙卯":17,"丙辰":17,"丁巳":15,"戊午":14,"己未":20,"庚申":18,"辛酉":16,"壬戌":18,"癸亥":14,}
        self.zhushi_era={
          '甲子': 18, '乙丑': 16, '丙寅': 14, '丁卯': 12, '戊辰': 10, '己巳': 13, '庚午': 17, '辛未': 15, '壬申': 13, '癸酉': 11,
          '甲戌': 14, '乙亥': 12, '丙子': 16, '丁丑': 14, '戊寅': 12, '己卯': 15, '庚辰': 13, '辛巳': 11, '壬午': 15, '癸未': 13,
          '甲申': 16, '乙酉': 14, '丙戌': 12, '丁亥': 10, '戊子': 14, '己丑': 17, '庚寅': 15, '辛卯': 13, '壬辰': 11, '癸巳': 9,
          '甲午': 18, '乙未': 16, '丙申': 14, '丁酉': 12, '戊戌': 10, '己亥': 13, '庚子': 17, '辛丑': 15, '壬寅': 13, '癸卯': 11,
          '甲辰': 14, '乙巳': 12, '丙午': 16, '丁未': 14, '戊申': 12, '己酉': 15, '庚戌': 13, '辛亥': 11, '壬子': 15, '癸丑': 13,
          '甲寅': 16, '乙卯': 14, '丙辰': 12, '丁巳': 10, '戊午': 14, '己未': 17, '庚申': 15, '辛酉': 13, '壬戌': 11, '癸亥': 9}
        self.kai_xue={
            1:"坎 申脉",2:"坤 照海",
            3:"震 外关",4:"巽 临泣",5:"坤 照海",
            6:"乾 公孙",7:"兑 后溪",
            8:"艮 内关",9:"离 列缺"}
    def Suan_year_era(self,year):    
        #计算年柱,不得小于1924年 #year_era年柱
        year = year-1924
        year_yu=year%60
        year_era = self.Chinese_era[year_yu]
        #print(f"年柱 {year_era}")
        return year_era

    def Suan_yue_era(self,year_era,day_month,):
        #计算月柱
        #按五虎遁决得到正月的月柱 下标从0开始
        for i in self.Shi_tiangan:
            if year_era[0] == i: 
                months =self.Shi_tiangan.index(i)
                if months >= 5:
                    months -= 5
        #正月的月柱          
        zhengyue = self.Wu_hu[months]+self.Shier_dizhi[2]
        #正月的月柱在天干地支的下标
        #print(self.Chinese_era.index(zhengyue))
        day_month += self.Chinese_era.index(zhengyue)
        #print(day_month)
        #因为是从0开始算的下标,要减1
        yue_era = self.Chinese_era[day_month-1]
        #print(f"月柱 {yue_era}")
        return yue_era

    def Suan_ri_era(self,days,day_str='辛巳'):
        """计算日柱 day_era
            days 距离默认的天数
            day_str='辛巳' 这是起始天数,默认1970-01-01 己酉年丙子月辛巳日
            就是找到一天知道日柱的作为定位,60天轮回
        """
        day_yu = days % 60
        xiangcha = len(self.Chinese_era)-self.Chinese_era.index(day_str)
        day_era =self.Chinese_era[day_yu-xiangcha]
        #print(f"日柱 {day_era}")
        return day_era

    #def Suan_day_era(self,year,month,day):
        
        
    def Suan_shi_era(self,ri_era,hour_shi):
        #计算时柱
        for i in self.Shi_tiangan:
            if ri_era[0] == i: 
                hour_s =self.Shi_tiangan.index(i)
                #hour_s+=4 #五虎与五鼠相差4
                if hour_s >= 5:
                    hour_s -= 5
        zi_shi = self.Wu_shu[hour_s]
        #hour_shi = date.hour
        if hour_shi%2:
            hour_number= int((hour_shi+1)/2)
        else:
            hour_number= int(hour_shi/2)
        #if hour_number==12:
        #    hour_number=0
        zi_shi =zi_shi+self.Shier_dizhi[0]
        shi_number=self.Chinese_era.index(zi_shi)+hour_number
        shi_era =self.Chinese_era[shi_number]
        #print(f"{hour_shi}时柱 {shi_era}")
        return shi_era

    #  按日时开穴
    def Holing(self,year,month,day,time,divis=0):
        print(f"今日此时八柱为{year}年{month}月{day}日{time}时")
        if day in self.yang_ri:
            #print("当属阳日")
            divis=9
        else:
            #print("当属阴日")
            divis=6       
        radix = self.zhuri_era[day]+self.zhushi_era[time]
        #print(f"基数一共是:{radix}")
        yushu = radix % divis
        print("此时按灵龟八法:当开",end="--")
        if yushu==0:
            print(self.kai_xue[divis])
        else:
            print(self.kai_xue[yushu])        

if __name__=="__main__":
    app = Suanbazis()
    #today = datetime.today()
    date = datetime.now()    
    today = date.strftime("%Y-%m-%d %H:%M:%S")
    print(f"今天的日期是:{today}")
    day_old = datetime.strptime("1970-01-01","%Y-%m-%d")
    day_new = date.strftime("%Y-%m-%d")
    day_new = datetime.strptime(day_new,"%Y-%m-%d")
    dalta = day_new-day_old
    days = dalta.days
    day_month = date.month-1
    day_hour = date.hour
    day_year = date.year
    
    year_era=app.Suan_year_era(date.year)
    yue_era=app.Suan_yue_era(year_era,day_month)
    day_era=app.Suan_ri_era(days)
    shi_era=app.Suan_shi_era(day_era,day_hour)
    app.Holing(year_era,yue_era,day_era,shi_era)


其中月柱方法还不是很完美,没经过大量测试,月柱可能会有误差,同时公历和农历相差并不是固定一个月的,所以月柱的函数不是准确的。

 一般来说,现在想看年柱月柱日柱,直接在手机上的日历看就很方便,而时柱可依靠日柱来推算。而我本来的目的是想开八法,所以年柱的月柱只是随便弄弄。

  写这稿只是玩一下的性质,学软件并不一定是为了多历害,只是刚好可以方便自己。

更改内容,时柱按五鼠遁决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值