天天看點

使用python排八字 計算八字的相合相沖五行分值等

簡介

八字術是一種古老的算命術。它運用陰陽、五行、幹支、八卦等理論,把人的出生年月日時轉化為八個字,進而推算人的富貴貧賤、禍福吉兇、窮通壽天、名利地位、家庭六親等方面的情況

八字源自古代的中國,是一種利用天幹和地支來準确記錄年、月、日、時的方式,由“年幹,年支”、“月幹,月支”、“日幹,日支”、“時幹,時支”,共八個幹支所組成(共八個字),年、月、日、時的幹支組合稱為“柱”,形成“年柱”、“月柱”、“日柱”、“時柱”,故八字又稱為“四柱”或“四柱八字”。

這種以幹支記錄時間的方式從夏朝開始就已經開始使用,但直至宋朝的徐子平才将人們出生時的幹支八字用來論斷人事禍福,是以命理學中的八字命理又稱“子平八字學”,以紀念徐子平對八字命理學的貢獻。

公曆 2006年1月28日23:50 農曆 丙戌年正月初一日子時 八字 乙酉年己醜月戊午日壬子時

※八字以“立春”節氣為新舊年的交界,丙戌年正月初七辰時(07:27)立春。

幫助

>python bazi.py 1990 2 22  4 -g

日期:
======================================
公曆:
        1990年2月22日
農曆:
        1990年正月廿七日

八字:   同義詞:七殺|偏官 偏印|枭神 解讀:釘釘或微信pythontesting
======================================================================================================================================================
            年【父-根】                      月【兄弟僚友-苗】                     日【自己配偶-花】                      時【子孫-實】
------------------------------------------------------------------------------------------------------------------------------------------------------
            庚--金 [食]                       戊--土 [比肩]                       戊--土 [自己]                        甲--木 [殺]
             午--帝旺                           寅--長生                           午--帝旺                           寅--長生
         己土3劫 丁火5印                戊土1比肩 丙火2偏印 甲木5殺                 己土3劫 丁火5印                戊土1比肩 丙火2偏印 甲木5殺


======================================================================================================================================================
你屬: 戊 特點:-- 霧霞 山 祿巳 土虛則崩 四柱帶水則為上格,霞水相輝而成文彩也;年月幹見癸雨後霞現

年份: 午 特點:-- 烽堠 南 屬火、土,其色赤黃 時利見辰,真龍出則凡馬空矣,謂之馬化龍駒。

{'戊': '比肩', '己': '劫', '庚': '食', '辛': '傷', '壬': '偏财', '癸': '财', '甲': '殺', '乙': '官', '丙': '偏印', '丁': '印', '子': '胎', '醜': '養', '寅': '長生', '卯': '沐浴', '辰': '冠帶', '巳': '建', '午': '帝旺', '未': '衰', '申': '病', '酉': '死', '戌': '墓', '亥': '絕'}


十幹沖:
============================================================
('甲', '庚') 相沖

子女狀态: 庚 絕
=========================

對象狀态: 癸 沐浴
=========================

羊刃: 戊 午
=========================
羊刃重重又見祿,富貴饒金玉。 官、印相助福相資。
專羊刃,主眼露性急,兇暴害物,親近惡黨,生旺稍可,死絕尤甚
在五行敗者逢之,多患瘰疠或瘴疠、金刃之災,不論貴賤,多冗雜勞迫,少得安逸
六甲生人逢乙卯、丁卯,為真羊刃。若重犯,主殘疾,官祿失退則散在晚年
運作羊刃,财物耗散

有刃頭财,如甲人見己卯之類,謂之銷 煞 主财帛歇滅,常人以屠沽刀鋸等事為業,或因被盜而緻命者。
有刃頭鬼,如甲人見辛卯之類,謂之持刃煞,主人不令終,雖入貴格,亦不可測。甲乙人見之,尤緊。多腦疽發背而終。
有羊刃相蝕,如甲寅虎、兔、甲戊狗兔之類(),見所蝕年月稍可,日時至危。若見兩重,更值空亡,設非相蝕,亦犯流配至老,主不善終?
有攬辔澄清格,謂貴人乘馬而前視羊刃,猶馬頭帶劍之義。
=========================


将星: 常欲吉星相扶,貴煞加臨乃為吉慶。
=========================
理愚歌》雲:将星若用亡神臨,為國棟梁臣。言吉助之為貴,更夾貴庫墓純粹而
    不雜者,出将入相之格也,帶華蓋、正印而不夾庫,兩府之格也;隻帶庫墓而帶正印,員郎
    以上,既不帶墓又不帶正印,止有華蓋,常調之祿也;帶華印而正建驿馬,名曰節印,主旌節
    之貴;若歲幹庫同庫為兩重福,主大貴。


五行分數
============================================================
{'金': 5, '木': 20, '水': 0, '火': 16, '土': 19}


五行缺水的建議
=========================

    身體需要注意: 胫足、膀胱腎(比如結石) 多喝水
    冬天或冷天氣較走運
    亥月、子月、豬年和鼠年運氣較好
    晚上九點至上午一點是吉時
    北方較冷是吉方
    住朝北的房子較吉利
    睡房在房子的北方較好
    睡房的北方有窗字較順利
    金屬床或水床有利健康
    辦公桌朝北有助工作效率
    吉祥顔色是黑色
    室内裝璜用黑色系統
    穿衣用黑色系列,帶珠寶也不錯
    開黑色車子較平安易發财
    多喝水,注意腎髒系統
    多做遊泳、潛水、滑雪、釣魚、溜冰等戶外運動
    和水有關的工作較容易。
           

源碼:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author:  釘釘或微信pythontesting 技術支援qq群:630011153 144081101
# CreateDate: 2019-2-21

# -*- coding:utf-8 -*-

import  sxtwl
import argparse
import collections
import pprint
from bidict import bidict

from datas import *

description = '''

'''

parser = argparse.ArgumentParser(description=description,
                                 formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('year', action="store", help=u'year')
parser.add_argument('month', action="store", help=u'month')
parser.add_argument('day', action="store", help=u'day')
parser.add_argument('time', action="store", help=u'time')    
parser.add_argument('-b', action="store_true", default=False, help=u'直接輸入八字')
parser.add_argument('-g', action="store_true", default=False, help=u'是否采用公曆')
parser.add_argument('-r', action="store_true", default=False, help=u'是否為閏月,僅僅使用于農曆')
parser.add_argument('-n', action="store_true", default=False, help=u'是否為女,預設為男')
parser.add_argument('--version', action='version',
                    version='%(prog)s 0.1 Rongzhong xu 2019 02 21')
options = parser.parse_args()

Gans = collections.namedtuple("Gans", "year month day time")
Zhis = collections.namedtuple("Zhis", "year month day time")

if options.b:
    gans = Gans(year=options.year[0], month=options.month[0], 
                day=options.day[0],  time=options.time[0])
    zhis = Gans(year=options.year[1], month=options.month[1], 
                day=options.day[1],  time=options.time[1])
else:

    lunar = sxtwl.Lunar();
    if options.g:
        day = lunar.getDayBySolar(
            int(options.year), int(options.month), int(options.day))
    else:
        day = lunar.getDayByLunar(
            int(options.year), int(options.month), int(options.day), options.r)

    gz = lunar.getShiGz(day.Lday2.tg, int(options.time))

    # 計算甲幹相合    
    gans = Gans(year=Gan[day.Lyear2.tg], month=Gan[day.Lmonth2.tg], 
                day=Gan[day.Lday2.tg], time=Gan[gz.tg])
    zhis = Zhis(year=Zhi[day.Lyear2.dz], month=Zhi[day.Lmonth2.dz], 
                day=Zhi[day.Lday2.dz], time=Zhi[gz.dz])
me = gans.day
zhus = [item for item in zip(gans, zhis)]

if not options.b:
    print("\n日期:")
    print("======================================")  
    print("公曆:")
    print("\t{}年{}月{}日".format(day.y, day.m, day.d))

    Lleap = "閏" if day.Lleap else ""
    print("農曆:")
    print("\t{}年{}{}月{}日".format(day.Lyear0 + 1984, Lleap, ymc[day.Lmc], rmc[day.Ldi]))

print("\n八字:   同義詞:七殺|偏官 偏印|枭神 解讀:釘釘或微信pythontesting")
print("="*150)    
print("{:^30s}{:^30s}{:^30s}{:^30s}".format('年【父-根】', "月【兄弟僚友-苗】", "日【自己配偶-花】", "時【子孫-實】"))
print("-"*150)
print("{:^32s}{:^32s}{:^32s}{:^32s}".format(
    gans.year + "--" + '{} [{}]'.format(gan5[gans.year], ten_deities[me][gans.year]),
    gans.month + "--" + '{} [{}]'.format(gan5[gans.month], ten_deities[me][gans.month]),
    me + "--" + '{} [{}]'.format(gan5[me], '自己'), 
    gans.time + "--" + '{} [{}]'.format(gan5[gans.time], ten_deities[me][gans.time]),
))
print("{:^32s}{:^32s}{:^32s}{:^32s}".format(
    zhis.year + "--" + ten_deities[me][zhis.year],
    zhis.month + "--" + ten_deities[me][zhis.month],
    zhis.day + "--" + ten_deities[me][zhis.day],
    zhis.time + "--" + ten_deities[me][zhis.time],
))
for item in zhis:
    out = ''
    for gan in zhi5[item]:
        out = out + "{}{}{}{} ".format(gan, gan5[gan], zhi5[item][gan],  ten_deities[me][gan])
    print("{:^28s}".format(out), end=' ')

print("\n\n")
print("="*150)  
print("你屬:", me, "特點:--", gan_desc[me],"\n")
print("年份:", zhis[0], "特點:--", zhi_desc[zhis[0]],"\n")
print(dict(ten_deities[me]))
#print(ten_deities[me])

def check_subset(gans, db, desc):
    flag = True
    for item in db:
        if set(item).issubset(gans):
            if flag:
                print("\n\n{}:".format(desc))
                print("="*60)   
                flag = False
            print(item, db[item])    

check_subset(gans, gan_hes, '十幹合')
check_subset(gans, gan_chongs, '十幹沖')
check_subset(zhis, zhi_6hes, '地支六合')        
check_subset(zhis, zhi_3hes, '地支三合')        
check_subset(zhis, zhi_huis, '地支三會')    
check_subset(zhis, zhi_chongs, '地支相沖')  
check_subset(zhis, zhi_poes, '地支相破')    
check_subset(zhis, zhi_haies, '地支相害')   
check_subset(zhis, zhi_xings, '地支相刑')

# 子女分析
child = ten_deities[me].inverse['傷'] if options.n else ten_deities[me].inverse['食']
print("\n子女狀态:", child, ten_deities[child][zhis[3]])  
print("=========================")  

# 對象狀态
peer = ten_deities[me].inverse['官'] if options.n else ten_deities[me].inverse['财']
print("\n對象狀态:", peer, ten_deities[peer][zhis[1]])  
print("=========================")  

# 羊刃分析
key = '帝旺' if Gan.index(me)%2 == 0 else '冠帶'

if ten_deities[me].inverse[key] in zhis:
    print("\n羊刃:", me, ten_deities[me].inverse[key])  
    print("=========================")   
    print("羊刃重重又見祿,富貴饒金玉。 官、印相助福相資。")  
    print("專羊刃,主眼露性急,兇暴害物,親近惡黨,生旺稍可,死絕尤甚")
    print("在五行敗者逢之,多患瘰疠或瘴疠、金刃之災,不論貴賤,多冗雜勞迫,少得安逸") 
    print("六甲生人逢乙卯、丁卯,為真羊刃。若重犯,主殘疾,官祿失退則散在晚年")
    print("運作羊刃,财物耗散")    
    print("\n有刃頭财,如甲人見己卯之類,謂之銷 煞 主财帛歇滅,常人以屠沽刀鋸等事為業,或因被盜而緻命者。")
    print("有刃頭鬼,如甲人見辛卯之類,謂之持刃煞,主人不令終,雖入貴格,亦不可測。甲乙人見之,尤緊。多腦疽發背而終。")
    print("有羊刃相蝕,如甲寅虎、兔、甲戊狗兔之類(),見所蝕年月稍可,日時至危。若見兩重,更值空亡,設非相蝕,亦犯流配至老,主不善終?")
    print("有攬辔澄清格,謂貴人乘馬而前視羊刃,猶馬頭帶劍之義。")    
    print("=========================")      


# 将星分析
me_zhi = zhis[2]
other_zhis = zhis[:2] + zhis[3:]
flag = False
if me_zhi in ("申", "子", "辰"):
    if "子" in other_zhis:
        flag = True
elif me_zhi in ("醜", "巳", "酉"):
    if "酉" in other_zhis:
        flag = True   
elif me_zhi in ("寅", "午", "戌"):
    if "午" in other_zhis:
        flag = True     
elif me_zhi in ("亥", "卯", "未"):
    if "卯" in other_zhis:
        flag = True   

if flag:
    print("\n\n将星: 常欲吉星相扶,貴煞加臨乃為吉慶。")  
    print("=========================")   
    print('''理愚歌》雲:将星若用亡神臨,為國棟梁臣。言吉助之為貴,更夾貴庫墓純粹而
    不雜者,出将入相之格也,帶華蓋、正印而不夾庫,兩府之格也;隻帶庫墓而帶正印,員郎
    以上,既不帶墓又不帶正印,止有華蓋,常調之祿也;帶華印而正建驿馬,名曰節印,主旌節
    之貴;若歲幹庫同庫為兩重福,主大貴。''')

# 華蓋分析
flag = False
if me_zhi in ("申", "子", "辰"):
    if "辰" in other_zhis:
        flag = True
elif me_zhi in ("醜", "巳", "酉"):
    if "醜" in other_zhis:
        flag = True   
elif me_zhi in ("寅", "午", "戌"):
    if "戌" in other_zhis:
        flag = True     
elif me_zhi in ("亥", "卯", "未"):
    if "未" in other_zhis:
        flag = True   

if flag:
    print("\n\n華蓋: 多主孤寡,總貴亦不免孤獨,作僧道藝術論。")  
    print("=========================")   
    print('''《理愚歌》雲:華蓋雖吉亦有妨,或為孽子或孤孀。填房入贅多阙口,爐鉗頂笠拔缁黃。
    又雲:華蓋星辰兄弟寡,天上孤高之宿也;生來若在時與胎,便是過房庶出者。''')    


# 鹹池 桃花
flag = False
year_zhi = zhis[0]
if me_zhi in ("申", "子", "辰") or year_zhi in ("申", "子", "辰"):
    if "酉" in zhis:
        flag = True
elif me_zhi in ("醜", "巳", "酉") or year_zhi in ("醜", "巳", "酉"):
    if "午" in other_zhis:
        flag = True   
elif me_zhi in ("寅", "午", "戌") or year_zhi in ("寅", "午", "戌"):
    if "卯" in other_zhis:
        flag = True     
elif me_zhi in ("亥", "卯", "未") or year_zhi in ("亥", "卯", "未"):
    if "子" in other_zhis:
        flag = True   

if flag:
    print("\n\n鹹池(桃花): 牆裡桃花,煞在年月;牆外桃花,煞在日時;")  
    print("=========================")   
    print('''一名敗神,一名桃花煞,其神之奸邪淫鄙,如生旺則美容儀,耽酒色,疏财好歡,
    破散家業,唯務貪淫;如死絕,落魄不檢,言行狡詐,遊蕩賭博,忘恩失信,私濫奸淫,
    靡所不為;與元辰并,更臨生旺者,多得匪人為妻;與貴人建祿并,多因油鹽酒貨得生,
    或因婦人暗昧之财起家,平生有水厄、痨瘵之疾,累遭遺失暗昧之災。此人入命,有破無成,
    非為吉兆,婦人尤忌之。
    鹹池非吉煞,日時與水命遇之尤兇。''')    

# 官分析
guan_list = []
for item in gans + zhis:
    if item in guans[me]:
        guan_list.append(item)
if guan_list:
    print("\n\n正官:")  
    print("=========================")   
    print("财印兩扶,柱中不見傷煞,行運引至官鄉,大富大貴命也, 月令最佳")  
    print("大忌刑沖破害、傷官七煞、貪合忘官、劫财分福,為破格")
    print("=========================")      
    print("恭喜,有貴人相助!", guan_list)

    # 檢查天福貴人
    if lus[me] in guan_list:
        print("天福貴人:主科名巍峨,官職尊崇,多掌絲綸文翰之美!")

    # 歲德正官
    if gans[0] in guan_list:
        print("大歲德正官!")
    if zhis[0] in guan_list:
        print("小歲德正官!")  
    # 時上正官
    if gans[3] in guan_list:
        print("大時上正官!")
    if zhis[3] in guan_list:
        print("小時上正官!")          


if len(guan_list) == 1:    
    guan_chongs = []
    gui = guan_list[0]
    for item in gans + zhis:
        if item in chongs[gui]:
            guan_chongs.append(item)
    if guan_chongs:
        print("官沖",guan_list)    

    guan_xings = []
    l = list(zhis)
    if gui in l:
        l.remove(gui)
    for item in l:
        if item in xings[gui]:
            guan_xings.append(item)
    if guan_xings:
        print("官刑",guan_xings) 

if zhus[2] in tianyuans:
    print("\n\n天元坐祿:")  
    print("=========================")   
    print('''
    金若遇火,有重權,防禦刺史臣(如庚午、庚寅、庚戌、辛巳、辛未等日)
    水若遇土,入官局,可沾侍郎祿(如壬午、壬戌、癸巳、癸醜、癸未等日)
    木若遇金,主傷衰化煞,為權勢若雷(如甲申、甲戌、乙巳、乙酉、乙醜等日)
    火若遇水,主兵權,為将鎮三邊(如丙申、丙子、丙辰、丁亥、丁醜等日)
    土若遇木,為正祿八座三台福(如戊寅、戊辰、己卯、己未、己亥等日)
    此即白虎持世等格要,日主與官貴相停,偏枯則不成造化,大忌刑沖破害,傷損貴氣,不成格矣。
    如庚午日,坐丁官,喜見甲乙财生官,戊己印生身;忌丙煞雜官,癸水傷官,子沖破午。餘幹例推。
    如果日柱的幹支本身已構成官星,就不大忌諱沖破。
    ''')  

    print("=========================")       
    print(zhus[2])

# 計算五行分數 http://www.131.com.tw/word/b3_2_14.htm

scores = {"金":0, "木":0, "水":0, "火":0, "土":0}

for item in gans:  
    scores[gan5[item]] += 5

for item in list(zhis) + [zhis.month]:  
    for gan in zhi5[item]:
        scores[gan5[gan]] += zhi5[item][gan]

print("\n\n五行分數") 
print("="*60)  
print(scores)
short = min(scores, key=scores.get)
print("\n\n五行缺{}的建議".format(short))    
print("=========================")    
print("{}".format(gan_health[short]))