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

2024-10-03四柱八字68

简介

八字术是一种古老的算命术。它运用阴阳、五行、干支、八卦等理论,把人的出生年月日时转化为八个字,进而推算人的富贵贫贱、祸福吉凶、穷通寿天、名利地位、家庭六亲等方面的情况

八字源自古代的中国,是一种利用天干和地支来准确记录年、月、日、时的方式,由“年干,年支”、“月干,月支”、“日干,日支”、“时干,时支”,共八个干支所组成(共八个字),年、月、日、时的干支组合称为“柱”,形成“年柱”、“月柱”、“日柱”、“时柱”,故八字又称为“四柱”或“四柱八字”。

这种以干支记录时间的方式从夏朝开始就已经开始使用,但直至宋朝的徐子平才将人们出生时的干支八字用来论断人事祸福,因此命理学中的八字命理又称“子平八字学”,以纪念徐子平对八字命理学的贡献。

公历2006年1月28日23:50

农历丙戌年正月初一日子时

八字乙酉年己丑月戊午日壬子时

※八字以“立春”节气为新旧年的交界,丙戌年正月初七辰时(07:27)立春。

公历2006年10月10日10:10

农历丙戌年八月十九日巳时

八字丙戌年戊戌月壬申日乙巳时

帮助

python bazi.py -h
usage: bazi.py [-h] [-g] [-r] [--version] year month day time
positional arguments:
  year        year
  month       month
  day         day
  time        time
optional arguments:
  -h, --help  show this help message and exit
  -g          是否采用公历
  -r          是否为闰月,仅仅使用于农历
  --version   show program's version number and exit

执行

>python bazi.py 1990 2 22  4 -g
日期:
======================================
公历:
        1990年2月22日
农历:
        1990年正月廿七日
八字:
==============================================================================================================
年                             月                             日                             时                           
--------------------------------------------------------------------------------------------------------------
          庚-金                    戊-土                    戊-土                    甲-木
           午                       寅                       午                       寅
午=己土3 丁火5              寅=戊土1 丙火2 甲木5          午=己土3 丁火5              寅=戊土1 丙火2 甲木5
十干冲:
============================================================
('甲', '庚') 相冲
地支自刑:
=========================
午
五行分数
============================================================
{'金': 5, '木': 20, '水': 0, '火': 16, '土': 19}
身体需要注意:胫足、膀胱肾(比如结石)

源码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# CreateDate: 2019-2-21
# -*- coding:utf-8 -*-
import  sxtwl
import argparse
import collections
Gan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
gan5 = {"甲":"木", "乙":"木", "丙":"火", "丁":"火", "戊":"土", "己":"土", 
    "庚":"金", "辛":"金", "壬":"水", "癸":"水"}
gan_health = {
    "金":"筋胸、大肠肺",
    "木":"头肩、肝胆",
    "水":"胫足、膀胱肾(比如结石)",    
    "火":"额齿、小肠心脏",
    "土":"鼻面、脾胃",      
}
Zhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
zhi5 = {"子":{"癸":8}, 
        "丑":{"辛":1,"癸":2, "己":5}, 
        "寅":{"戊":1,"丙":2, "甲":5},
        "卯":{"乙":8}, 
        "辰":{"癸":1,"乙":2, "戊":5}, 
        "巳":{"庚":1,"戊":2, "丙":5}, 
        "午":{"己":3, "丁":5},
        "未":{"乙":1,"丁":2, "己":5}, 
        "申":{"戊":1,"壬":2, "庚":5},
        "酉":{"辛":8}, 
        "戌":{"丁":1,"辛":2, "戊":5}, 
        "亥":{"甲":3, "壬":5}}
ShX = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
numCn = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
Week = ["日", "一", "二", "三", "四", "五", "六"]
jqmc = ["冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑","白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"]
ymc = ["十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" ]
rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
gan_hes = {
    ("甲", "己"): "中正之合 化土",
    ("乙", "庚"): "仁义之合 化金",
    ("丙", "辛"): "丙义之合 化水",
    ("丁", "壬"): "淫慝之合 化木",    
    ("戊", "癸"): "无情之合 化火",    
}
gan_chongs = {
    ("甲", "庚"): "相冲",
    ("乙", "辛"): "相冲",
    ("丙", "壬"): "相冲",
    ("丁", "癸"): "相冲",       
}
zhi_6hes = {
    ("子", "丑"): "化土",
    ("寅", "亥"): "化木",
    ("卯", "戌"): "化火",
    ("辰", "酉"): "化金",    
    ("巳", "申"): "化水",    
    ("午", "未"): "化土",        
}
zhi_3hes = {
    ("申", "子", "辰"): "化水",
    ("巳", "酉", "丑"): "化金",  
    ("寅", "午", "戌"): "化火",       
    ("亥", "卯", "未"): "化木",
}
zhi_huis = {
    ("亥", "子", "丑"): "化水",
    ("寅", "卯", "辰"): "化木",  
    ("巳", "午", "未"): "化火",       
    ("申", "酉", "戌"): "化金",
}
zhi_chongs = {
    ("子", "午"): "相冲",
    ("丑", "未"): "相冲",
    ("寅", "申"): "相冲",
    ("卯", "酉"): "相冲",
    ("辰", "戌"): "相冲",   
    ("巳", "亥"): "相冲",       
}
zhi_poes = {
    ("子", "酉"): "相破",
    ("午", "卯"): "相破",
    ("巳", "申"): "相破",
    ("寅", "亥"): "相破",
    ("辰", "丑"): "相破",   
    ("戌", "未"): "相破",       
}
zhi_poes = {
    ("子", "酉"): "相破",
    ("午", "卯"): "相破",
    ("巳", "申"): "相破",
    ("寅", "亥"): "相破",
    ("辰", "丑"): "相破",   
    ("戌", "未"): "相破",       
}
zhi_haies = {
    ("子", "未"): "相害",
    ("丑", "午"): "相害",
    ("寅", "巳"): "相害",
    ("卯", "辰"): "相害",
    ("申", "亥"): "相害",   
    ("酉", "戌"): "相害",       
}
zhi_xings = {
    ("寅", "巳"): "寅刑巳 无恩之刑",
    ("巳", "申"): "巳刑申 无恩之刑",
    ("申", "寅"): "申刑寅 无恩之刑",
    ("未", "丑"): "未刑丑 持势之刑",
    ("丑", "戌"): "丑刑戌 持势之刑",   
    ("戌", "未"): "戌刑未 持势之刑",  
    ("子", "卯"): "子刑卯 卯刑子 无礼之刑",       
}
zhi_zixings = ['辰', '午', '酉', '亥']
description = '''
'''
parser = argparse.ArgumentParser(description=description,
                                 formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('year', action="store", help=u'year', type=int)
parser.add_argument('month', action="store", help=u'month', type=int)
parser.add_argument('day', action="store", help=u'day', type=int)
parser.add_argument('time', action="store", help=u'time', type=float)    
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('--version', action='version',
                    version='%(prog)s 0.1 Rongzhong xu 2019 02 21')
options = parser.parse_args()
lunar = sxtwl.Lunar();
if options.g:
    day = lunar.getDayBySolar(options.year, options.month, options.day)
else:
    day = lunar.getDayByLunar(options.year, options.month, options.day, options.r)
gz = lunar.getShiGz(day.Lday2.tg, int(options.time))
# 计算甲干相合 
Gans = collections.namedtuple("Gans", "year month day time")
gans = Gans(year=Gan[day.Lyear2.tg], month=Gan[day.Lmonth2.tg], day=Gan[day.Lday2.tg], time=Gan[gz.tg])
Zhis = collections.namedtuple("Zhis", "year month day time")
zhis = Zhis(year=Zhi[day.Lyear2.dz], month=Zhi[day.Lmonth2.dz], day=Zhi[day.Lday2.dz], time=Zhi[gz.dz])
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八字:")
print("="*110)    
print("{:30s}{:30s}{:30s}{:30s}".format('年', "月", "日", "时"))
print("-"*110)
print("{:>11s}-{:<11s}{:>11s}-{:<11s}{:>11s}-{:<11s}{:>11s}-{:<11s}".format(
    gans.year, gan5[gans.year], gans.month, gan5[gans.month],
    gans.day, gan5[gans.day], gans.time, gan5[gans.time],
))
print("{:^24s}{:^24s}{:^24s}{:^24s}".format(*zhis))
for item in zhis:
    out = item + '='
    for gan in zhi5[item]:
        out = out + "{}{}{} ".format(gan, gan5[gan], zhi5[item][gan]) + ""
    print("{:<22s}".format(out), end=' ')
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, '地支相刑')    
flag = True
for item in zhi_zixings:
    if zhis.count(item) > 1:
        if flag:
            print("\n{}:".format("地支自刑"))
            print("=========================")    
            flag = False
        print(item)    
        
# 计算五行分数
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)
print("身体需要注意:{}".format(gan_health[min(scores, key=scores.get)]))

代码在更新中,参见:

相关文章

國印華蓋童子是什麼意思

国印华盖童子的含义国印华盖童子是八字命理学中的一个概念,涉及到了八字中的几个特定元素:国印、华盖和童子煞。下面是对这些概念的详细解释:国印国印在八字中通常被视为贵人星,象征着权威和诚信。拥有国印的人,通常被认为是诚实可靠,严守规则,公正公平,且具有良好的社会道德和责任感。在某些命理分析中,带有国印的...

【圖】男人顴骨高代表什麼 七種男人顴骨高面相解說

【圖】男人顴骨高代表什麼 七種男人顴骨高面相解說

男人顴骨高代表什麼?在我國,從古至今,男人在社會和家庭中都占有著很重要的角色,責任和能力很重要。在博大精深的面相學中,顴骨代表著人的權力欲,控制欲,占有欲…… 男人顴骨高代表什麼?在我國,從古至今,男人在社會和家庭中都占有著很重要的角色,責任和能力很重要。在博大精深的面相學中,顴骨代表著人的權力欲...

四柱推命

四柱推命入门  四柱是指人出生的时间、即年、月、日、时。用天干和地支各出一字相配合分别来表示出生的年、月、日、时,如甲子年、丙寅月、辛丑日、壬寅时等。每柱两字,四柱共八字,所以算命又称“批八字”。依照天干、地支内涵阴阳五行属性之相生、相克的关系,推测人的休咎祸福。  四柱推命这类算命方法之所以又...

婚姻風水不好怎麼辦_一定要這樣化解

每個人都會經歷婚姻,這是人生中一輩子的大事,因為找到正確的一個人真的很難,尤其是在我們的生活中可以看到很多離婚的例子,一言不合就離婚,難道當初曾經相愛都是假的嗎?他們或許受到了婚姻風水的影響而導致衝動引起的後果,那麼如果是婚姻風水不好的話,我們應該怎樣化解呢?讓小編來給你說說吧。 化解婚姻煞氣...

根據八字分析能否嫁得好

婚姻並不是每個女人最終的目的,但是不可否認婚姻十分重要,婚姻能夠改變每個女人的命運,同時,還是每個人的轉折點,要了解自己能否嫁得好,就可根據八字分析能否嫁得好。 一、八字命理中出現“正官、正財”或“正官、偏財”的組合 在女人坤造八字中,女人夫君主以正官為主。當坤造八字中出現正官、正財或偏財組合...

三命通會是八字的總匯之作,命理探源是八字的研究之作

在线播放列表 《三命通会》一书收入《四库全书》之中,为明朝的万明英所着。此书的总体结构,与《渊海子平》的创作思路十分接近,我们甚至可以说,《三命通会》是《渊海子平》的完善和提高。《三命通会》不仅收录了前人有关八字的各种理论和方法,将它们整理分类,而且努力从理论上来证明八字方法的合理性。 例如有关...

八字合婚看情侶八字合不合,從命理看男女分手能否復合

八字合婚看情侶八字合不合,從命理看男女分手能否復合

八字合婚免費測試 在線合八字八字婚姻中,可以從八字中看出合婚是否合襯。那麼你想知道八字合婚好不好嗎?你了解八字婚姻多少呢?不妨隨大師一起了解下吧。 怎麼看八字合婚合不合 1、分析兩人的婚姻運勢 命理學說認為,婚姻圓滿的決定因素,就是男女雙方自身的生辰八字。 合婚分析男女二人的八字,主要是看二人八字中...

女命坐羊刃暗藏傷官,感情不順利

坐阳刃代表婚宫为比劫,显得不太有情义,若女命坐支为伤官或暗藏伤官,一般婚姻不顺或者婚姻较迟。即使八字组合可有些富贵,但不代表感情运好,发财与感情是两回事,下面举一例,命主目前未婚。 坤造: 辛 戊 癸 壬 未 戌 亥 戌 日空子、丑。寒露后11天出生。 大运: 7己亥17庚子27辛丑37壬寅47癸...

男女八字配對-男女生辰八字婚姻

作为喜欢研究风水的的朋友,肯定最想知道男女八字配对这样的问题,今天无心风水赖氏算命网赖氏算命赖氏算命网小编就带一起探寻风水知识的世界,同时一起来探讨下男女八字配对 说实话不要见怪。两个人的婚姻看匹配,重点是看夫妻双方的工作状态,而在另一侧的五行无论在角色的状态是什么存在,不能互相帮助。 简单,你匹配...

命理學是科學還是迷信 為什麼不能算命

命理学是科学还是迷信: 1、其实这是件很容易见想明白的事情,命理学的这一套法则流传了几千年,而真正研究它的,都是第一流聪明人,既然五千年来第一流的聪明人都在研究它,即算它能骗得了人,那也说明它自有一番道理。 2、命理学在普通人面前再没有什么秘密可言的时候,如果那时候再认定它是迷信,相信所有人...

北京八字算命大師,婚姻算命最準的大師?

北京八字算命大師,婚姻算命最準的大師?

大家好,關於北京婚姻算命大師很多朋友都還不太明白,不知道是什麼意思,那麼今天我就來為大家分享一下關於婚姻在線算命的相關知識,文章篇幅可能較長,還望大家耐心閱讀,希望本篇文章對各位有所幫助! 北京八字算命大師,婚姻算命最準的大師? 周易八字算命特別是算婚姻 ,誰都沒我有發言權啊。北京的聖...

十神在四柱不同位置的吉兇論斷與詳解!

对于易经的爱好者朋友,尤其是学八字的朋友,十二长生是必须理解和记住的要素。十二长生表,由十天干和十二地支构成,十二地支代表着十二个月份;用来记录各天干在不同节令的生、旺、衰、病、死;也成为八字分析中判断旺衰的一个重要条件;大家一定在很多书籍资料中见过如下的表格: 这实在太难理解与记忆了!我认为...

正緣桃花是什麼意思?

文/龍吟師傅 你是不是經經常會有這樣的困擾,明明自己身邊也不缺桃花,卻總是沒辦法遇到一個令人滿意的桃花。在命理上,這樣的桃花稱為正桃花,或者正緣。下面龍吟師傅就為大家詳細講解。 八字命理學上,正緣星臨桃花煞或紅艷桃花叫正緣桃花。命帶正緣桃花,多系“郎才女貌”、“才子配佳人”或因與正緣的風流情事...

取名字大全生辰八字恭敬乖巧素美純雅-可愛點

取名字大全生辰八字恭敬乖巧素美純雅-可愛點

說到女孩取名,一個聰慧美麗的女孩名字是所有父母所期望的。大家都知道取名並不是一件容易的事,但是也不用把它想得很復雜,雖然要結合多方面的因素,如字音、字義、八字五行等等,可以參考以下取名字大全生辰八字的內容~1、【宛顏】在“宛顏”這個名[文]字中,“宛”是一[章]個很溫柔的字,一[來]般指婉轉、婉約,...

女命八字以什麼好 女命比較好的八字

女命八字以什麼好 女命比較好的八字

福氣深厚的女命八字 提起女命極好八字福澤深厚,大家都知道,有人問配偶極富的女命八字是什麼?另外,還有人想問女命八字,你知道這是怎麼回事?其實什麼八字的女人命好,下面就一起來看看配偶極富的女命八字是什麼?希望能夠幫助到大家! 女命極好八字福澤深厚 1、女命極好八字福澤深厚:配偶極富的女命八字是什麼?...