├── shipan ├── __init__.py ├── guati.py ├── guaticomment.json └── shipan.py ├── shensha ├── __init__.py ├── ShenShaDialog.py └── shensha.py ├── dalurenCalendar ├── __init__.py ├── lunar │ ├── __init__.py │ ├── mathutil.py │ ├── elp82.py │ ├── elp82_const.py │ └── iau1980.py └── util │ ├── __init__.py │ ├── julianday.py │ └── util.py ├── .gitignore ├── README.md ├── main.py ├── requirements.txt ├── test ├── test2.py ├── test.py └── test天祸.py ├── help.py ├── common ├── moonMansions.py └── __init__.py ├── help └── help.html └── DaLuRenWindow.py /shipan/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /shensha/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dalurenCalendar/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dalurenCalendar/lunar/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *pyc 2 | .project 3 | .pydevproject 4 | __pycache__ 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 说明 2 | dalurenCalendar 的代码转写自deepin linux的代码,添加了部分函数和修改了部分代码 -------------------------------------------------------------------------------- /dalurenCalendar/util/__init__.py: -------------------------------------------------------------------------------- 1 | from dalurenCalendar.util.util import * -------------------------------------------------------------------------------- /dalurenCalendar/lunar/mathutil.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | 4 | # Mod2Pi 把角度限制在[0, 2π]之间 5 | def Mod2Pi(r): 6 | while r < 0: 7 | r += math.pi * 2 8 | 9 | while r > 2*math.pi: 10 | r -= math.pi * 2 11 | return r -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from PyQt5 import QtWidgets 3 | from DaLuRenWindow import DaLuRenWindow 4 | 5 | # Create application 6 | app = QtWidgets.QApplication(sys.argv) 7 | window = DaLuRenWindow() 8 | window.show() 9 | app.exec() 10 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | astropy==3.0.4 2 | eacal==0.0.3 3 | ganzhiwuxin==0.1 4 | jdcal==1.4 5 | numpy==1.15.2 6 | prettytable==0.7.2 7 | pyephem==3.7.6.0 8 | PyQt5==5.11.2 9 | PyQt5-sip==4.19.12 10 | pytz==2018.5 11 | regex==2018.8.29 12 | -------------------------------------------------------------------------------- /test/test2.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import math 3 | from dalurenCalendar.lunar.elp82 import GetMoonEclipticLongitudeEC 4 | from dalurenCalendar.util.julianday import GetJulianDayFromDateTime 5 | 6 | t = datetime.datetime(2018, 9, 26, 12, 0, 0) 7 | t -= datetime.timedelta(hours=8) 8 | jd = GetJulianDayFromDateTime(t) 9 | longitude = GetMoonEclipticLongitudeEC(jd) 10 | longitude = math.degrees(longitude) 11 | print(jd) 12 | print(longitude) -------------------------------------------------------------------------------- /dalurenCalendar/util/julianday.py: -------------------------------------------------------------------------------- 1 | from astropy.time import Time 2 | from dalurenCalendar.util import GetDeltaT 3 | 4 | # GetJulianDayFromDateTime 将 datetime.datetime 转换为儒略日 5 | # 其中包含了 UTC 到 TT 的转换 6 | # 传入参数为UTC时间 7 | # 返回力学时的儒略日,浮点数 8 | def GetJulianDayFromDateTime(t): 9 | # t=datetime.datetime(2018,9,26,12,0,0) 10 | jd=Time(t).jd 11 | yy = t.year 12 | mm = t.month 13 | # yy, mm, dd = GetDateFromJulianDay(jd) 14 | # UTC -> TT 15 | jd += GetDeltaT(yy, mm) / 86400 16 | return jd 17 | -------------------------------------------------------------------------------- /test/test.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from ganzhiwuxin import * 3 | from shipan.shipan import ShiPan 4 | from common import GetLi 5 | # a = MinGPan(2018, 6, 15,13, 22, 7, "申", "未", True, "abc") 6 | t = datetime.datetime.now() 7 | for k in range(0, 50): 8 | t0 = t + datetime.timedelta(days=k) 9 | for i in range(0, 12): 10 | __月将 = GetLi(t0.year, t0.month, t0.day, t0.hour, t0.minute, t0.second)[4] 11 | a = ShiPan(t0.year, t0.month, t0.day,20, 22, 7, str(__月将), str(支("子") + i), True, "abc",0,2018) 12 | if "二烦卦" in a.格局: 13 | print("{} {}".format(t0, str(支("子") + i))) -------------------------------------------------------------------------------- /help.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtWidgets 2 | from PyQt5 import QtCore 3 | from PyQt5 import QtGui 4 | 5 | 6 | class HelpDialog(QtWidgets.QDialog): 7 | def __init__(self, parent=None): 8 | super().__init__(parent) 9 | # QtWidgets.QDialog(self,parent) 10 | self.setWindowTitle("帮助") 11 | self.setWindowFlag(QtCore.Qt.WindowMinMaxButtonsHint) 12 | self.resize(700, 500) 13 | guaTiLayout = QtWidgets.QVBoxLayout() 14 | # self.layout=helpLayout 15 | self.setLayout(guaTiLayout) 16 | self.guaTiTextBrowser = QtWidgets.QTextBrowser() 17 | guaTiLayout.addWidget(self.guaTiTextBrowser) 18 | with open('help/help.html', 'r') as f: 19 | helpStrings = f.read() 20 | guaTiFont = QtGui.QFont() 21 | guaTiFont.setPixelSize(18) 22 | self.guaTiTextBrowser.setFont(guaTiFont) 23 | self.guaTiTextBrowser.setHtml(helpStrings) -------------------------------------------------------------------------------- /test/test天祸.py: -------------------------------------------------------------------------------- 1 | import eacal 2 | from ganzhiwuxin import * 3 | from shipan.shipan import ShiPan 4 | from common import GetLi 5 | 6 | y = 2018 7 | # t = datetime.datetime.now() 8 | for k in range(0, 50): 9 | c = eacal.EACal(zh_s=True) 10 | year = y + k 11 | liChun = c.get_specified_solar_term(year, 0)[2].replace(tzinfo=None) 12 | liXiao = c.get_specified_solar_term(year, 6)[2].replace(tzinfo=None) 13 | liQiu = c.get_specified_solar_term(year, 12)[2].replace(tzinfo=None) 14 | liDong = c.get_specified_solar_term(year, 18)[2].replace(tzinfo=None) 15 | # t0 = t + datetime.timedelta(days=k) 16 | for j in [liChun, liXiao, liQiu, liDong]: 17 | __月将 = GetLi(j.year, j.month, j.day, j.hour, j.minute, j.second)[4] 18 | for i in range(0, 12): 19 | a = ShiPan(j.year, j.month, j.day, 20, 22, 7, str(__月将), str(支("子") + i), True, "abc", 0, 2018) 20 | if "天祸卦" in a.格局: 21 | print("{} {}".format(j, str(支("子") + i))) 22 | -------------------------------------------------------------------------------- /common/moonMansions.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import math 3 | from ganzhiwuxin.ganzhiwuxin import 支 4 | from dalurenCalendar.lunar.elp82 import GetMoonEclipticLongitudeEC 5 | from dalurenCalendar.util.julianday import GetJulianDayFromDateTime 6 | 7 | 8 | def getMoonMansion(y, m, d, h, minu, sec): 9 | t = datetime.datetime(y, m, d, h, minu, sec) 10 | t -= datetime.timedelta(hours=8) 11 | jd = GetJulianDayFromDateTime(t) 12 | longitude = GetMoonEclipticLongitudeEC(jd) 13 | longitude = math.degrees(longitude) 14 | DEGREES = 30 15 | if longitude < DEGREES: 16 | return 支("戌") 17 | if longitude < DEGREES*2: 18 | return 支("酉") 19 | if longitude < DEGREES*3: 20 | return 支("申") 21 | if longitude < DEGREES*4: 22 | return 支("未") 23 | if longitude < DEGREES*5: 24 | return 支("午") 25 | if longitude < DEGREES*6: 26 | return 支("巳") 27 | if longitude < DEGREES*7: 28 | return 支("辰") 29 | if longitude < DEGREES*8: 30 | return 支("卯") 31 | if longitude < DEGREES*9: 32 | return 支("寅") 33 | if longitude < DEGREES*10: 34 | return 支("丑") 35 | if longitude < DEGREES*11: 36 | return 支("子") 37 | return 支("亥") -------------------------------------------------------------------------------- /help/help.html: -------------------------------------------------------------------------------- 1 |
2 |
判断
3 | 13 |
14 |
15 |
连茹课
16 |
17 |
顺连茹三奇十二课
18 | 32 |
33 |
34 |
逆连茹三奇十二课
35 | 49 |
50 |
51 |
天将取象
52 | 58 |
59 |
-------------------------------------------------------------------------------- /shensha/ShenShaDialog.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtWidgets 2 | from PyQt5 import QtCore 3 | from PyQt5 import QtGui 4 | from shensha import shensha 5 | 6 | 7 | class ShenShaDialog(QtWidgets.QDialog): 8 | def __init__(self, parent=None, shiPan=None): 9 | super().__init__(parent) 10 | self.setWindowTitle("神煞") 11 | self.setWindowFlag(QtCore.Qt.WindowMinMaxButtonsHint) 12 | self.resize(700, 500) 13 | guaTiLayout = QtWidgets.QVBoxLayout() 14 | # self.layout=helpLayout 15 | self.setLayout(guaTiLayout) 16 | self.guaTiTextBrowser = QtWidgets.QTextBrowser() 17 | guaTiLayout.addWidget(self.guaTiTextBrowser) 18 | guaTiFont = QtGui.QFont() 19 | guaTiFont.setPixelSize(18) 20 | self.guaTiTextBrowser.setFont(guaTiFont) 21 | 22 | if shiPan is None: 23 | self.guaTiTextBrowser.setHtml("查询神煞,请先排盘") 24 | return 25 | 26 | shenShaJson = {"年": {}, "月": {}, "日": {}} 27 | shenShaModules = shensha 28 | shenShaFuns = [] 29 | for attr in (a for a in dir(shenShaModules) if a.startswith('do_')): 30 | callback = getattr(shenShaModules, attr) 31 | shenShaFuns.append(callback) 32 | for fun in shenShaFuns: 33 | fun(shiPan, shenShaJson) 34 | guaTiStrings = "" 35 | for key in shenShaJson: 36 | s0 = None 37 | count = 0 38 | for sh in shenShaJson[key]: 39 | if s0 is None: 40 | s0 = '{}: {}'.format(sh, shenShaJson[key][sh]) 41 | else: 42 | if count % 8 == 0: 43 | s0 = '{}
{}: {}'.format(s0, sh, shenShaJson[key][sh]) 44 | else: 45 | s0 = '{}    {}: {}'.format(s0, sh, shenShaJson[key][sh]) 46 | # if count == 7: 47 | # s0 = "{}
".format(s0) 48 | count = count + 1 49 | guaTiStrings = "{}
{}
{}
".format(guaTiStrings, key, s0) 50 | self.guaTiTextBrowser.setText(guaTiStrings) -------------------------------------------------------------------------------- /dalurenCalendar/lunar/elp82.py: -------------------------------------------------------------------------------- 1 | import math 2 | from dalurenCalendar.util import GetJulianCentury 3 | from dalurenCalendar.lunar.mathutil import Mod2Pi 4 | from dalurenCalendar.lunar.elp82_const import MoonLongitude 5 | from dalurenCalendar.lunar.iau1980 import CalcEarthLongitudeNutation 6 | 7 | 8 | # 参数 T 儒略世纪数 9 | # 返回 弧度 10 | def GetMoonEclipticParameter(T): 11 | T2 = T * T 12 | T3 = T2 * T 13 | T4 = T3 * T 14 | 15 | # 月球平黄经 16 | Lp = Mod2Pi(math.radians(218.3164591 + 481267.88134236 * T - 0.0013268 * T2 + T3 / 538841.0 - T4 / 65194000.0)) 17 | 18 | # 月日距角 19 | D = Mod2Pi(math.radians(297.8502042 + 445267.1115168 * T - 0.0016300 * T2 + T3 / 545868.0 - T4 / 113065000.0)) 20 | 21 | # 太阳平近点角 22 | M = Mod2Pi(math.radians(357.5291092 + 35999.0502909 * T - 0.0001536 * T2 + T3 / 24490000.0)) 23 | 24 | # 月亮平近点角 25 | Mp = Mod2Pi(math.radians(134.9634114 + 477198.8676313 * T + 0.0089970 * T2 + T3 / 69699.0 - T4 / 14712000.0)) 26 | 27 | # 月球经度参数(到升交点的平角距离) 28 | F = Mod2Pi(math.radians(93.2720993 + 483202.0175273 * T - 0.0034029 * T2 - T3 / 3526000.0 + T4 / 863310000.0)) 29 | 30 | # 反映地球轨道偏心率变化的辅助参量 31 | E = 1 - 0.002516 * T - 0.0000074 * T2 32 | return Lp, D, M, Mp, F, E 33 | 34 | 35 | # 计算月球地心黄经周期项的和 36 | def CalcMoonECLongitudePeriodic(D, M, Mp, F, E): 37 | EI = 0 38 | for l in MoonLongitude: 39 | theta = l.D * D + l.M * M + l.Mp * Mp + l.F * F 40 | EI += l.EiA * math.sin(theta) * math.pow(E, abs(l.M)) 41 | 42 | # fmt.Printf("EI = %f\n", EI) 43 | return EI 44 | 45 | 46 | # 计算金星摄动,木星摄动以及地球扁率摄动对月球地心黄经的影响, T 是儒略世纪数,Lp和F单位是弧度 47 | # A1 = 119.75 + 131.849 * T (4.13式) 48 | # A2 = 53.09 + 479264.290 * T (4.14式) 49 | # A3 = 313.45 + 481266.484 * T (4.15式) 50 | def CalcMoonLongitudePerturbation(T, Lp, F): 51 | A1 = Mod2Pi(math.radians(119.75 + 131.849 * T)) 52 | A2 = Mod2Pi(math.radians(53.09 + 479264.290 * T)) 53 | 54 | return 3958.0 * math.sin(A1) + 1962.0 * math.sin(Lp - F) + 318.0 * math.sin(A2) 55 | 56 | 57 | # 计算月球地心黄经 58 | # jd 儒略日 59 | # 返回 弧度 60 | def GetMoonEclipticLongitudeEC(jd): 61 | T = GetJulianCentury(jd) 62 | Lp, D, M, Mp, F, E = GetMoonEclipticParameter(T) 63 | 64 | # 计算月球地心黄经周期项 65 | EI = CalcMoonECLongitudePeriodic(D, M, Mp, F, E) 66 | 67 | # 修正金星,木星以及地球扁率摄动 68 | EI += CalcMoonLongitudePerturbation(T, Lp, F) 69 | 70 | longitude = Lp + math.radians(EI / 1000000.0) 71 | 72 | # 计算天体章动干扰 73 | longitude += CalcEarthLongitudeNutation(T) 74 | return longitude 75 | -------------------------------------------------------------------------------- /dalurenCalendar/util/util.py: -------------------------------------------------------------------------------- 1 | J2000 = 2451545.0 2 | 3 | # // GetJulianCentury 计算儒略世纪数 4 | def GetJulianCentury(jd): 5 | # 100年的日数 6 | DaysOfCentury = 36525.0 7 | return (jd - J2000) / DaysOfCentury 8 | 9 | 10 | # GetDeltaT 计算地球时和UTC的时差,算法摘自 11 | # http://eclipse.gsfc.nasa.gov/SEhelp/deltatpoly2004.html NASA网站 12 | # ∆T = TT - UT 此算法在-1999年到3000年有效 13 | # 传入参数为整数 14 | # 返回浮点数 15 | def GetDeltaT(year, month): 16 | y = year + (month-0.5)/12 17 | if year < -500: 18 | u = (year - 1820) / 100 19 | return -20 + 32*u*u 20 | 21 | if year < 500: 22 | u = y / 100 23 | u2 = u * u 24 | u3 = u2 * u 25 | u4 = u3 * u 26 | u5 = u4 * u 27 | u6 = u5 * u 28 | return 10583.6 - 1014.41*u + 33.78311*u2 - 5.952053*u3 - 0.1798452*u4 + 0.022174192*u5 + 0.0090316521*u6 29 | 30 | if year < 1600: 31 | u = (y - 1000) / 100 32 | u2 = u * u 33 | u3 = u2 * u 34 | u4 = u3 * u 35 | u5 = u4 * u 36 | u6 = u5 * u 37 | return 1574.2 - 556.01*u + 71.23472*u2 + 0.319781*u3 - 0.8503463*u4 - 0.005050998*u5 + 0.0083572073*u6 38 | 39 | if year < 1700: 40 | t = y - 1600 41 | t2 = t * t 42 | t3 = t2 * t 43 | return 120 - 0.9808*t - 0.01532*t2 + t3/7129 44 | 45 | if year < 1800: 46 | t = y - 1700 47 | t2 = t * t 48 | t3 = t2 * t 49 | t4 = t3 * t 50 | return 8.83 + 0.1603*t - 0.0059285*t2 + 0.00013336*t3 - t4/1174000 51 | 52 | if year < 1860: 53 | t = y - 1800 54 | t2 = t * t 55 | t3 = t2 * t 56 | t4 = t3 * t 57 | t5 = t4 * t 58 | t6 = t5 * t 59 | t7 = t6 * t 60 | return 13.72 - 0.332447*t + 0.0068612*t2 + 0.0041116*t3 - 0.00037436*t4 + 0.0000121272*t5 - 0.0000001699*t6 + 0.000000000875*t7 61 | 62 | if year < 1900: 63 | t = y - 1860 64 | t2 = t * t 65 | t3 = t2 * t 66 | t4 = t3 * t 67 | t5 = t4 * t 68 | return 7.62 + 0.5737*t - 0.251754*t2 + 0.01680668*t3 - 0.0004473624*t4 + t5/233174 69 | 70 | if year < 1920: 71 | t = y - 1900 72 | t2 = t * t 73 | t3 = t2 * t 74 | t4 = t3 * t 75 | return -2.79 + 1.494119*t - 0.0598939*t2 + 0.0061966*t3 - 0.000197*t4 76 | 77 | if year < 1941: 78 | t = y - 1920 79 | t2 = t * t 80 | t3 = t2 * t 81 | return 21.20 + 0.84493*t - 0.076100*t2 + 0.0020936*t3 82 | 83 | if year < 1961: 84 | t = y - 1950 85 | t2 = t * t 86 | t3 = t2 * t 87 | return 29.07 + 0.407*t - t2/233 + t3/2547 88 | 89 | if year < 1986: 90 | t = y - 1975 91 | t2 = t * t 92 | t3 = t2 * t 93 | return 45.45 + 1.067*t - t2/260 - t3/718 94 | 95 | if year < 2005: 96 | t = y - 2000 97 | t2 = t * t 98 | t3 = t2 * t 99 | t4 = t3 * t 100 | t5 = t4 * t 101 | return 63.86 + 0.3345*t - 0.060374*t2 + 0.0017275*t3 + 0.000651814*t4 + 0.00002373599*t5 102 | 103 | if year < 2050: 104 | t = y - 2000 105 | t2 = t * t 106 | return 62.92 + 0.32217*t + 0.005589*t2 107 | 108 | if year < 2150: 109 | u = (y - 1820) / 100 110 | u2 = u * u 111 | return -20 + 32*u2 - 0.5628*(2150-y) 112 | 113 | u = (y - 1820) / 100 114 | u2 = u * u 115 | return -20 + 32*u2 -------------------------------------------------------------------------------- /dalurenCalendar/lunar/elp82_const.py: -------------------------------------------------------------------------------- 1 | # 月地心黄经系数 2 | class MoonEclipticLongitudeCoeff(): 3 | def __init__(self, D, M, Mp, F, EiA, ErA): 4 | self.D = D 5 | self.M = M 6 | self.Mp = Mp 7 | self.F = F 8 | self.EiA = EiA 9 | self.ErA = ErA 10 | 11 | 12 | # 月球黄经周期项(ΣI)及距离(Σr). 13 | # 黄经单位:0.000001度,距离单位:0.001千米. 14 | # -------------------------------------------------- 15 | # 角度的组合系数 ΣI的各项振幅A Σr的各项振幅A 16 | # D M M' F (正弦振幅) (余弦振幅) 17 | # -------------------------------------------------- 18 | 19 | MoonLongitude = [ 20 | MoonEclipticLongitudeCoeff(0, 0, 1, 0, 6288744, -20905355), 21 | MoonEclipticLongitudeCoeff(2, 0, -1, 0, 1274027, -3699111), 22 | MoonEclipticLongitudeCoeff(2, 0, 0, 0, 658314, -2955968), 23 | MoonEclipticLongitudeCoeff(0, 0, 2, 0, 213618, -569925), 24 | MoonEclipticLongitudeCoeff(0, 1, 0, 0, -185116, 48888), 25 | MoonEclipticLongitudeCoeff(0, 0, 0, 2, -114332, -3149), 26 | MoonEclipticLongitudeCoeff(2, 0, -2, 0, 58793, 246158), 27 | MoonEclipticLongitudeCoeff(2, -1, -1, 0, 57066, -152138), 28 | MoonEclipticLongitudeCoeff(2, 0, 1, 0, 53322, -170733), 29 | MoonEclipticLongitudeCoeff(2, -1, 0, 0, 45758, -204586), 30 | MoonEclipticLongitudeCoeff(0, 1, -1, 0, -40923, -129620), 31 | MoonEclipticLongitudeCoeff(1, 0, 0, 0, -34720, 108743), 32 | MoonEclipticLongitudeCoeff(0, 1, 1, 0, -30383, 104755), 33 | MoonEclipticLongitudeCoeff(2, 0, 0, -2, 15327, 10321), 34 | MoonEclipticLongitudeCoeff(0, 0, 1, 2, -12528, 0), 35 | MoonEclipticLongitudeCoeff(0, 0, 1, -2, 10980, 79661), 36 | MoonEclipticLongitudeCoeff(4, 0, -1, 0, 10675, -34782), 37 | MoonEclipticLongitudeCoeff(0, 0, 3, 0, 10034, -23210), 38 | MoonEclipticLongitudeCoeff(4, 0, -2, 0, 8548, -21636), 39 | MoonEclipticLongitudeCoeff(2, 1, -1, 0, -7888, 24208), 40 | MoonEclipticLongitudeCoeff(2, 1, 0, 0, -6766, 30824), 41 | MoonEclipticLongitudeCoeff(1, 0, -1, 0, -5163, -8379), 42 | MoonEclipticLongitudeCoeff(1, 1, 0, 0, 4987, -16675), 43 | MoonEclipticLongitudeCoeff(2, -1, 1, 0, 4036, -12831), 44 | MoonEclipticLongitudeCoeff(2, 0, 2, 0, 3994, -10445), 45 | MoonEclipticLongitudeCoeff(4, 0, 0, 0, 3861, -11650), 46 | MoonEclipticLongitudeCoeff(2, 0, -3, 0, 3665, 14403), 47 | MoonEclipticLongitudeCoeff(0, 1, -2, 0, -2689, -7003), 48 | MoonEclipticLongitudeCoeff(2, 0, -1, 2, -2602, 0), 49 | MoonEclipticLongitudeCoeff(2, -1, -2, 0, 2390, 10056), 50 | MoonEclipticLongitudeCoeff(1, 0, 1, 0, -2348, 6322), 51 | MoonEclipticLongitudeCoeff(2, -2, 0, 0, 2236, -9884), 52 | MoonEclipticLongitudeCoeff(0, 1, 2, 0, -2120, 5751), 53 | MoonEclipticLongitudeCoeff(0, 2, 0, 0, -2069, 0), 54 | MoonEclipticLongitudeCoeff(2, -2, -1, 0, 2048, -4950), 55 | MoonEclipticLongitudeCoeff(2, 0, 1, -2, -1773, 4130), 56 | MoonEclipticLongitudeCoeff(2, 0, 0, 2, -1595, 0), 57 | MoonEclipticLongitudeCoeff(4, -1, -1, 0, 1215, -3958), 58 | MoonEclipticLongitudeCoeff(0, 0, 2, 2, -1110, 0), 59 | MoonEclipticLongitudeCoeff(3, 0, -1, 0, -892, 3258), 60 | MoonEclipticLongitudeCoeff(2, 1, 1, 0, -810, 2616), 61 | MoonEclipticLongitudeCoeff(4, -1, -2, 0, 759, -1897), 62 | MoonEclipticLongitudeCoeff(0, 2, -1, 0, -713, -2117), 63 | MoonEclipticLongitudeCoeff(2, 2, -1, 0, -700, 2354), 64 | MoonEclipticLongitudeCoeff(2, 1, -2, 0, 691, 0), 65 | MoonEclipticLongitudeCoeff(2, -1, 0, -2, 596, 0), 66 | MoonEclipticLongitudeCoeff(4, 0, 1, 0, 549, -1423), 67 | MoonEclipticLongitudeCoeff(0, 0, 4, 0, 537, -1117), 68 | MoonEclipticLongitudeCoeff(4, -1, 0, 0, 520, -1571), 69 | MoonEclipticLongitudeCoeff(1, 0, -2, 0, -487, -1739), 70 | MoonEclipticLongitudeCoeff(2, 1, 0, -2, -399, 0), 71 | MoonEclipticLongitudeCoeff(0, 0, 2, -2, -381, -4421), 72 | MoonEclipticLongitudeCoeff(1, 1, 1, 0, 351, 0), 73 | MoonEclipticLongitudeCoeff(3, 0, -2, 0, -340, 0), 74 | MoonEclipticLongitudeCoeff(4, 0, -3, 0, 330, 0), 75 | MoonEclipticLongitudeCoeff(2, -1, 2, 0, 327, 0), 76 | MoonEclipticLongitudeCoeff(0, 2, 1, 0, -323, 1165), 77 | MoonEclipticLongitudeCoeff(1, 1, -1, 0, 299, 0), 78 | MoonEclipticLongitudeCoeff(2, 0, 3, 0, 294, 0), 79 | MoonEclipticLongitudeCoeff(2, 0, -1, -2, 0, 8752), 80 | ] 81 | -------------------------------------------------------------------------------- /common/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import datetime 3 | import eacal 4 | from ganzhiwuxin import * 5 | 6 | DB = os.path.dirname(os.path.realpath(__file__)) + '/data/lifa.db' 7 | DiZHiList = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"] 8 | 9 | 10 | def GetShiChen(h): 11 | ''' 12 | int((h+1)/2)+1 可以得到时辰数 13 | 当h=23,得到13,即第二日子时 14 | ''' 15 | s = (h + 1) // 2 + 1 16 | if s == 13: 17 | s = 1 18 | return 支(s) 19 | 20 | 21 | # 取得占日的历法数据 22 | # 返回 四柱 月将 23 | def GetLi(y, m, d, h, minu, sec): 24 | timeString = "{0}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}".format( 25 | y, m, d, h, minu, sec) 26 | 27 | 占时Time = datetime.datetime.strptime(timeString, "%Y-%m-%d %H:%M:%S") 28 | 前一节Time = None 29 | 前一节Num = None 30 | 后一节Time = None 31 | 后一节Num = None 32 | c = eacal.EACal(zh_s=True) 33 | for x in c.get_annual_solar_terms(y): 34 | if x[1] % 2 == 0: 35 | 前一节Time = 后一节Time 36 | 后一节Time = x[2].replace(tzinfo=None) 37 | 前一节Num = 后一节Num 38 | 后一节Num = x[1] 39 | if 前一节Time is not None and 后一节Time is not None: 40 | if 占时Time >= 前一节Time and 占时Time <= 后一节Time: 41 | break 42 | 气List = c.get_specified_solar_term(y, 前一节Num + 1) 43 | 气Time = 气List[2].replace(tzinfo=None) 44 | 45 | 气 = "{} {}".format(气List[0], 46 | datetime.datetime.strftime(气List[2], 47 | "%Y-%m-%d %H:%M:%S")) 48 | # 气 = "{} {}".format(气List[0], 气List[2].replace(tzinfo=None)) 49 | 节 = c.get_specified_solar_term(y, 前一节Num)[0] 50 | 节 = "{} {}".format(节, datetime.datetime.strftime(前一节Time, 51 | "%Y-%m-%d %H:%M:%S")) 52 | 53 | __年干支, __月干支, __日干支 = c.get_cycle_ymd(datetime.datetime(y, m, d)) 54 | 年柱 = 干支(干(__年干支[0]), 支(__年干支[1])) 55 | 月柱 = 干支(干(__月干支[0]), 支(__月干支[1])) 56 | 日柱 = 干支(干(__日干支[0]), 支(__日干支[1])) 57 | 58 | for i in ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]: 59 | if 月柱.支.六合(支(i)): 60 | 月将=支(i) 61 | break 62 | if 占时Time < 气Time: 63 | 月将=月将 + 1 64 | 65 | 时辰 = GetShiChen(h) 66 | if 日柱.干 == 干("甲") or 日柱.干 == 干("己"): 67 | 子时天干 = 干("甲") 68 | if 日柱.干 == 干("乙") or 日柱.干 == 干("庚"): 69 | 子时天干 = 干("丙") 70 | if 日柱.干 == 干("丙") or 日柱.干 == 干("辛"): 71 | 子时天干 = 干("戊") 72 | if 日柱.干 == 干("丁") or 日柱.干 == 干("壬"): 73 | 子时天干 = 干("庚") 74 | if 日柱.干 == 干("戊") or 日柱.干 == 干("癸"): 75 | 子时天干 = 干("壬") 76 | 时柱 = 干支(子时天干 + (时辰 - 支('子')), 时辰) 77 | if 时辰 == 支("子"): 78 | 日柱 = 日柱 + 1 79 | return [年柱, 月柱, 日柱, 时柱, 月将, 节, 气] 80 | 81 | 82 | class 旺衰(): 83 | def __init__(self, w): 84 | self.ws = ["旺", "相", "休", "囚", "死"] 85 | if w not in self.ws: 86 | raise ValueError('{} 值错误'.format(w)) 87 | self.__n = self.ws.index(w) 88 | 89 | @property 90 | def num(self): 91 | return self.__n 92 | 93 | def __str__(self): 94 | return self.ws[self.__n] 95 | 96 | def __eq__(self, other): 97 | if not isinstance(other, 旺衰): 98 | raise ValueError('{} 不是旺衰'.format(other)) 99 | return self.num == other.num 100 | 101 | 102 | def Get旺衰(yl, wx): 103 | if not isinstance(yl, 支): 104 | raise ValueError('{} 不是支'.format(yl)) 105 | if not isinstance(wx, 五行): 106 | raise ValueError('{} 不是五行'.format(yl)) 107 | if yl.wuxing.生(wx): 108 | return 旺衰("相") 109 | if yl.wuxing.克(wx): 110 | return 旺衰("死") 111 | if wx.生(yl.wuxing): 112 | return 旺衰("休") 113 | if wx.克(yl.wuxing): 114 | return 旺衰("囚") 115 | return 旺衰("旺") 116 | 117 | 118 | if __name__ == "__main__": 119 | w = 五行("水") 120 | for i in range(1, 13): 121 | z = 支(i) 122 | print("{} {} {}".format(w, Get旺衰(z, w), z)) 123 | # for i in range(0,24): 124 | # print("{} {}".format(i,GetShiChen(i))) 125 | # a=GetLi(2018, 8, 13, 23, 23, 22) 126 | # for i in a: 127 | # print(i) 128 | -------------------------------------------------------------------------------- /dalurenCalendar/lunar/iau1980.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | 4 | # T 是 儒略世纪数 5 | # 返回 弧度 6 | def GetEarthNutationParameter(T): 7 | T2 = T * T 8 | T3 = T2 * T 9 | 10 | # 平距角(如月对地心的角距离) 11 | D = math.radians(297.85036 + 445267.111480 * T - 0.0019142 * T2 + T3 / 189474.0) 12 | 13 | # 太阳(地球)平近点角 14 | M = math.radians(357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000.0) 15 | 16 | # 月亮平近点角 17 | Mp = math.radians(134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250.0) 18 | 19 | # 月亮纬度参数 20 | F = math.radians(93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270.0) 21 | 22 | # 黄道与月亮平轨道升交点黄经 23 | Omega = math.radians(125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000.0) 24 | return D, M, Mp, F, Omega 25 | 26 | 27 | # 天体章动系数类型变量 28 | class NuationCoefficient(): 29 | def __init__(self, D, M, Mp, F, Omega, Sine1, Sine2, Cosine1, Cosine2): 30 | self.D = D 31 | self.M = M 32 | self.Mp = Mp 33 | self.F = F 34 | self.Omega = Omega 35 | self.Sine1 = Sine1 36 | self.Sine2 = Sine2 37 | self.Cosine1 = Cosine1 38 | self.Cosine2 = Cosine2 39 | 40 | 41 | nuation = [ 42 | NuationCoefficient(0, 0, 0, 0, 1, -171996, -174.2, 92025, 8.9), 43 | NuationCoefficient(-2, 0, 0, 2, 2, -13187, -1.6, 5736, -3.1), 44 | NuationCoefficient(0, 0, 0, 2, 2, -2274, -0.2, 977, -0.5), 45 | NuationCoefficient(0, 0, 0, 0, 2, 2062, 0.2, -895, 0.5), 46 | NuationCoefficient(0, 1, 0, 0, 0, 1426, -3.4, 54, -0.1), 47 | NuationCoefficient(0, 0, 1, 0, 0, 712, 0.1, -7, 0), 48 | NuationCoefficient(-2, 1, 0, 2, 2, -517, 1.2, 224, -0.6), 49 | NuationCoefficient(0, 0, 0, 2, 1, -386, -0.4, 200, 0), 50 | NuationCoefficient(0, 0, 1, 2, 2, -301, 0, 129, -0.1), 51 | NuationCoefficient(-2, -1, 0, 2, 2, 217, -0.5, -95, 0.3), 52 | NuationCoefficient(-2, 0, 1, 0, 0, -158, 0, 0, 0), 53 | NuationCoefficient(-2, 0, 0, 2, 1, 129, 0.1, -70, 0), 54 | NuationCoefficient(0, 0, -1, 2, 2, 123, 0, -53, 0), 55 | NuationCoefficient(2, 0, 0, 0, 0, 63, 0, 0, 0), 56 | NuationCoefficient(0, 0, 1, 0, 1, 63, 0.1, -33, 0), 57 | NuationCoefficient(2, 0, -1, 2, 2, -59, 0, 26, 0), 58 | NuationCoefficient(0, 0, -1, 0, 1, -58, -0.1, 32, 0), 59 | NuationCoefficient(0, 0, 1, 2, 1, -51, 0, 27, 0), 60 | NuationCoefficient(-2, 0, 2, 0, 0, 48, 0, 0, 0), 61 | NuationCoefficient(0, 0, -2, 2, 1, 46, 0, -24, 0), 62 | NuationCoefficient(2, 0, 0, 2, 2, -38, 0, 16, 0), 63 | NuationCoefficient(0, 0, 2, 2, 2, -31, 0, 13, 0), 64 | NuationCoefficient(0, 0, 2, 0, 0, 29, 0, 0, 0), 65 | NuationCoefficient(-2, 0, 1, 2, 2, 29, 0, -12, 0), 66 | NuationCoefficient(0, 0, 0, 2, 0, 26, 0, 0, 0), 67 | NuationCoefficient(-2, 0, 0, 2, 0, -22, 0, 0, 0), 68 | NuationCoefficient(0, 0, -1, 2, 1, 21, 0, -10, 0), 69 | NuationCoefficient(0, 2, 0, 0, 0, 17, -0.1, 0, 0), 70 | NuationCoefficient(2, 0, -1, 0, 1, 16, 0, -8, 0), 71 | NuationCoefficient(-2, 2, 0, 2, 2, -16, 0.1, 7, 0), 72 | NuationCoefficient(0, 1, 0, 0, 1, -15, 0, 9, 0), 73 | NuationCoefficient(-2, 0, 1, 0, 1, -13, 0, 7, 0), 74 | NuationCoefficient(0, -1, 0, 0, 1, -12, 0, 6, 0), 75 | NuationCoefficient(0, 0, 2, -2, 0, 11, 0, 0, 0), 76 | NuationCoefficient(2, 0, -1, 2, 1, -10, 0, 5, 0), 77 | NuationCoefficient(2, 0, 1, 2, 2, -8, 0, 3, 0), 78 | NuationCoefficient(0, 1, 0, 2, 2, 7, 0, -3, 0), 79 | NuationCoefficient(-2, 1, 1, 0, 0, -7, 0, 0, 0), 80 | NuationCoefficient(0, -1, 0, 2, 2, -7, 0, 3, 0), 81 | NuationCoefficient(2, 0, 0, 2, 1, -7, 0, 3, 0), 82 | NuationCoefficient(2, 0, 1, 0, 0, 6, 0, 0, 0), 83 | NuationCoefficient(-2, 0, 2, 2, 2, 6, 0, -3, 0), 84 | NuationCoefficient(-2, 0, 1, 2, 1, 6, 0, -3, 0), 85 | NuationCoefficient(2, 0, -2, 0, 1, -6, 0, 3, 0), 86 | NuationCoefficient(2, 0, 0, 0, 1, -6, 0, 3, 0), 87 | NuationCoefficient(0, -1, 1, 0, 0, 5, 0, 0, 0), 88 | NuationCoefficient(-2, -1, 0, 2, 1, -5, 0, 3, 0), 89 | NuationCoefficient(-2, 0, 0, 0, 1, -5, 0, 3, 0), 90 | NuationCoefficient(0, 0, 2, 2, 1, -5, 0, 3, 0), 91 | NuationCoefficient(-2, 0, 2, 0, 1, 4, 0, 0, 0), 92 | NuationCoefficient(-2, 1, 0, 2, 1, 4, 0, 0, 0), 93 | NuationCoefficient(0, 0, 1, -2, 0, 4, 0, 0, 0), 94 | NuationCoefficient(-1, 0, 1, 0, 0, -4, 0, 0, 0), 95 | NuationCoefficient(-2, 1, 0, 0, 0, -4, 0, 0, 0), 96 | NuationCoefficient(1, 0, 0, 0, 0, -4, 0, 0, 0), 97 | NuationCoefficient(0, 0, 1, 2, 0, 3, 0, 0, 0), 98 | NuationCoefficient(0, 0, -2, 2, 2, -3, 0, 0, 0), 99 | NuationCoefficient(-1, -1, 1, 0, 0, -3, 0, 0, 0), 100 | NuationCoefficient(0, 1, 1, 0, 0, -3, 0, 0, 0), 101 | NuationCoefficient(0, -1, 1, 2, 2, -3, 0, 0, 0), 102 | NuationCoefficient(2, -1, -1, 2, 2, -3, 0, 0, 0), 103 | NuationCoefficient(0, 0, 3, 2, 2, -3, 0, 0, 0), 104 | NuationCoefficient(2, -1, 0, 2, 2, -3, 0, 0, 0), 105 | ] 106 | 107 | coefficient = math.radians(0.0001/3600) 108 | 109 | # 计算某时刻的黄经章动干扰量 110 | # 儒略世纪数 111 | # 返回弧度 112 | def CalcEarthLongitudeNutation(T): 113 | D, M, Mp, F, Omega = GetEarthNutationParameter(T) 114 | result=0 115 | for n in nuation: 116 | theta = n.D*D + n.M*M + n.Mp*Mp + n.F*F +n.Omega*Omega 117 | result += (n.Sine1 + n.Sine2*T) * math.sin(theta) 118 | 119 | # 乘以章动表的系数 0.0001 角秒 120 | return result * coefficient 121 | 122 | 123 | # 计算某时刻的黄赤交角章动干扰量,dt是儒略千年数,返回值单位是度* 124 | 125 | # 计算某时刻的黄赤交角章动干扰量 126 | # dt 是儒略世纪数 127 | # 返回弧度 128 | def CalcEarthObliquityNutation(dt): 129 | D, M, Mp, F, Omega = GetEarthNutationParameter(dt) 130 | result=0 131 | 132 | for n in nuation: 133 | # sita 弧度 134 | theta = n.D*D + n.M*M + n.Mp*Mp + n.F*F +n.Omega*Omega 135 | result += (n.Cosine1 + n.Cosine2*dt) * math.cos(theta) 136 | 137 | # 乘以章动表的系数 0.0001 角秒 138 | return result * coefficient 139 | 140 | -------------------------------------------------------------------------------- /shensha/shensha.py: -------------------------------------------------------------------------------- 1 | from ganzhiwuxin import 干, 支 2 | 3 | 4 | def do_驿马(sp, shenShaJson): 5 | sk = sp.四课 6 | __支 = sk.支 7 | __月建 = sp.四柱与节气[1].支 8 | zhi = __月建 9 | for i in range(0, 3): 10 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 11 | yiMa = zhi + 6 12 | break 13 | zhi = zhi + 4 14 | shenShaJson["月"]["驿马"] = yiMa 15 | 16 | zhi = __支 17 | for i in range(0, 3): 18 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 19 | yiMa = zhi + 6 20 | break 21 | zhi = zhi + 4 22 | shenShaJson["日"]["驿马"] = yiMa 23 | 24 | __岁 = sp.四柱与节气[0].支 25 | zhi = __岁 26 | for i in range(0, 3): 27 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 28 | yi_ma = zhi + 6 29 | break 30 | zhi = zhi + 4 31 | shenShaJson["年"]["驿马"] = yi_ma 32 | 33 | 34 | def do_月合(sp, shenShaJson): 35 | pass 36 | 37 | 38 | def do_天印(sp, shenShaJson): 39 | pass 40 | 41 | 42 | def do_成神(sp, shenShaJson): 43 | pass 44 | 45 | 46 | def do_皇书(sp, shenShaJson): 47 | __月建 = sp.四柱与节气[1].支 48 | if __月建 in [支("寅"), 支("卯"), 支("辰")]: 49 | shenShaJson["月"]["皇书"] = 支("寅") 50 | return 51 | if __月建 in [支("巳"), 支("午"), 支("未")]: 52 | shenShaJson["月"]["皇书"] = 支("巳") 53 | return 54 | if __月建 in [支("申"), 支("酉"), 支("戌")]: 55 | shenShaJson["月"]["皇书"] = 支("申") 56 | return 57 | shenShaJson["月"]["皇书"] = 支("亥") 58 | 59 | 60 | def do_皇恩(sp, shenShaJson): 61 | 寅 = 支("寅") 62 | __月建 = sp.四柱与节气[1].支 63 | he = 支("未") + (__月建 - 寅) * 2 64 | shenShaJson["月"]["皇恩"] = he 65 | 66 | 67 | def do_天诏飞魂(sp, shenShaJson): 68 | __月建 = sp.四柱与节气[1].支 69 | he = __月建 + (-3) 70 | shenShaJson["月"]["天诏"] = he 71 | shenShaJson["月"]["飞魂"] = he 72 | 73 | 74 | def do_福星(sp, shenShaJson): 75 | pass 76 | 77 | 78 | def do_天喜(sp, shenShaJson): 79 | __月建 = sp.四柱与节气[1].支 80 | if __月建 in [支("寅"), 支("卯"), 支("辰")]: 81 | shenShaJson["月"]["天喜"] = 支("戌") 82 | return 83 | if __月建 in [支("巳"), 支("午"), 支("未")]: 84 | shenShaJson["月"]["天喜"] = 支("丑") 85 | return 86 | if __月建 in [支("申"), 支("酉"), 支("戌")]: 87 | shenShaJson["月"]["天喜"] = 支("辰") 88 | return 89 | shenShaJson["月"]["天喜"] = 支("未") 90 | 91 | 92 | def do_天赦(sp, shenShaJson): 93 | pass 94 | 95 | 96 | def do_生气(sp, shenShaJson): 97 | __月建 = sp.四柱与节气[1].支 98 | shenShaJson["月"]["生气"] = __月建 + (-2) 99 | 100 | 101 | def do_天马(sp, shenShaJson): 102 | 寅 = 支("寅") 103 | __月建 = sp.四柱与节气[1].支 104 | he = 支("午") + (__月建 - 寅) * 2 105 | shenShaJson["月"]["天马"] = he 106 | 107 | 108 | def do_三丘五墓(sp, shenShaJson): 109 | __月建 = sp.四柱与节气[1].支 110 | zhi = __月建 111 | for i in range(0, 3): 112 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 113 | 三丘 = zhi + (-1) 114 | break 115 | zhi = zhi + (-1) 116 | shenShaJson["月"]["三丘"] = 三丘 117 | shenShaJson["月"]["五墓"] = 三丘 + 6 118 | 119 | 120 | def do_死气(sp, shenShaJson): 121 | __月建 = sp.四柱与节气[1].支 122 | s = __月建 + 4 123 | shenShaJson["月"]["死气"] = s 124 | shenShaJson["月"]["谩语"] = s 125 | 126 | 127 | def do_孤辰寡宿(sp, shenShaJson): 128 | __月建 = sp.四柱与节气[1].支 129 | zhi = __月建 130 | for i in range(0, 3): 131 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 132 | 寡宿 = zhi + (-1) 133 | break 134 | zhi = zhi + (-1) 135 | shenShaJson["月"]["寡宿"] = 寡宿 136 | shenShaJson["月"]["孤辰"] = 寡宿 + 4 137 | 138 | 139 | def do_四废(sp, shenShaJson): 140 | pass 141 | 142 | 143 | def do_天医地医(sp, shenShaJson): 144 | __月建 = sp.四柱与节气[1].支 145 | 天医 = __月建 + 2 146 | 地医 = 天医 + 6 147 | shenShaJson["月"]["天医"] = 天医 148 | shenShaJson["月"]["地医"] = 地医 149 | shenShaJson["月"]["天巫"] = 天医 150 | shenShaJson["月"]["地巫"] = 地医 151 | 152 | 153 | def do_金神(sp, shenShaJson): 154 | pass 155 | 156 | 157 | def do_破碎(sp, shenShaJson): 158 | __月建 = sp.四柱与节气[1].支 159 | if (__月建 - 支("寅")) % 3 == 0: 160 | shenShaJson["月"]["破碎"] = 支("酉") 161 | return 162 | if (__月建 - 支("卯")) % 3 == 0: 163 | shenShaJson["月"]["破碎"] = 支("巳") 164 | return 165 | if (__月建 - 支("辰")) % 3 == 0: 166 | shenShaJson["月"]["破碎"] = 支("丑") 167 | 168 | 169 | def do_月厌(sp, shenShaJson): 170 | __月建 = sp.四柱与节气[1].支 171 | 月厌 = 支("子") + (支("子") - __月建) 172 | shenShaJson["月"]["月厌"] = 月厌 173 | 174 | 175 | def do_劫杀(sp, shenShaJson): 176 | pass 177 | 178 | 179 | def do_大耗小耗(sp, shenShaJson): 180 | __岁 = sp.四柱与节气[0].支 181 | shenShaJson["年"]["大耗"] = __岁 + 6 182 | shenShaJson["年"]["小耗"] = __岁 + 5 183 | 184 | 185 | def do_病符(sp, shenShaJson): 186 | __岁 = sp.四柱与节气[0].支 187 | shenShaJson["年"]["病符"] = __岁 + (-1) 188 | 189 | 190 | def do_血支血忌(sp, shenShaJson): 191 | __月建 = sp.四柱与节气[1].支 192 | shenShaJson["月"]["血支"] = __月建 + (-1) 193 | if (__月建 - 支("寅")) % 2 == 0: 194 | shenShaJson["月"]["血忌"] = 支("丑") + (__月建 - 支("寅")) // 2 195 | else: 196 | shenShaJson["月"]["血忌"] = 支("未") + (__月建 - 支("卯")) // 2 197 | 198 | 199 | def do_大煞小煞(sp, shenShaJson): 200 | pass 201 | 202 | 203 | def do_丧车(sp, shenShaJson): 204 | __月建 = sp.四柱与节气[1].支 205 | n = (__月建 - 支("寅") + 12) % 12 206 | n = n // 3 207 | s = [支("酉"), 支("子"), 支("卯"), 支("午")] 208 | shenShaJson["月"]["丧车"] = s[n] 209 | 210 | 211 | def do_游都(sp, shenShaJson): 212 | # TODO 213 | return 214 | 215 | 216 | def do_奸神(sp, shenShaJson): 217 | # TODO 218 | return 219 | 220 | def do_奸私(sp, shenShaJson): 221 | # TODO 222 | return 223 | 224 | 225 | def do_信神天鸡(sp, shenShaJson): 226 | __月建 = sp.四柱与节气[1].支 227 | shenShaJson["月"]["信神"] = 支("酉") + (__月建 - 支("寅")) 228 | shenShaJson["月"]["天鸡"] = 支("酉") + (支("寅") - __月建) 229 | 230 | 231 | def do_丧魂(sp, shenShaJson): 232 | __月建 = sp.四柱与节气[1].支 233 | zhi = __月建 234 | for i in range(0, 3): 235 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 236 | __丧魂 = zhi + 5 237 | break 238 | zhi = zhi + 4 239 | shenShaJson["月"]["丧魂"] = __丧魂 240 | 241 | 242 | def do_天鬼(sp, shenShaJson): 243 | __月建 = sp.四柱与节气[1].支 244 | zhi = __月建 245 | for i in range(0, 3): 246 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 247 | __天鬼 = zhi + 7 248 | break 249 | zhi = zhi + 4 250 | shenShaJson["月"]["天鬼"] = __天鬼 251 | 252 | 253 | def do_桃花绳索(sp, shenShaJson): 254 | # TODO 255 | return 256 | 257 | def do_大时(sp, shenShaJson): 258 | __月建 = sp.四柱与节气[1].支 259 | zhi = __月建 260 | for i in range(0, 3): 261 | if zhi in [支("子"), 支("卯"), 支("午"), 支("酉")]: 262 | __大时 = zhi +(-3) 263 | break 264 | zhi = zhi + 4 265 | shenShaJson["月"]["大时"] = __大时 266 | 267 | def do_小时(sp, shenShaJson): 268 | shenShaJson["月"]["小时"] = sp.四柱与节气[1].支 269 | 270 | def do__旬奇(sp, shenShaJson): 271 | __kw = sp.空亡 272 | __xs = __kw[1] + 1 273 | if __xs in [支("戌"), 支("子")]: 274 | 旬奇 = 支("丑") 275 | if __xs in [支("申"), 支("午")]: 276 | 旬奇 = 支("子") 277 | if __xs in [支("寅"), 支("辰")]: 278 | 旬奇 = 支("亥") 279 | shenShaJson["日"]["旬奇"] = 旬奇 280 | 281 | 282 | def do__日奇(sp, shenShaJson): 283 | sk = sp.四课 284 | __g = sk.干 285 | d = __g - 干("甲") 286 | if d <= 5: 287 | 日奇 = 支("午") + (-1 * d) 288 | else: 289 | 日奇 = 支("未") + (__g - 干("庚")) 290 | shenShaJson["日"]["日奇"] = 日奇 291 | 292 | 293 | def do__旬仪(sp, shenShaJson): 294 | __kw = sp.空亡 295 | __xs = __kw[1] + 1 296 | shenShaJson["日"]["旬仪"] = __xs 297 | 298 | 299 | def do__支仪(sp, shenShaJson): 300 | sk = sp.四课 301 | __g = sk.支 302 | d = __g - 支("子") 303 | if d <= 5: 304 | 日奇 = 支("午") + (-1 * d) 305 | else: 306 | 日奇 = 支("未") + (__g - 支("午")) 307 | shenShaJson["日"]["支仪"] = 日奇 308 | -------------------------------------------------------------------------------- /shipan/guati.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import eacal 3 | from shipan import shipan 4 | from common import Get旺衰, 旺衰 5 | from ganzhiwuxin import 干, 支, 干支 6 | from common import GetLi 7 | 8 | 9 | def do_伏呤(sp): 10 | sk = sp.四课 11 | __支 = sk.支 12 | __支阳 = sk.支阳神 13 | if __支 == __支阳: 14 | sp.setGuaTi("伏呤卦") 15 | # TODO 16 | 17 | 18 | def do_返呤(sp): 19 | sk = sp.四课 20 | __支 = sk.支 21 | __支阳 = sk.支阳神 22 | if (__支 + 6) == __支阳: 23 | sp.setGuaTi("返呤卦") 24 | 25 | 26 | def do_龙德(sp): 27 | __太岁 = sp.四柱与节气[0] 28 | __月将 = sp.yueJiang 29 | __三传 = sp.三传 30 | sc = [__三传.初, __三传.中, __三传.末] 31 | if sc[0] == __月将 and __太岁.支 in sc: 32 | sp.setGuaTi("龙德卦") 33 | 34 | 35 | def do_三光(sp): 36 | # 2015-08-12 巳将卯时 37 | __月建 = sp.四柱与节气[1].支 38 | __三传 = sp.三传 39 | __初 = __三传.初 40 | __中 = __三传.中 41 | __末 = __三传.末 42 | if Get旺衰(__月建, __初.wuxing) not in [旺衰("旺"), 旺衰("相")]: 43 | return 44 | sk = sp.四课 45 | __干 = sk.干 46 | __支 = sk.支 47 | if Get旺衰(__月建, __干.wuxing) not in [旺衰("旺"), 旺衰("相")]: 48 | return 49 | if Get旺衰(__月建, __支.wuxing) not in [旺衰("旺"), 旺衰("相")]: 50 | return 51 | tj = sp.tianJiang 52 | c = tj[__初] 53 | z = tj[__中] 54 | m = tj[__末] 55 | if c.吉将 or z.吉将 or m.吉将: 56 | sp.setGuaTi("三光卦") 57 | 58 | 59 | def do_三阳(sp): 60 | # 2018-04-03 戌将 酉时 61 | __发用 = sp.三传.初 62 | __月建 = sp.四柱与节气[1].支 63 | if Get旺衰(__月建, __发用.wuxing) not in [旺衰("旺"), 旺衰("相")]: 64 | return 65 | __天将盘 = sp.tianJiang 66 | if __天将盘.逆: 67 | return 68 | sk = sp.四课 69 | __干 = sk.干 70 | __支 = sk.支 71 | __干天将 = __天将盘[shipan.寄宫(__干)] 72 | __支天将 = __天将盘[__支] 73 | t = [shipan.天将('蛇'), shipan.天将('雀'), shipan.天将('合'), shipan.天将('勾'), 74 | shipan.天将('龙')] 75 | if __干天将 in t and __支天将 in t: 76 | sp.setGuaTi("三阳卦") 77 | 78 | 79 | def do_三奇(sp): 80 | __kw = sp.空亡 81 | __xs = __kw[1] + 1 82 | __旬奇 = "" 83 | if __xs in [支("戌"), 支("子")]: 84 | __旬奇 = 支("丑") 85 | if __xs in [支("申"), 支("午")]: 86 | __旬奇 = 支("子") 87 | if __xs in [支("寅"), 支("辰")]: 88 | __旬奇 = 支("亥") 89 | 90 | __sc = sp.三传 91 | sc = [__sc.初, __sc.中, __sc.末] 92 | if __旬奇 in sc: 93 | sp.setGuaTi("三奇卦") 94 | 95 | 96 | def do_六仪(sp): 97 | __kw = sp.空亡 98 | __xs = __kw[1] + 1 99 | sc = sp.三传 100 | sc = [sc.初, sc.中, sc.末] 101 | if __xs in sc: 102 | sp.setGuaTi("六仪卦") 103 | return 104 | 105 | 106 | def do_铸印(sp): 107 | __三传 = sp.三传 108 | sc = [__三传.初, __三传.中, __三传.末] 109 | tp = sp.天盘 110 | si = 支("巳") 111 | xu = 支("戌") 112 | mao = 支("卯") 113 | if tp[si] != xu: 114 | return 115 | if si in sc and xu in sc and mao in sc: 116 | sp.setGuaTi("铸印卦") 117 | 118 | 119 | def do_斫轮(sp): 120 | sk = sp.四课 121 | c = sp.三传.初 122 | tp = sp.天盘 123 | mao = 支("卯") 124 | if c != mao: 125 | return 126 | __干 = sk.干 127 | __干上神 = sk.干阳神 128 | if __干上神 == mao and __干 in [干("庚"), 干("辛")]: 129 | sp.setGuaTi("斫轮卦") 130 | return 131 | lin = tp.临(mao) 132 | if lin == 支("申") or lin == 支("酉"): 133 | sp.setGuaTi("斫轮卦") 134 | 135 | 136 | def do_轩盖(sp): 137 | __sc = sp.三传 138 | sc = [__sc.初, __sc.中, __sc.末] 139 | yin = 支("寅") 140 | zi = 支("子") 141 | mao = 支("卯") 142 | __月建 = sp.四柱与节气[1].支 143 | tian_ma = 支("午") + (__月建 - yin) * 2 144 | if zi in sc and mao in sc and tian_ma in sc: 145 | sp.setGuaTi("轩盖卦") 146 | 147 | 148 | def do_官爵(sp): 149 | __sc = sp.三传 150 | sc = [__sc.初, __sc.中, __sc.末] 151 | __戌 = 支("戌") 152 | if __戌 not in sc: 153 | return 154 | tjp = sp.tianJiang 155 | __太常支 = tjp.临(shipan.天将("常")) 156 | if __太常支 not in sc: 157 | return 158 | 159 | zhiList = [sp.四柱与节气[0].支, sp.四柱与节气[1].支, sp.四课.支, 160 | sp.行年.支, sp.本命.支] 161 | for i in zhiList: 162 | zhi = i 163 | while (zhi - 支("寅")) % 3 != 0: 164 | zhi = zhi + 4 165 | yiMa = zhi + 6 166 | if yiMa in sc: 167 | sp.setGuaTi("官爵卦") 168 | return 169 | 170 | 171 | def do_富贵(sp): 172 | __发用 = sp.三传.初 173 | __月建 = sp.四柱与节气[1].支 174 | if Get旺衰(__月建, __发用.wuxing) not in [旺衰("旺"), 旺衰("相")]: 175 | return 176 | tj = sp.tianJiang 177 | tianYiZhi = tj.临(shipan.天将("贵")) 178 | if tianYiZhi != __发用: 179 | return 180 | 181 | tp = sp.天盘 182 | sk = sp.四课 183 | __行年上神 = tp[sp.行年.支] 184 | __本命上神 = tp[sp.本命.支] 185 | 186 | __干上神 = sk.干阳神 187 | __支上神 = sk.支阳神 188 | if tianYiZhi in [__行年上神, __本命上神, __干上神, __支上神]: 189 | sp.setGuaTi("富贵卦") 190 | 191 | 192 | def do_时泰(sp): 193 | __太岁 = sp.四柱与节气[0].支 194 | __发用 = sp.三传.初 195 | if __发用 != __太岁: 196 | return 197 | __月建 = sp.四柱与节气[1].支 198 | tianYiZhi = sp.tianJiang.临(shipan.天将("龙")) 199 | if tianYiZhi != __月建: 200 | return 201 | __sc = sp.三传 202 | sc = [__sc.初, __sc.中, __sc.末] 203 | if __月建 in sc: 204 | sp.setGuaTi("时泰卦") 205 | 206 | 207 | def do_九丑(sp): 208 | sk = sp.四课 209 | gan = sk.干 210 | zhi = sk.支 211 | if gan not in [干("乙"), 干("戊"), 干("己"), 干("辛"), 干("壬"),]: 212 | return 213 | if zhi not in [支("子"), 支("卯"), 支("午"), 支("酉")]: 214 | return 215 | __支上神 = sk.支阳神 216 | if __支上神 != 支("丑"): 217 | return 218 | sp.setGuaTi("九丑卦") 219 | 220 | 221 | def do_二烦(sp): 222 | sunMansion = sp.yueJiang 223 | moonMansion = sp. moonMansion 224 | tp = sp.tp 225 | sunLing = tp.临(sunMansion) 226 | moonLing = tp.临(moonMansion) 227 | 228 | if sunLing in [支("子"), 支("卯"), 支("午"), 支("酉")]: 229 | sp.setGuaTi("天烦卦") 230 | 231 | if moonLing in [支("子"), 支("卯"), 支("午"), 支("酉")]: 232 | sp.setGuaTi("地烦卦") 233 | if "天烦卦" in sp.格局 and "地烦卦" in sp.格局: 234 | sp.setGuaTi("二烦卦") 235 | 236 | 237 | def do_天祸(sp): 238 | year = sp.year 239 | zhanRi = sp.占日 240 | 241 | c = eacal.EACal(zh_s=True) 242 | liChun = c.get_specified_solar_term(year, 0)[2].replace(tzinfo=None) 243 | liXiao = c.get_specified_solar_term(year, 6)[2].replace(tzinfo=None) 244 | liQiu = c.get_specified_solar_term(year, 12)[2].replace(tzinfo=None) 245 | liDong = c.get_specified_solar_term(year, 18)[2].replace(tzinfo=None) 246 | t = None 247 | for i in [liChun, liXiao, liQiu, liDong]: 248 | t = GetLi(i.year, i.month, i.day, i.hour, i.minute, i.second)[2] 249 | if t == zhanRi: 250 | break 251 | if t is None: 252 | return 253 | yesterdayGan = zhanRi + (-1) 254 | yesterdayJiGong = shipan.寄宫(yesterdayGan.干) 255 | lin = sp.tp.临(shipan.寄宫(zhanRi.干)) 256 | if yesterdayJiGong == lin: 257 | sp.setGuaTi("天祸卦") 258 | 259 | 260 | def do_伏殃(sp): 261 | __月建 = sp.四柱与节气[1].支 262 | zhi = __月建 263 | while (zhi - 支("寅")) % 3 != 0: 264 | zhi = zhi + 4 265 | __天鬼 = zhi + 7 266 | sc = sp.三传 267 | sk = sp.四课 268 | tp = sp.天盘 269 | __chu = sc.初 270 | __行年上神 = tp[sp.行年.支] 271 | __本命上神 = tp[sp.本命.支] 272 | 273 | __干上神 = sk.干阳神 274 | __支上神 = sk.支阳神 275 | 276 | zhiList = [__干上神, __支上神, __chu, __行年上神, __本命上神] 277 | if __天鬼 in zhiList: 278 | sp.setGuaTi("伏殃卦") 279 | 280 | 281 | def do_度厄(sp): 282 | sk = sp.四课 283 | __四课 = [sk.一课, sk.二课, sk.三课, sk.四课] 284 | z = 0 285 | y = 0 286 | for i in range(0, 4): 287 | if __四课[i][0].wuxing.克(__四课[i][1].wuxing): 288 | z = z + 1 289 | if __四课[i][1].wuxing.克(__四课[i][0].wuxing): 290 | y = y + 1 291 | if z == 3 or y == 3: 292 | sp.setGuaTi("度厄卦") 293 | 294 | 295 | def do_无禄绝嗣(sp): 296 | sk = sp.四课 297 | __干 = sk.干 298 | __干阳神 = sk.干阳神 299 | __干阴神 = sk.干阴神 300 | __支 = sk.支 301 | __支阳神 = sk.支阳神 302 | __支阴神 = sk.支阴神 303 | if __干阳神.wuxing.克(__干.wuxing) and __干阴神.克(__干阳神) and __支阳神.克(__支) and \ 304 | __支阴神.克(__支阳神): 305 | sp.setGuaTi("无禄绝嗣卦") 306 | return 307 | if __干.wuxing.克(__干阳神.wuxing) and __干阳神.克(__干阴神) and __支.克(__支阳神) and \ 308 | __支阳神.克(__支阴神): 309 | sp.setGuaTi("无禄绝嗣卦") 310 | return 311 | 312 | 313 | def do_罗网(sp): 314 | sc = sp.三传 315 | sk = sp.四课 316 | tp = sp.天盘 317 | __chu = sc.初 318 | __行年上神 = tp[sp.行年.支] 319 | __本命上神 = tp[sp.本命.支] 320 | 321 | __干上神 = sk.干阳神 322 | __支上神 = sk.支阳神 323 | 324 | zhiList = [__干上神, __支上神, __chu, __行年上神, __本命上神] 325 | __天罗 = shipan.寄宫(sk.干) + 1 326 | __地网 = __天罗 + 6 327 | 328 | if __天罗 in zhiList or __地网 in zhiList: 329 | sp.setGuaTi("罗网卦") 330 | 331 | 332 | def do__微服(sp): 333 | sk = sp.四课 334 | __干阳神 = sk.干阳神 335 | __干阴神 = sk.干阴神 336 | __支阳神 = sk.支阳神 337 | __支阴神 = sk.支阴神 338 | 天将盘 = sp.tianJiang 339 | 340 | __干阳天将 = 天将盘[__干阳神] 341 | __干阴天将 = 天将盘[__干阴神] 342 | __支阳天将 = 天将盘[__支阳神] 343 | __支阴天将 = 天将盘[__支阴神] 344 | t = [shipan.天将('蛇'), shipan.天将('雀'), shipan.天将('合'), shipan.天将('勾'), 345 | shipan.天将('龙')] 346 | if (__干阳天将 not in t) and (__支阳天将 not in t) and \ 347 | (__干阴天将 in t) and (__支阴天将 in t): 348 | sp.setGuaTi("微服卦") 349 | 350 | 351 | def do_连珠(sp): 352 | sc = sp.三传 353 | if (sc.初 - 支("寅")) % 3 == 0 and sc.初 + 1 == sc.中 and sc.中 + 1 == sc.末: 354 | sp.setGuaTi("连珠卦") 355 | return 356 | if (sc.初 - 支("辰")) % 3 == 0 and sc.初 == sc.中 + 1 and sc.中 == sc.末 + 1: 357 | sp.setGuaTi("连珠卦") 358 | return 359 | y = sp.四柱与节气[0].支 360 | m = sp.四柱与节气[1].支 361 | d = sp.四柱与节气[2].支 362 | if y == sc.初 and m == sc.中 and d == sc.末: 363 | sp.setGuaTi("连珠卦") 364 | return 365 | if d == sc.初 and m == sc.中 and y == sc.末: 366 | sp.setGuaTi("连珠卦") 367 | 368 | 369 | def do_连茹(sp): 370 | sc = sp.三传 371 | c = sc.初 372 | z = sc.中 373 | m = sc.末 374 | if c + 1 == z and z + 1 == m: 375 | sp.setGuaTi("连茹卦") 376 | return 377 | if c == z + 1 and z == m + 1: 378 | sp.setGuaTi("连茹卦") 379 | 380 | 381 | def do_侵害(sp): 382 | pass 383 | -------------------------------------------------------------------------------- /DaLuRenWindow.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from functools import wraps 3 | from PyQt5 import QtWidgets 4 | from PyQt5 import QtGui 5 | from PyQt5.QtWebEngineWidgets import QWebEngineView 6 | from shipan.shipan import ShiPan, MinGPan 7 | 8 | from common import GetShiChen, GetLi, DiZHiList 9 | from help import HelpDialog 10 | from shensha.ShenShaDialog import ShenShaDialog 11 | 12 | 13 | def checkValue(func): 14 | @wraps(func) 15 | def wrapper(self): 16 | year = int("0{}".format(self.yearInput.text())) 17 | month = int("0{}".format(self.monthInput.text())) 18 | day = int("0{}".format(self.dayInput.text())) 19 | hour = int("0{}".format(self.hourInput.text())) 20 | minutes = int("0{}".format(self.minutesInput.text())) 21 | second = int("0{}".format(self.secondInput.text())) 22 | shengNian = int("0{}".format(self.shengNianInput.text())) 23 | if year < 1 or year > 2100 or \ 24 | shengNian < 1920 or shengNian > 2100 or \ 25 | month < 1 or month > 12 or \ 26 | day < 1 or day > 31 or \ 27 | hour < 0 or hour > 23 or \ 28 | minutes < 0 or minutes > 59 or \ 29 | second < 0 or second > 59: 30 | QtWidgets.QMessageBox.information(None, "OK", "输入时间不正确", 31 | QtWidgets.QMessageBox.Ok, 32 | QtWidgets.QMessageBox.Ok) 33 | return 34 | timeString = "{0}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}".format( 35 | year, month, day, hour, minutes, second) 36 | try: 37 | datetime.datetime.strptime(timeString, "%Y-%m-%d %H:%M:%S") 38 | except ValueError as e: 39 | QtWidgets.QMessageBox.information(None, 40 | "OK", "输入时间{}不正确".format( 41 | timeString), 42 | QtWidgets.QMessageBox.Ok, 43 | QtWidgets.QMessageBox.Ok) 44 | return 45 | return func(self) 46 | return wrapper 47 | 48 | 49 | class DaLuRenWindow(QtWidgets.QMainWindow): 50 | def __init__(self): 51 | super().__init__() 52 | self.shiPan = None 53 | self.setWindowTitle("大六壬") 54 | 55 | # Create mainold layout 56 | layout = QtWidgets.QHBoxLayout() 57 | 58 | mainWidget = QtWidgets.QWidget() 59 | mainWidget.setLayout(layout) 60 | self.setCentralWidget(mainWidget) 61 | 62 | self.textBrowser = QWebEngineView() 63 | layout.addWidget(self.textBrowser) 64 | 65 | # 设置右则面板 66 | rightWidget = QtWidgets.QWidget() 67 | rightWidget.setFixedWidth(100) 68 | # layout.addWidget(rightWidget) 69 | scrollArea = QtWidgets.QScrollArea(self) 70 | scrollArea.setFixedWidth(120) 71 | scrollArea.setWidgetResizable(True) 72 | 73 | # scroll_bar = scrollArea.verticalScrollBar() 74 | scrollArea.setWidget(rightWidget) 75 | layout.addWidget(scrollArea) 76 | 77 | # 为右则面板使用水平布局 78 | rightVBoxLayout = QtWidgets.QVBoxLayout() 79 | rightWidget.setLayout(rightVBoxLayout) 80 | # 81 | self.yearInput = QtWidgets.QLineEdit() 82 | self.yearInput.setPlaceholderText("年 1920-2050") 83 | self.yearInput.setValidator(QtGui.QIntValidator(1920, 2050, 84 | self.yearInput)) 85 | rightVBoxLayout.addWidget(self.yearInput) 86 | 87 | self.monthInput = QtWidgets.QLineEdit() 88 | self.monthInput.setPlaceholderText("月") 89 | self.monthInput.setValidator(QtGui.QIntValidator(1, 12, 90 | self.monthInput)) 91 | rightVBoxLayout.addWidget(self.monthInput) 92 | 93 | self.dayInput = QtWidgets.QLineEdit() 94 | self.dayInput.setPlaceholderText("日") 95 | self.dayInput.setValidator(QtGui.QIntValidator(1, 31, self.dayInput)) 96 | rightVBoxLayout.addWidget(self.dayInput) 97 | 98 | self.hourInput = QtWidgets.QLineEdit() 99 | self.hourInput.setPlaceholderText("时") 100 | self.hourInput.setValidator(QtGui.QIntValidator(0, 23, self.hourInput)) 101 | rightVBoxLayout.addWidget(self.hourInput) 102 | 103 | self.minutesInput = QtWidgets.QLineEdit() 104 | self.minutesInput.setPlaceholderText("分") 105 | self.minutesInput.setValidator(QtGui.QIntValidator(0, 59, 106 | self.minutesInput)) 107 | rightVBoxLayout.addWidget(self.minutesInput) 108 | 109 | self.secondInput = QtWidgets.QLineEdit() 110 | self.secondInput.setPlaceholderText("秒") 111 | self.secondInput.setValidator(QtGui.QIntValidator(0, 59, 112 | self.minutesInput)) 113 | rightVBoxLayout.addWidget(self.secondInput) 114 | 115 | timeNowButton = QtWidgets.QPushButton("当前时间") 116 | rightVBoxLayout.addWidget(timeNowButton) 117 | 118 | self.yueJiang = QtWidgets.QComboBox() 119 | self.yueJiang.addItems(DiZHiList) 120 | 121 | yueJiangHBoxLayout = QtWidgets.QHBoxLayout() 122 | yueJiangHBoxLayout.addWidget(QtWidgets.QLabel("月将")) 123 | yueJiangbutton = QtWidgets.QPushButton("计算") 124 | yueJiangHBoxLayout.addWidget(yueJiangbutton) 125 | rightVBoxLayout.addLayout(yueJiangHBoxLayout) 126 | rightVBoxLayout.addWidget(self.yueJiang) 127 | 128 | self.zhanShi = QtWidgets.QComboBox() 129 | self.zhanShi.addItems(DiZHiList) 130 | rightVBoxLayout.addWidget(QtWidgets.QLabel("占时")) 131 | rightVBoxLayout.addWidget(self.zhanShi) 132 | 133 | self.zhouZhan = QtWidgets.QComboBox() 134 | self.zhouZhan.addItems(["是", "否"]) 135 | rightVBoxLayout.addWidget(QtWidgets.QLabel("昼占/昼生人")) 136 | rightVBoxLayout.addWidget(self.zhouZhan) 137 | 138 | self.mingJu = QtWidgets.QComboBox() 139 | self.mingJu.addItems(["否", "是"]) 140 | rightVBoxLayout.addWidget(QtWidgets.QLabel("命局")) 141 | rightVBoxLayout.addWidget(self.mingJu) 142 | 143 | man = QtWidgets.QRadioButton("男") 144 | male = QtWidgets.QRadioButton("女") 145 | man.setChecked(True) 146 | self.sex = QtWidgets.QButtonGroup() 147 | self.sex.addButton(man, 0) 148 | self.sex.addButton(male, 1) 149 | sexLayout = QtWidgets.QHBoxLayout() 150 | sexLayout.addWidget(man) 151 | sexLayout.addWidget(male) 152 | rightVBoxLayout.addLayout(sexLayout) 153 | 154 | self.shengNianInput = QtWidgets.QLineEdit() 155 | self.shengNianInput.setPlaceholderText("生年") 156 | self.shengNianInput.setValidator( 157 | QtGui.QIntValidator(1920, 2050, self.shengNianInput)) 158 | rightVBoxLayout.addWidget(self.shengNianInput) 159 | 160 | rightVBoxLayout.addWidget(QtWidgets.QLabel("占测之事")) 161 | self.占测的事Input = QtWidgets.QLineEdit() 162 | rightVBoxLayout.addWidget(self.占测的事Input) 163 | 164 | button = QtWidgets.QPushButton("起六壬局") 165 | rightVBoxLayout.addWidget(button) 166 | 167 | shenShaButton = QtWidgets.QPushButton("神煞查询") 168 | rightVBoxLayout.addWidget(shenShaButton) 169 | 170 | helpButton = QtWidgets.QPushButton("帮助") 171 | rightVBoxLayout.addWidget(helpButton) 172 | rightVBoxLayout.addStretch() 173 | 174 | # 设置默认时间 175 | self.timeNow() 176 | 177 | 月将 = GetLi(int(self.yearInput.text()), int(self.monthInput.text()), 178 | int(self.dayInput.text()), int(self.hourInput.text()), 179 | int(self.minutesInput.text()), 180 | int(self.secondInput.text()))[4] 181 | self.yueJiang.setCurrentIndex(月将.num - 1) 182 | button.clicked.connect(self.onclick) 183 | helpButton.clicked.connect(self.helpOnclick) 184 | yueJiangbutton.clicked.connect(self.yueJiangOnClick) 185 | shenShaButton.clicked.connect(self.shenShaOnclick) 186 | timeNowButton.clicked.connect(self.timeNowOnClick) 187 | # self.show() 188 | 189 | # Connect event for button 190 | @checkValue 191 | def onclick(self): 192 | year = int("0{}".format(self.yearInput.text())) 193 | month = int("0{}".format(self.monthInput.text())) 194 | day = int("0{}".format(self.dayInput.text())) 195 | hour = int("0{}".format(self.hourInput.text())) 196 | minutes = int("0{}".format(self.minutesInput.text())) 197 | second = int("0{}".format(self.secondInput.text())) 198 | shengNian = int("0{}".format(self.shengNianInput.text())) 199 | 月将=DiZHiList[self.yueJiang.currentIndex()] 200 | 占时=DiZHiList[self.zhanShi.currentIndex()] 201 | 昼占=True 202 | __占测的事 = self.占测的事Input.text() 203 | if self.zhouZhan.currentIndex() == 1: 204 | 昼占=False 205 | 命局=False 206 | if self.mingJu.currentIndex() == 1: 207 | 命局 = True 208 | 性别 = self.sex.checkedId() 209 | if 命局: 210 | s = MinGPan(year, month, day, hour, minutes, second, 月将, 占时, 昼占, 211 | __占测的事, 性别, shengNian) 212 | else: 213 | s = ShiPan(year, month, day, hour, minutes, second, 月将, 占时, 昼占, 214 | __占测的事, 性别, shengNian) 215 | self.textBrowser.setHtml(s.toHml) 216 | self.shiPan = s 217 | 218 | @checkValue 219 | def yueJiangOnClick(self): 220 | year = int("0{}".format(self.yearInput.text())) 221 | month = int("0{}".format(self.monthInput.text())) 222 | day = int("0{}".format(self.dayInput.text())) 223 | hour = int("0{}".format(self.hourInput.text())) 224 | minutes = int("0{}".format(self.minutesInput.text())) 225 | second = int("0{}".format(self.secondInput.text())) 226 | __月将 = GetLi(year, month, day, hour, minutes, second)[4] 227 | self.yueJiang.setCurrentIndex(__月将.num - 1) 228 | __占时 = GetShiChen(int(self.hourInput.text())) 229 | self.zhanShi.setCurrentIndex(__占时.num - 1) 230 | 231 | def helpOnclick(self): 232 | # return 233 | helpDialog = HelpDialog(self) 234 | # helpDialog.setWindowTitle("帮助") 235 | # helpDialog.exec_() 236 | helpDialog.show() 237 | 238 | def shenShaOnclick(self): 239 | # return 240 | shenShaDialog = ShenShaDialog(self, self.shiPan) 241 | shenShaDialog.show() 242 | 243 | def timeNowOnClick(self): 244 | self.timeNow() 245 | 246 | def timeNow(self): 247 | nowDateTime = datetime.datetime.today() 248 | self.yearInput.setText("{}".format(nowDateTime.year)) 249 | self.monthInput.setText("{}".format(nowDateTime.month)) 250 | self.dayInput.setText("{}".format(nowDateTime.day)) 251 | self.hourInput.setText("{}".format(nowDateTime.hour)) 252 | self.minutesInput.setText("{}".format(nowDateTime.minute)) 253 | self.secondInput.setText("{}".format(nowDateTime.second)) 254 | self.shengNianInput.setText("{}".format(nowDateTime.year)) 255 | __占时 = GetShiChen(nowDateTime.hour) 256 | # self.zhanShi.setCurrentIndex(GetShiChen(int(self.hourInput.text())).num 257 | # - 1) 258 | self.zhanShi.setCurrentIndex(__占时.num - 1) 259 | -------------------------------------------------------------------------------- /shipan/guaticomment.json: -------------------------------------------------------------------------------- 1 | { 2 | "元首卦": "

《神定经》:统乾之体,大人之象,飞龙在天

《六壬统宗》:(一上克下)以尊制卑,大顺之徵,为诸课首,故名元首。
占主天地得位品物咸亨,事从外来,起男子,忧喜皆实,臣忠子孝,婚谐谋遂,孕生男,兵讼先者胜,贾人获利,官职首擢,利见大人。如日辰年命发用正时六处值旺相乘吉将更逢富贵、官爵、三光、三阳等吉课,仕人贵显不可言。
此课大象顺利十分,然或得凶神恶将,三传不顺,反主下顺上而上不从(说明:上得凶神恶将,上不正)。又如,一上克下,而上休囚死气,下却旺相德合岁月建,反主上虽制下,而下不受制,未可执一也。", 3 | 4 | "重审卦":"

《神定经》:统坤之体,六五黄裳无吉。

《六壬统宗》:

亦名“始入”。以下犯上为逆,徵事有可虞,须再三详审,故名重审。然止于一下克上,为发难之端,故名始入。

占主不忠不孝,事从内起,由女人,孕生女,兵讼後者胜,谋望先难後成,大抵贵顺吉,贵逆凶,墓绝传生旺吉,生旺传墓绝凶,初克末吉,末克初凶,全要末传得吉将、天月德等可化诸凶。

此课利下不利上,然或一下贼上而下休囚上旺相,则下虽乖违不能肆害,如生金不畏死火之类。

", 5 | 6 | "知一卦":"

神定经:统比之体,去谗任贤

《六壬大全》:

凡课有二上克下,或二下克上,择课之阴阳与今日比者而为用神,曰:知一课。比者和也,阳日阳比,阴日阴比,二爻皆动,事有两岐,善恶混处,必知择其比和一善者而用之,故名知一。事宜惟一,允执厥中,占物占人皆在近也。统比之体,乃去谗任贤之课也,比者亲辅也,有不宁方来意。

象曰:比者为喜,不比为忧,词宜和允,兵利主谋,祸从外起,事向朋谋,寻人失物,近处堪求,如课下克上,有嫉妬,日辰贵后主迟疑,或主三克度厄,四克无禄,乱动狐疑,则有上六比之无首凶象,或上克下有嫌疑。日辰贵前,主事顺,及止二克,贞固择一,则有,比六二,自内贞吉之象也。

订论:知一亦名比隣(或二上克下,或二下克上),择课之阴阳与日干比者为用神,阳日阳比,阴日阴比,二爻皆动,事有两岐,必知择而定于一,故名知一。
占主事起同类,祸自外来,失物寻人俱在隣近,兵讼宜和,凡事狐疑不决,若是吉神比者为近,不比为远,若是凶神比者为喜,不比为忧。
此课大端舍远就近,舍疏就亲,恩中有害之象。

《神定经》:金匮经曰:欲知其一,必得其二,谓二上克一下,二下克一上,以比者为用。言比者为近,不比者为远。比者为善,不比者为忧。注曰:二上克下,同类相妬,朋友谗佞,祸从外来,利客不利主(原文:利主不利客,依《六壬大全》修订),二下贼上,妻财斗讼,咒咀不止,占贼不出邑里之地。

", 7 | 8 | "涉害卦": "

《神定经》:
统坎之体,苦尽甘来。
金匮经曰:察其微,见其机,谓二比二不比,当以涉害者为用。涉害复等,先见者为用。以此占人,所作稽留,忧事难解,怀孕伤胎。

《六壬大全》:
凡课有二上克下或二下克上与今日俱比俱不比则以涉地盘归本家受克深处为用,为涉害课。涉者,度也,害者,克也,若五行属土,则以土深浅,如,亥加丑,前行历辰戊未己戌土位五重,归本家亥位,不论孟仲季比用,止取涉度害克位之最深者,故名涉害。占者凡事艰难,必有稽迟,历尽风霜而后得,统坎之体,乃苦尽甘来之象也。
象曰:风波险恶,度涉艰难,谋为利名,多费机关,婚姻有阴,疾病难安,胎孕迟滞,行人未还,如神将凶,三四克,灾深难解,则应坎初六,习坎,入坎象也,或我克他,日辰旺相,神将吉,受克浅,忧浅易解,事难(素键:难,似为艰难,非难以)终成,则应坎卦辞“有孚必亨象”,以是而行,必有功矣。
凡课有二上克下,或二下克上,甚至四克贼,俱比俱不比,以寅申巳亥孟神用,为见机格,如课中有仲季,必待用孟之机深者。盖事之初起,祸福随之,见事,必知机而作,故见机,占事有疑,急须改变,若守旧,则有稽留难解之患也。
象曰,利涉大川,有孚,贞吉,动作见机,不俟终日,名利难遂,胎孕未实,疑事急改犹豫有失,如神将吉以吉言,凶以凶论,乃多算胜,少算不胜,将涉水,不轻进之象也。
凡课有克贼,俱比俱不比,无孟取仲季用,为察微格。盖孟深仲浅,季作微分,课克无孟,必审察仲季之微克者,故名察微,占者恐人不仁,或有小人谋害之意,必思虑提防,无可患也。
象曰:知中有刀,蜜中有砒,大人利见,旧德微施,人情浅泊,世事难披,防范机密,物欲必齐,凡事详神将吉凶言之,乃少算胜而无算不胜,尚中正,不利涉大川之象也。
凡课涉害者,复相等,以四课中先见者用,为缀瑕格。盖涉害数归本家,又复相似,刚日以日上先见神为用,柔日取辰上先见神为用,如二物相并,深中取先,高中取捷(素键:高中科举),冠上有缀瑕玉饰之象,故名缀瑕格,占事艰难,首尾牵连,惟才德服从者吉也。
象曰:两雄交争,经延岁月,人众牵连,灾耗不绝,君子宜亲,小人可辍,胎孕逾期,行人失缺,如月建吉神入传吉,日辰有气虽事延有成象也。

", 9 | 10 | "遥克卦":"

《六壬大全》:
凡课无克,取日干与四课上神相克者为用,曰遥克。课遇有两克相比为用,遥相克贼,故名遥克。如蒿矢为镞,弹身为箭,身物难中,不足为畏。凡事祸福不测,忧在西南而西北有善,乾阳方也。盖此课先尽四课上神克日干为用,曰蒿矢格,如远神克日缓而且轻,折蒿为矢力弱难伤,故名蒿矢,占事始而雷吼驚恐,终却无妨,统睽之体乃狐假虎威之课也。又睽乘異也(小事吉)。
象曰:始有凶势,愈久愈休,忧喜未实,文书虚谋,外谋干己,有客为仇,兵利为主,不利他求,如神将凶、贵逆,日、辰、用神无气,主盗贼阴谋,有载鬼一车之凶象。若神将吉,贵顺,日用有气则干贵,有喜,行人来,访人见,事成,灾祸渐小而安,有婚媾,遇雨吉象也,凶吉应在睽上九推之。
如课上下无克,又无神克日,则以日干遥克课上神为用,曰弹射课。盖我去克他,以致远,如弹丸当箭,遥射傍物,难中,故名弹射。占者事远难就,纵成,虚名虚利,不得实用或日克两神为箭中双鹿,事尤多心两意。
象曰:巳谋他事,祸从内施,兵用客利,事宜后为,访人不见,行人未归,空亡发用,动作尤虚,如神将凶,带刑害,贵逆,主事不睦,多冤仇、盗贼凶象,神将遇德合贵顺,则亲朋和气吉象也。
订讹
蒿矢,神虽遥克,力弱难伤,不能为害,如折蒿矢,故名蒿矢。
占主始如雷吼惊恐终无事,愈远愈小,渐渐消磨,此时有客,不可容纳,主小人口舌,凡事忧在西南,喜在西北,乾天门也,占事人谋己,利主不利客,利後动,利小不利大,神将凶,日、辰无气,主盗贼阴谋,神将吉,日、辰有气,则干贵有喜,行人来,访人见。
弹射,日虽克神,终不能害神,如弹丸为箭,故名弹射。
占主己谋人,利客不利主,利先动,利上不利下,神将吉,遇德合,顺贵,主亲朋和气,神将凶,带刑害,逆贵,主事不睦,及𡨚仇,盗贼,访人不见,行人不来。若克两神,为一箭射双鹿,事尤多心两意也。
此二课,俱主远事虚惊不实,纵有成就亦虚名虚利,带金土煞则能伤人。盖蒿矢见金为有镞,弹射见土为有丸,主蓦然有灾,若传空,又名遗镞失矢,不能成事,大端祝福俱轻,若见太阴、玄武、天空,当有虚诈之事而祸起。
二课有近射,有远射。第二课发用为近射,日之两课自战,多主外事不干于内,凶势略大,不可出尖,第三课、第四课发用为远射,凶势渐小,盖第三课乃辰阳与日干相竞,尚觉凶重有力,不可先动,若第四课无力也。
遥克中,克多论比,涉害论深,以後凡克多者皆如此论。
袖中金
神遥克日名曰蒿矢,日遥克神名曰弹射,然事多动摇不定,主人情倒置,若带金土殺,足能伤人。占人祝福俱轻,求事难成,以蒿为矢,以泥为丸,无利势也。若第二课为用,乃日上两课自战,作事无力,多虚,不干内事,不可出尖,第三课为用,乃辰之阳神自战,两阳相克,作事凶重,有力,不可先动,第四课又无力,蒿矢利主不利客,利小不利大,利後动,占行人来,访人见,若朱雀、勾陈,当有官事、祸从外来。
弹射,利客不利主,利上不利下,利先动,不利占讼,占人不来,访人不见,忧事主散,若见太阴、玄武、天空,当有欺诈虚诞之事,祸从内起,蒿传金为有镞,弹射传土为有丸,主事蓦然有灾,若传空亡,又名遗镞失丸,不成事也。

", 11 | 12 | "虎视卦":"

《神定经》:统履之体,虎蛇当道,履尾之象

《六壬统宗》

“虎视转蓬”:酉中有昴宿,属秋分,为天地关梁,为日月出入门户,且属白虎金位,性主肃杀,义司决断,取以为用,故总以昴星名之。刚者,阳也,阳性从天,男子气浮,则仰视之,如虎视转蓬而动,故名虎视转蓬。

占主惊恐,关梁闭塞,津渡稽留,出行身不得归,恐死于外,大抵祸从外起,惟家居守静则吉。

此课如日用囚死,罡乘死气,蛇虎入传,大凶,病者死,讼者狱。若日用旺相又不在此论。

冬蛇掩目:柔者,阴也,阴性从地,女了气沉,俯视之,如冬日蛇之掩目,故名冬蛇掩目。

占主事暗昧不明,进止两难,女多淫佚,祸从内起,访人不见,行者淹滞,逃亡隐形。
此课如螣蛇入传,尤多怪梦忧疑,或申加卯为车轮倒斫。传见玄武凶甚。惟午加卯为明堂,主万事昌隆,午为离明,卯为天驷房心明堂之宿,凶亦吉也。

二课刚日本乎天者,亲上,传终归干上,从天类也。柔日本本乎地者,亲下,传终归支上,从地类也。以天道言,昴星阴气用事,微霜始降,枯槁皆死,此决断万物收敛精神之时也。以人事言,昴星于五行为金,五常为义,当其言不必信,行不必果,惟义所在,然后决之,故以昴星作课,然虽断之以义,亦归责于己,其可矣,故终末从其日辰也。酉为天狱,二课最忌刑狱,大端惟潜藏稍吉耳。

", 13 | 14 | "别责卦":"

《六壬大全》:此三课不备,别从其类责取一合神为用,故名别责。占者凡事不备,主有留连之体。
象曰:谋为处正,财物不全,临兵选将,欲渡寻船,求婚别娶,胎孕多延,损而能益,事遇神仙。如神将凶,日用休囚,则应凶象,神将吉,日用旺相,则应吉象也。
订论:盖四课不全又不克,欲如昴星取酉而课又不备,只得别从其类责取一合神为用,故名别责。阴阳全无克制,二阳一阴如二男争一女,二阴一阳,如二女争一男,舍正而别求合。夫妇各得芜淫佚之意乎,故亦名芜淫。
占主凡事不备,谋为欠正,且合神事主留连,临兵欲进不进,胎孕多延,凡事倚仗他人,借径而行,吉凶多系于人,不干己也,求婚另娶,占家宅,夫妻事当以淫断。

", 15 | 16 | "八专卦":"

《六壬大全》:
凡干支同位无克取阳顺阴逆三神为用,曰八专课。盖八专日有五,除癸丑日俱有克,无克者,甲寅、庚申,刚日从阳,主超进顺布,己未、丁未,柔日,主退缩逆行,中末传俱并日上神。如甲寅日,干上阳神亥顺数至丑,乃丑亥亥也,丁未日,辰上阴神卯逆数三辰,至丑,乃丑巳巳也。皆日辰阴阳共处,论伏呤四课八字,干支神同一位,如八家同井,事专,故名八专。占理家务重轻易举,不利奔波于外,统“同人”之体,乃大众会盟之课也。
象曰:二人同心,其力断金,阳进男喜,阴进女淫,失资众犍,物失内寻,成功异路,擢显士林。此八传为两课阴阳并,虽主事乖疏,凡事以两课决之,阳日尊长欺卑幼,则主超进,主事速欲出,阴日夫妻怀背,及奴婢反主,柔主退缩,主事迟,欲归,占婚姻进人口主口舌分享,则应九三,三岁不兴之凶象,若龙常天乙吉将及天月二德善神,则应同人九五,大师克相遇,吉象也。
凡八专课遇天后六合玄武一将入传,为帷簿不修格。盖重门树塞,以限内外,讲堂设帐,以别男女,今阴阳共处,男女混杂,又遇后合阴私之神,郑风尤甚,故名帷簿不修,主私泆不明,内失其礼也。
凡八专课逆数到日,中末相并,为独足格。夫三传皆归一神,如路遥驿递,无人传送,独展一足,难行,故名独足格,凡事不能动移,自己尤多费力,或中末传皆空亦然也。
订讹:
八专,有克照常以克贼比涉等项论,干支同位,专聚一处,故名八传。
占主二人同心,其利断金,兵资众犍,物失内寻,阳日尊长欺卑幼,主事超进,迅速,阴日妻奴背夫主,主事退缩迟缓,占婚及进人口,主口舌分离,占忧喜事俱重叠。
此课若逢龙常天乙吉将及天月二德则又有同人协力,众擎易举之象也。
帷簿不修,如甲寅日干之阳神亥顺数三至丑乃丑亥亥也,丁未日支之阴神卯逆数三至丑乃丑巳巳也,八专之课已为尊卑共室,人宅不分矣,但有克者,尚有制缚,不可以淫佚断,独此无克者,任顺逆数云,伸缩而用之,全无克制,防范,故名帷簿不修。
占主外不隔而内不备,事多重叠,忧喜再来,干涉妇人,久而反背,若后合玄阴入传,淫乱必矣。
独足,三传皆归一处,如路遥驿递,无人传送,独占一足难行,故名独足。
占主不能动移,极是费力,商贾不可行,占胎不成,远行宜舟。
此课外有八专中末传皆空者,亦如此断。

", 17 | 18 | "伏呤卦":"

《六壬大全》
统艮之体,守旧等新之课。
订讹:
伏呤,俯伏本家,不能变动,只有呻呤愁叹而已,故名伏呤。
占主屈不得伸,静中思动。
自任,天地鬼神,不动不克,无所取择,自任其己之刚,进用于时,故名自任。
占主自强出关,而当闭塞,惟柔顺守静吉,则事成也。若任己过刚必成愆咎,行人立至,然亦本家暂出之人,原非远也,失物逃亡俱不远,胎孕聋哑,祸患流连,病主不语而呻吟,淹滞岁月,干谒不出。
此课如甲日春占,丙日夏占,庚日秋占,壬日冬占,三刑有气,无克传逢驿马或不得己而动,亦动中有成也。
自信,自信其在己之柔而自用,故名自信。
占主不能动身乃家宅不宁之兆。
此课与自任课占病、产、盗、逃俱同,讼狱俱主土田,关梁俱主杜塞,惟行人则自任立至,自信难期,出行则自任欲行中止,自信潜藏不出,若有丁马俱可言动。
杜传,传行杜塞,故名杜传,占主事中止改图则可成。
指要:
自任自信,天地如一,隐伏未发之象,静则宜,动则滞,一云主事藏匿不动,静中求劳,有屈不得伸之象,失物不远,访人不出,病主不言语而呻吟。心镜云,行人立至门者是本家暂出之人,非远回人至也。阳日尚可言立归,阴日尤难期也,所主皆迟。

", 19 | 20 | "返呤卦":"

《六壬大全》
凡课十二神各居冲位取相克为用,曰返呤课。盖诸神返其位,坎离交易,震兑互换,日辰阴阳往来克贼,反复呻呤,故名返呤。
凡占,来者思去,离者思归,得失未可一定,惟利復旧事,统震之体,重重震惊之课也。
象曰:高岸为谷,深谷为陵,得物尤失,败物反成,安营离散,出阵虚惊,得生于外,害人自承。如巳亥巳返呤,多主改动,取索财物,文章事。卯酉卯,占家宅门户道路事。寅申寅,占远行移动争讼事。遇凶神凶将,主损失,虽动无益,有重重惊恼,则应六五,往来厉,億凶象。善神吉将,主赴省求恩,转官之喜,则应初九,笑言哑哑,吉象也。
凡返呤课无相克,以支辰傍射敌上神为用,曰井栏格。盖返呤多相克,无克惟四日,己丑、丁丑、辛丑、辛未。然丑无克,用巳上神亥,未日用亥上神巳,如傍进倚栏斜冲射之,不易井外,故名井栏射。井栏无来去,必中投辰上神而末投日上神为传,此其法也。占者无事依倚,一身两用之体也。
象曰:行人阻遏,盗贼相攻,内外多怪,上下不恭,傍求事就,直求道穷。三传救护,喜见青龙,如神将凶,则有凶象,吉则有吉象。
订讹
返呤亦名无依,有克照常克贼比涉等项论。彼此相冲往来咨嗟不宁,故名返呤。且十二神各易本位,无所凭藉依附,故名无依。
占主事带两途,远近係心,往返无常,欲动不动,祸自外来,事从下起,北逆分离,有疑莫决,安营离散,出阵败奔,来者思去,去者復来,得失未有一定。巢穴改,宫易位,亲情无始终,病亦两症相侵,行多反復,惟利反旧事。大都 凡动无凭伹,当久动思静而已。巳亥巳占改动取索,财物文字事,卯酉卯占家宅门户道路事,寅申寅占远行移动争讼事,神将凶俱主凶动,有重重惊恼。
此课多主动,若去来空亡,又不以动论。
井栏射,亦名无亲,无克惟丁未、己未、辛未、丁丑、己丑、辛丑,六日。丑无克以丑宫癸水遥射巳宫丙火,未无克以未宫己土遥射亥宫壬水,故丑日以巳上亥神为用,未日以亥上巳神为用,如傍井倚栏斜射之,不出井外,故名井栏射,全是冲开涣散不属,故又名无亲。
占主内外多怪,上下睽隔,井上架木,易欹易斜,不能长久之象,动则宜,静则忧,事无凭依,一身两用,傍求易就,直道难容,凡事速成易破。
此课如遇吉神良将,凡事半遂,尤喜见青龙求护也。

", 21 | 22 | "龙德卦":"

吉泰门

神定经
《心照经》曰:龙德卦者,占事遇太岁今日为用传,发用月将。以此占事,利见大人,当有迁官尽职之事。

六壬大全
惟尊贵求卑下不吉,或带杀,为日鬼,占讼则事干朝廷。

素键:根据神经定,“遇太岁今日为用传”,用传二字可解作“发用”,也可解作“发用、三传,即太岁为发用或在传中”,此处取太岁为发用或在传中立卦。

", 23 | 24 | "三光卦":"

吉泰门

《神定经》
……以此占人,病者有救,囚系得出,市贾有利,所谋皆成,福佑自至,殃祸消散也……

《心镜》
用起日辰俱旺相(用神旺相为一光,日辰旺相为二光),传中復有吉神并(为三光也),三光并立无相克,作事多欢病者轻,纵逢凶将无忧患,囚系官灾事不停,六月戊寅寅时课,三传俱旺贵人荣

《六壬大全》
凡课用神日辰旺相,吉神在中,为三光课。盖日为人,旺相不但诸鬼不能胜而人口又能峥嵘,一也。辰为宅,旺相不但宅居广宽而诸邪又不能入,二也。用神为日用动作,旺相不惟所干无阻,又光其动作,三者皆有光华,故名三光。占者万事任其所为,皆无费力而成,且有吉利。统“贲”之体,乃光明通达之课也。
象曰:课入三光,万事吉昌,刑囚释放,疾病安康,市贾得利,谋干俱良,福佑自至,凶祸消亡。如神将俱和合相生,日辰用神旺相,主迁官进职之荣,始终获喜,必有庆贺,万事吉昌,纵年命凶杀,亦不为凶,则应贲,六五,束帛戔戔,吝,终吉象,若日辰居天乙后,中末囚死,则应三光失明之象。前有功德虚喜,后復抑塞难通,当应贲,六四欲与初九婚姤,乃为九三间隔,未获相贲之象也。
袖中金
用神旺相,吉神临支干有气,末传又逢吉神吉将或带合,三光并照,福佑自至,灾祸自消,吉无不泰。若用神旺相,吉将亦临支干有气,末传却值凶将,刑害交互者,则光而復翳,明而反暗,先祖有财,后来家道颦索。遇此名三光埋影,不可不审末传,勿一概言之。

", 25 | 26 | "三阳卦":"

吉泰门

神定经
《玉衡经》曰:三阳者,用在旺相中为一阳,日辰在天乙前为二阳,天乙顺行为三阳。
注曰:用得旺之气,天乙顺治,日辰在天乙前,终得吉将,以此占人,身无忧患,所求皆成也。
……以此占人,病者无忧,所为皆成,囚系得释,父安得起,凶灾自退,所求皆得。……

《六壬大全》
凡课天乙顺行,日辰有气居前,旺相气发用,为三阳课。盖天乙贵人左行正理,阳气顺,一也。日辰前于天乙,阳气伸,二也,日辰旺相阳气进,三也,此三者,阳气开泰,万物光辉,更兼吉将,故名三阳。占者凡事吉庆,所求皆遂,统“晋”之体,乃龙剑呈祥之课也。
象曰:课入三阳,官爵翱翔,讼狱得释,病疾无妨,财喜遂意,行人还乡,贼来不战,孕产贤郎。如神将上下相生,谋为万事皆利,有官者,职位高迁,病者死欲入棺当活,囚者刀虽临项无虑,纵逢刑害,喜事不迟,则应晋六五,往吉,无不利之象。若天乙辰戌,为贵人坐狱,狱,阴地也,用神为为鬼,贼克日,中末无救神,则应三阳不泰,占事暗昧不就,未免先吉后否,则应晋九四,鼫鼠,贞厉之象也。

", 27 | 28 | "三奇卦":"

吉泰门

《神定经》
……三奇者,临日辰人年发用,皆主吉庆之象。虽与刑杀相会,罪亦可赦也。……以此占人,当有吉庆之事。……

《心镜》
三奇发用逐旬行,两处区分共一名(原注:一卦有两般奇,一卦有两般名),甲午甲申神后是,寅辰二甲在登明,子戌旬中居大吉,不忌杀之并与刑(原注:以上一段不忌刑杀)。甲日胜光乙日巳,支逆随午巳丑停(原注:甲日在午,乙日在巳,从子逆行至丑住,至丑迴向未上,起庚为奇),庚却顺流奇在未,癸尽天魁总有灵(原注:庚日在未,顺行癸日到戌),占值丙奇皆吉悦,传内天官更要精(原注:两奇得一即吉,天卦有两般奇,旬奇:甲午、甲申旬在子,甲寅、甲辰旬在亥,甲子、甲戌旬在丑,干奇:甲日在午,乙日在巳,丙日在辰,丁日在卯,戊日在寅,己日在丑,庚日在未,辛日在申,壬日在酉,癸日在戌)。

《六壬大全》
凡课得旬日之奇发用或入传,为三奇课。如甲子、甲戌旬用丑,甲申、甲午旬用子,甲辰、甲寅旬用亥,,此为旬三奇。甲日用午丙奇辰,乙巳丁卯戊奇寅,己丑庚未辛申位,壬奇取酉癸戌云,此为日奇。盖鸡鸣乎丑,日精已备,鹤夜半鸣,月精已备,斗转乾亥,星精已备。又丑为玉堂,子为明堂,亥为绛宫,此三者,日月星精,为旬用之奇,故曰三奇 。
占者百祸消散,凡事吉利,统“豫”之体,乃上下悦怿之课也。
象曰:万事和合,千殃解除,婚求淑女,孕育贤儿,士有奇遇,病获良医,纵乘恶将,凶去吉随。如旬、日奇并临,吉课为上。有旬奇,无日奇,亦可用。或逢亥子丑兼全,为三奇联珠,大吉。更遇天上三奇乙丙丁,或地下三奇甲戊庚,入传尤利。居官则因异政超擢,出军利用奇兵取胜,凡事逢凶化吉,则有“豫”六二,“贞吉”之象。若有干奇无旬奇,神将凶,则应初六,“鸣豫凶”也。
订讹
……,若三传亥子丑为联珠三奇,或天上三奇乙丙丁,地下三奇甲戊庚为遁奇,……,旬奇干奇并临为上,有旬奇无干奇亦可,若止有干奇不名三奇。
占主凡事逢凶化吉,不忌刑杀,事有奇遇,官以异政超擢,出军奇兵取胜,婚谐,孕生贵子,病讼解。
此课如奇作空亡,未象奇精有损,其福减半,先明后暗,吉凶皆无成。
神中金
……,主灾散福临。
大抵三辰连茹,事欲行不行,欲止不止,节外生枝,顺则先进后退吉而顺,逆则选退后进。凡占,必见人情不和,兄弟朋友失和气之象,死三奇卦后有死奇卦甚明。

", 29 | 30 | "六仪卦":"

吉泰门

《六壬统宗大全》
(旬仪支仪发用,或入传是也)……,盖旬首乃六阳,支仪为星宫之长,直符之使,此旬与支之冐领,为诸神仪表,故名六仪。旬仪支仪拜临为上,有旬仪无支仪亦可,若止有支仪不名六仪。
占主凡事逢凶化吉,不忌刑杀,求望得,投书干贵宜,病遇良医,罪赦官擢,若旬首为用,更作今日贵人为富贵六仪,作廉幕官,士人高第,若奇仪全遇,凡百吉不可言。
此课吉惟克行年凶。

", 31 | 32 | "铸印卦":"

吉泰门

《六壬统宗大全》
  (三传巳戌卯)巳为炉,戌为印,卯为印模,戌中辛金逢巳丙火作合煅炼铸成符印,故名铸印,卯为车,又名铸印乘轩。
  占主符命入手,科甲(素键:根据《六壬大全》补入“甲”字)官爵俱高,干谒吉,如戌巳(素键:《六壬大全》作戊、己)又为生日之印,更遇太常为绶,乃印绶双全,定主转迁超擢。
  此课多主事成迟晚,然惟利官,庶人不吉,更不利于病讼,忧产四事。又夏月巳午日时戌,值蛇雀(素键:《六壬大全》作,巳午日时,或值),火太旺,戊(素键:《六壬大全》戊作戌)卯或值空亡,则为破印损模,官必不迁,兼遇神将凶,主先成后破,徒劳心力,大都铸印乘轩,须得驿马、太阴、六合乃为真体,又有丙丁日,戊加午上(素键:《六壬大全》作,又有丙子日,戌加干上),得吉将亦名铸印,春夏丙丁日火太过,不在此论。然须白虎、太阴、蛇雀金火之将入传,若金少火多,火少金多,为五行不备,必有所伤,或末传得天后、玄武,更临水乡,与日相破,名曰铸印不成,来意主望官爵,吉事欲成,中阻耳。又铸印课,乘日墓主退退失或旧事再新。

《心镜》
  天魁是印何为铸,临于巳丙冶之名,中有太冲车又在,铸印乘轩官爵成,传中有气将为速,复又兼之驿马并,太阳所主阴私立,天乙顺行君令明(原注:三传巳戌卯为铸印,盖巳为炉,戌为印,卯为模范故也。传中又有太阴、六合神将旺相相生最宜求官,忌空亡,眉批:以三传言)

", 33 | 34 | "斫轮卦":"

吉泰门

《六壬统宗大全》
  (卯加庚辛申酉发用)卯为车轮,金为斧斤,木就金斫,故名斫轮
  占主禄位高迁,革故鼎新之象,更喜戌为印,太常为绶入传,卯加庚与申为上,辛酉次之,缘卯中乙木与申中庚金作合成器或壬癸日见水神为舟楫,初末有马引从为轩车,能任重致远,除官必矣。斫轮来意主望官事,先历艰难,后却有成,盖木畏金故。盖艰难然后成也,将得龙常阴合,方成其体,求财大获,寅亦是木,如何不作斫轮,盖寅乃天樑,成器不须斫也。
  此课多主事成迟晚,占孕与病讼忌之,或木休囚乘白虎为棺椁,值空亡为朽木难雕,须另改业。春季甲乙日寅卯时木太重为伤斧,秋季庚辛日申酉时金太重为伤轮,反凶,或辛卯日,干上卯,为财就人,宜速取之,缓则被木克其戌土,反有害也,与乙未日未加乙同。若传见本日墓神,名曰旧轮再新,来意主退官失职再谋复兴之意,大都斫轮课木日艰难,火日灾疾,金日获福,水日心不定,变异艰难中遂意,土日流转。

", 35 | 36 | "轩盖卦": "

《六壬大全》
  凡课值胜光为用,遇太冲,神后,为轩盖课。神后子也,为紫微华盖,太冲卯也,为天驷天车,胜光午也,为天马,此三神并遇,如乘驷马轩车高张华盖,故名华盖(素键:“华盖”二字疑为“轩盖”,否则于意不通)。占者加官荣显,凡事吉庆,统“升”之体,乃仕子发达之课也。
  象曰:课遇高轩,车马皆全,朱轮稳上,诏用荣宣,求财大获,疾病难延(素键:车马华盖俱逢,极动之象,占病凶,有身亡之忧),干贵欢会,行者必旋。如胜光又作月内天马,太冲又作月内天车(素键:《六壬统宗》,“卯又作月内天车,其动犹速”),正七月内是也。然车马既动,出者必行,闻贼必来,余月轩盖又带三交,出军冲野,决防占斗,论讼换司易衙,病者魂游千里,或年命有龙,出行大雨(素键:“年命”二字下缺字,“有龙”二字疑当与“出行大雨”为一句,因“青龙”主雨,出行遇“青龙”,当遇雨,《六壬统宗》“高盖有龙,出行则大雨…………,或三传带杀,乘蛇死气,克年命日辰”),车马作财,财自外来,更日用旺相,又为太岁月将德神,上乘贵人龙常后合吉将,当主出入见君拜官,驿马高车,华盖执节,喜庆宠禄,十全之荣,官爵当践公卿之位,则应初六,允升,大吉之象。若三传带杀,乘蛇虎死气克年命日辰,或空亡,或卯作丧车,则刑冲从凶而动,变轩盖为三交,身弱人衰,则为乘轩落马之象,主伤躬被脱,望事无成,则应上六,冥升,消不富之象也。

", 37 | 38 | "官爵卦":"

《神定经》
  《灵辖经》曰:官爵卦者,谓人年命日辰发用见印绶驲(素键:“驲”也叫传(zhuàn )车。 古代驿站 用来送信的车。)马,当得官爵之象也。
  注曰 :官爵者,河魁太常为印绶。驲马者有四种,第一太岁驲马,第二本命驲马,第三月建驲马,第四今日驲马。
  若用起此神,或传中见之,皆主得官之象。有旺相气者,求一切大小事者皆得也。
  注曰:驲马只有三命中驲马也,寅午戌在申,申子辰在寅,亥卯未在巳,巳酉丑在亥。
  若太岁人年月建今日遇之,即事是官爵卦也。
  假令太岁甲戌,有人年四十五生庚寅,以正月庚寅日亥时占时(素键:“占时”疑为“占事”),则太岁人年月建今日驲马并在申,用起传送,为四般驲马。以此占人,当有迁官荣升之象。第一课申庚,第二课申申,三课寅寅,四课寅寅。初传申,天后兄;中传寅,青龙财;末传巳,朱雀官鬼。

《心镜》
  印绶两般俱用见(原注:天魁、太常悉为印绶。又云,天魁为印,太常为绶,此两般初用,但得其一,亦是吉卦,齐临甚美)四驿马因传内逢(原注:四驿马者,太岁、月建、日辰、行年。假如二月建卯,驿马在巳,行年立子,驿马在寅是也,余效此)(眉批:以四课三传言),值此名为官爵卦,终吉何忧选不通(传终若得吉神将者,求官入选,迁改并通也)。

《六壬大全》
  凡课得岁月年命驿马发用,又天魁太常入传,为官爵课。驿马者,三合头冲是也,为驿递之神,传命之使也,人命行年太岁月建并用之马,华丽异常,又戌为天魁为印绶,荣加官职爵禄,名曰官爵也。占事吉庆,仕宦升擢,统“益”之体,鸿鵠冲霄之课也。
  象曰:官爵印绶,得之荣华,财名吉利,病讼堪嗟,访人不在,行者还家,孕生贵子,仕宦尤佳。如四马带印绶,更遇德神、天马、青龙、日辰二马尤吉。日用旺相,主事速成,仕宦有迁官进爵之庆。常人有贵财利之吉,士子何忧上选不通,则应“益”初九,利用为大作,元吉之象。若驿马被冲破,魁常值空亡,日用囚休,主事迟滞而返恓惶,则为官爵失印之课,主官遭黜罚,文书沉匿,谋为不成,变喜为忧,当应上九,立心,勿恒,凶之象也。

《六壬统宗》
  (或驿马发用,印绶入传,或印绶驿马入传,都要临日辰年命为的)天魁印绶也,驿马使命之神也,此拜除官爵之象,故名官爵。
  占主无官得官,有官进爵,传中合神动,更主重迁,如寅为驿马发用,末传亥是也。驿马既动,行人至,贼来,求望遂,病必魂游千里,讼者遍于诸司,孕生贵子访人不在。
  此课若驿马逢冲破,官爵淹留,印绶遇空亡,官爵脱失。

《神定经》
  官爵转授迟速第五十,引《灵辖经》行年,本命,月建,今日四等驿马

素键注:
  各书对官爵卦成立条件,皆有不同,今取此课成立条件为:
  1、戌与太常入传
  2、太岁、月建、日支、行年、本命的驿马入传
  戌为印,太常为绶,只要传中见到戌、太常、驿马,皆为官爵卦。发用为事之始,中为事之壮,末传事之终,若印绶或驿马仅限于初传,多有狭隘,如,占官职,初传不利求官,中末见印绶驿马,为事之开始不利,终得官职。
  太岁为朝廷,月建为省级,日支为工作,取此三者驿马当无可争议。行年为人,本命也为人,若只取行年驿马,不取本命驿命,于理不通,故,行年、本命驿马同时取,此二马代表人之动。

", 39 | 40 | "富贵卦":"

《神定经》
  《灵辖经》曰:富贵卦,占遇天乙贵神乘旺相气,上下相生,临日辰人年发用,皆为富贵之卦。
注曰 :人年辰上得吉神良将,有旺相气,用神始终旺相,则为积代富贵。若得凶神恶将,有旺相气者,先是贼人贼子,暴得名位也。
假令人年立寅,以十月丙寅日巳时占事,阴阳上下无克,惟登明遥克日为用。六丙日治登明,冬月水旺,为天乙乘旺气,上下相生为用。以此占人,为积代富贵之象。第一课寅丙,二课亥寅,三课亥寅,四课申亥。初传亥,贵人官;中传申,玄武财;末传巳,天空兄弟。

《心镜》
  天乙加来乘旺相,临在行年与日辰,发用传中吉有气,即是从前富贵人,中遇凶神近荣显,但看青龙足宝珍。(原注:末传吉将,求官显达也)

《六壬统宗》
  (天乙发用乘旺相临日辰行年,传终有气是也,又干支逢禄马亦是)天乙为十二神元首,专主财喜、官爵等事,富而且贵,故名富贵。
  占主家昌官显富贵两全,孕生贵子,讼理谋遂,如传遇戌加巳又为富贵权印之象,更吉。若遇太常为绶及驿马乘乘青龙,主积代富贵,无官者有官,有官者高官。
  此课如贵人入狱,又名势消课。告贵不允,所占皆凶。乙辛辰戌日及辰戌年命之人,又不以坐狱论。又贵人坐狱,为受贿,宜阴祭私祷。凡传见昼夜两贵,主告贵求事必干两处贵人成就然。或四课三传皆昼夜贵,为遍地贵人,乃贵多不贵,告贵反无依,在任多差使,或权摄不一,占讼主干多官,尤凶。日贵在夜,夜贵在日,为贵人蹉跌,告贵干事,多不归一。然日贵在夜,开眼作暗,夜贵在日,自暗而明。日贵临夜贵,夜贵临日贵,官访官得见,下人谒官不见,以贵往见贵故也。贵在干前事不宜迫,迫反为贵所怒,贵在干后,宜催,不催事慢。两贵逢空或事许后无成,或误报虚喜,换旬可成。两贵坐受方不可告贵用事,占讼贵怒。朱雀所乘神克贵,求文书,贵人忌惮。六丁日,贵作日鬼临日,占官利,占病,神祇所害,临支,家神致病,宜修设安慰宅神,墓鬼尤凶。贵作六害,占讼理直而遭曲断,此皆不讼发用与否也。

素键注:
  各书对富贵卦成立条件,多有不同,今取此课成立条件为:
  1、天乙乘神旺相,天乙发用
  2、日、辰、行年、本命上神有一处为天乙

", 41 | 42 | "时泰卦":"

《神定经》
  《灵辖经》曰:时泰卦者,谓占得太岁为用为天子,月建所合为青龙。若用临发用日辰人年者,此占之,利见大人,有冥福相助也。
  注曰:用得太岁为天子,传得月建为青龙,宜见天庭,福神相助,必有官爵之象。
  假令寅年六月乙丑日丑时占事,四课阴阳中见功曹临酉,下克上为用,此名发用太岁为天子。传见小吉,将得青龙,此为月建会青龙。以此占人,皆为利见大人,有冥福助。第一课酉乙,二课寅酉,三课午丑,四课亥午。初传寅,中传未,末传子。

《大六壬灵觉经》
  《灵辖经》曰:时泰课,占时得太岁发用,为天子月将所合,为青龙。若临日辰年命发用,为时泰课。利见大人,有福神相助,当有官爵荣迁之喜。
  如寅年六月乙丑日丑时占事,四课中阴阳见功曹临酉,下克上为用,此太岁为用,传见小吉,得青龙为月建,是为时泰课,宜谒尊贵,觐天庭,有福神相助也,此虽夜时,但日间占不用夜贵,只子贵逆治,至未在寅上得青龙太岁发用,旺得青龙贵人。

《六壬大全》
  凡课用起太岁,月建乘青龙,六合又带财德之神,为时太课。盖太岁为天子,月建为诸侯,青龙为官长尊贵、钱财、喜庆吉神,六合为谋干利禄、婚姻和合吉利。四者为用并入传,更为日辰财德吉神,如人时运通太,故名时太。占者万事亨利,统“泰”之体乃天地和畅之课也。
  象曰:课入时泰,皇恩欲拜,灾患潜消,谋为无碍,逃亡必归,盗贼自败,孕育贵儿,前程浩大。如初传青龙,末传六合,或初传六合,末传青龙,但逢太岁、月建、月将并财德,合吉神,则为福神相助,利见大人,朝天子,谒诸侯,大贵人皆吉。仕宦则逢荣宠,诏命乔迁,常人则获财吉,大有嘉庆,当应“泰”六五,帝乙归妹,以祉元吉之象也。
  如子年戌月戊寅日戌时,卯将。子为太岁,又为日财德合,加未为用,初传青龙,末传六合,为时太课。
  订讹
  但逢太岁月建,作日财德,太岁发用更佳,入传亦同。
  天恩(干支得用乘贵人,兼青龙、天后入传或在年命是也)干支属本季旺气,谓之得用,如春占值甲寅乙卯日之类,兼贵龙后凑合,是上天布降恩泽,故名天恩。
  占主仕者膺朝廷恩典,赏人获贵人恩惠,孕生贵子,病痊,囚赦。
  此课若传见空亡,又名天恩未定,事多虚喜,上天虽有意施惠,犹豫未决。

素键注:
  《心镜》上没有这个卦,《六壬统宗》上虽有此卦,但未找到原文,似是文字缺。
  此卦《神定经》与《灵觉经》都引《灵辖经》,两者文字虽然类似,但有差异,疑为传写错误。《六壬大全》又多了“六合又带财德之神”,疑为《六壬大全》认为太岁发用,月建乘青龙入传,只是贵而不富,加上“六合又带财德之神”才为富的象。六壬中“青龙”可以象大财,已经有“富”的象,因此依《神定经》的注取此卦成立条件为:
1、太岁发用
2、月建乘青龙入传

", 43 | 44 | "伏殃卦":"

凶否门

《神定经》
《心照》曰:伏殃卦者,谓天鬼发用,或临日辰年命,以应此卦。
天鬼煞者,以正月从酉上逆行四仲,周而复始也。

《心镜》
天鬼常依四仲神,建寅居酉逆相寻,(原注:天鬼一名伏殃,正月酉,二月午,逆行四仲。凡主伏兵杀伤,或全家病,宜禳祷以除之。)行年日上如逢此,殃伏兵伤乱杀人。(眉批:以月年辰上言。)

", 45 | 46 | "罗网卦": "

凶否门

《神定经》

《心镜经》曰:罗网卦者,谓日辰前一辰为天罗,所冲为为地网。若发用日辰年上,及应此卦。徐道符曰:占遇天罗地网,当主官灾疾病,各以神将言其吉凶所用也。

《心镜》:日前一辰天罗杀,对冲名为地网神,发用行年支干上,官灾病厄是其迍。朱雀火灾白虎病。腾蛇忧梦怪惊人。

《六壬统宗》:罗网前位神覆盖遮隔,不得出头,故名罗网。占主身宅俱不便利,病危官灾,谋为多拙,遇丁马更凶。此课得年命冲破罗网之神,为有救。

", 47 | 48 | "微服卦": "

《神定经》
  《曾门经》曰:阴阳失位为微服,天乙立私门为蹉跎,主君子不安其位,庶人不安其居也。
  乐产曰:阴阳失位,君子将迁,小人时黜。
  假令正月辛亥日寅时占事,小吉传送为日辰之阳,并为天乙後,天罡太乙为日辰之阴,并在天乙前,此名阴阳失位,为微服卦。天乙临卯酉,贵人立私门,为蹉跎也。余倣此。

", 49 | 50 | "度厄卦":"

《六壬大全》:凡四课内,三上克下或三下贼上为度厄课,盖上为尊下为卑,三上克下则长欺幼,势必遭厄,三下贼上,则长不正,幼乃凌长,为度厄,占者家宅欠利,老幼见灾,统剥之体,乃六亲永炭之课也

象曰:事忧老幼,患病重来,家门不吉,骨肉尤乖,出军失利,行者多灾,类神旺相,祸去富来,如发用阳神乘凶将,主伯叔尊长有灾,阴神主姑姨幼小有灾,当应剥不利攸往之象,日用旺相,乘吉将主幼得长力,长得幼力,则应上九君子得舆之象。

订论:
度厄(三上克下曰幼度厄,三下贼上曰长度厄)三上克下,主卑小有厄难,故曰幼度厄,三下贼上,主尊上厄难,故名,长度厄
占主家门不吉,骨肉乖离,幼度厄,若子孙发用,凶神入墓,卑者更凶。长度厄,若父母发用,凶神入墓,尊者更凶,若仕者占,主事从鄰邑发动,山鹊合群,同气相亲之兆也,神将吉,因动成喜,神将凶,面合心离,或反有暗害,或与刑杀并,及旺相气,凶易成,若与德合并,不能害也。
此二课同下二课俱以比者为用,俱不吉,然有救又不以凶断。如火克金,则水为救之类。

", 51 | 52 | "无禄绝嗣卦": "

《神定经》:统否之体,上下僭乱

无禄卦:《曾门经》曰:四上克下,法曰无禄,空室无人,老必孤独,臣子受殃,六亲死亡,从此离散,客胜主负,利于先起。 注曰:君以臣为下,父以子为下,兄以弟为下,夫以妻之下,今四上克下,无下贼上,故曰无禄。

绝嗣卦:
《曾门经》曰:四下贼上,法曰绝嗣,亡其先人,孤独无嗣,宜为主人,利于后起也。注曰:臣事君,子事父,弟事兄,妻事夫(内继命)今下贼上,是谓绝嗣。法主臣轻其君,子慢其父,弟背其兄,妻叛其夫,此时若生男女,当克父母,故亡其先人,是谓绝嗣。

《六壬大全》:凡课四上俱克下为无禄课,盖日辰阴阳俱相克不得其所,不免投辰上两课,辰上阴阳又相克,则无所投之路,占者多主孤独,如四上克俱克下为无禄格,主庶人不禄,有官罚职,轻则罚俸,重则削职,盖以上制下,臣子受殃,屈者难伸,对敌利客,讼宜先起者胜,惟火多克金,有水可救,其课,统否之体,乃上下僭乱之课也。
象曰:上克无禄,下克绝嗣,君臣悖逆,父子分离,求谋不遂,动作多疑,三传有救方免灾危,如神将凶,则应六三包羞凶象,神将吉有救神则应上九先否后喜之象也。
凡四下俱贼上,乃为绝嗣之格,乃主小人无礼,暗算、横灾、殃祸、病者死、逃者转匿,尊长见灾,战斗利主,讼宜后对,中年多子息,老后主孤独。

", 53 | 54 | "连珠卦":"

《心镜》
吉泰门
孟仲季三传,尊卑位不偏(眉批:以三传言)或是岁月日,累累月相连,皆曰连珠卦,事绪百盈千,凶则灾不已,吉则庆缠联,三传同一处,谋幹利成全,岁月日时建,顺速逆迟延。

《六壬统宗大全》
粘连门
(或三传孟仲季相连,或三传岁月日相连)连如贯珠故名连珠
占主吉凶各重叠不已,进连珠事顺,退连珠事逆

素键:根据《统宗大全》,三传“日月年”也取为连珠卦

", 55 | 56 | "连茹卦":"

《六壬统宗大全》
(三传不断)三传接连相为牵引,有拨茅连茹之象,故名连茹。
占主吉凶各有重叠,孕必连胎,士获交举,时旱多晴,天阴久雨,进连茹事顺,值空亡,则退可远害,退连茹事逆,值空亡,则进可消灾,退连茹又名失友。主事欲行不行,人情欠美,或三传亥子丑为三奇连茹,万事和合。


神中金
……,大抵三辰连茹,事欲行不行,欲止不止,节外生枝,顺则先进后退吉而顺,逆则选退后进。凡占,必见人情不和,兄弟朋友失和气之象,死三奇卦后有死奇卦甚明。(素键:袖中金,此文录自,《六壬大合》的“三奇课”一节)

" 57 | } 58 | -------------------------------------------------------------------------------- /shipan/shipan.py: -------------------------------------------------------------------------------- 1 | import regex 2 | import json 3 | from prettytable import PrettyTable 4 | from ganzhiwuxin import * 5 | from common import GetLi 6 | from shipan import guati 7 | from common.moonMansions import getMoonMansion 8 | 9 | 10 | class NoSanchuan(Exception): 11 | def __init__(self, msg): 12 | super().__init__() 13 | self.__msg = msg 14 | 15 | def __str__(self): 16 | return self.__msg 17 | 18 | 19 | def 寄宫(g): 20 | 寄宫映射 = [0, 支("寅"), 支("辰"), 支("巳"), 支("未"), 支("巳"), 支("未"), 支("申"), 支("戌"), 21 | 支("亥"), 支("丑")] 22 | if not isinstance(g, 干): 23 | raise ValueError('只有干才有寄宫') 24 | return 寄宫映射[g.num] 25 | 26 | 27 | def 干Of寄宫(d): 28 | if not isinstance(d, 支): 29 | raise ValueError('从支得到干') 30 | ganList = [] 31 | for i in range(1, 11): 32 | if 寄宫(干(i)) == d: 33 | ganList.append(干(i)) 34 | return ganList 35 | 36 | 37 | class ShiPan(): 38 | 39 | def __init__(self, year, month, day, hour, minutes, 40 | second, 月将, 占时, 昼占=True, 占测的事="", 性别=0, 生年=2018): 41 | self.year = year 42 | self.month = month 43 | self.day = day 44 | self.hour = hour 45 | self.minutes = minutes 46 | self.second = second 47 | self.yueJiang = 支(月将) 48 | self.zhanShi = 支(占时) 49 | self.昼占 = 昼占 50 | self.占测的事 = 占测的事 51 | self.性别 = 性别 52 | self.生年 = 生年 53 | self.四柱与节气 = GetLi(year, month, day, hour, minutes, second) 54 | self.moonMansion = getMoonMansion(year, month, day, hour, minutes, second) 55 | self.占日 = self.四柱与节气[2] 56 | self.空亡 = self.__空亡 57 | self.tp = TianPan(self.yueJiang, self.zhanShi) 58 | self.sk = SiKe(self.tp, self.占日) 59 | self.sc = SanChuan(self.tp, self.sk) 60 | self.tianJiang = 天将盘(self.tp, self.sk, self.昼占) 61 | self.本命, self.行年 = self.__年命() 62 | self.格局 = self.sc.格局 63 | self.格局comment = [] 64 | guaTiModules = guati 65 | guaTiFuns = [] 66 | for attr in (a for a in dir(guaTiModules) if a.startswith('do_')): 67 | callback = getattr(guaTiModules, attr) 68 | guaTiFuns.append(callback) 69 | for fun in guaTiFuns: 70 | fun(self) 71 | # with open('shipan/guaticomment.json', 'r', encoding='UTF-8') as f: 72 | # guaTiCommentJson = json.load(f) 73 | if "虎视" in self.格局 or "冬蛇掩目" in self.格局: 74 | self.格局.append("虎视卦") 75 | if "见机" in self.格局 or "察微" in self.格局 or "复等" in self.格局: 76 | self.格局.append("涉害卦") 77 | # for i in self.格局: 78 | # __g = ("
" 79 | # "{}:" 80 | # "
{}
") 81 | # __gc = guaTiCommentJson.get(i) 82 | # if __gc is None: 83 | # continue 84 | # self.格局comment.append(__g.format(i, __gc)) 85 | 86 | @property 87 | def table(self): 88 | __sanChuan = [self.sc.初, self.sc.中, self.sc.末] 89 | __tianJiang = [self.tianJiang[i] for i in __sanChuan] 90 | 91 | xSanchuan = PrettyTable() 92 | 93 | xSanchuan.header = False 94 | xSanchuan.padding_width = 0 95 | xSanchuan.border = 0 96 | 97 | for i in range(0, 3): 98 | xSanchuan.add_row([" ", "", self.sc.六亲[i], self.sc.遁干[i], 99 | __sanChuan[i], __tianJiang[i]]) 100 | 101 | siKeTianJiang = ["", ""] 102 | siKeTianJiang.append(self.tianJiang[self.sk.支阴神]) 103 | siKeTianJiang.append(self.tianJiang[self.sk.支阳神]) 104 | siKeTianJiang.append(self.tianJiang[self.sk.干阴神]) 105 | siKeTianJiang.append(self.tianJiang[self.sk.干阳神]) 106 | 107 | xsiKe = PrettyTable() 108 | 109 | xsiKe.header = False 110 | xsiKe.padding_width = 0 111 | xsiKe.border = 0 112 | 113 | xsiKe.add_row(siKeTianJiang) 114 | siKeTable = [ 115 | ["", "", self.sk.支阴神, self.sk.支阳神, self.sk.干阴神, self.sk.干阳神], 116 | ["", "", self.sk.支阳神, self.sk.支, self.sk.干阳神, self.sk.干]] 117 | xsiKe.add_row(siKeTable[0]) 118 | xsiKe.add_row(siKeTable[1]) 119 | 120 | __tp = self.tp 121 | diPanTable = [[支("巳"), 支("午"), 支("未"), 支("申")], 122 | [支("辰"), None, None, 支("酉")], 123 | [支("卯"), None, None, 支("戌")], 124 | [支("寅"), 支("丑"), 支("子"), 支("亥")]] 125 | tianPanTable = [] 126 | for i in diPanTable: 127 | __row = [] 128 | for j in i: 129 | if j is None: 130 | __row.append("") 131 | else: 132 | __row.append(self.tp[j]) 133 | tianPanTable.append(__row) 134 | 135 | tianPanTable[1].insert(0, self.tianJiang[tianPanTable[1][0]]) 136 | tianPanTable[1].append(self.tianJiang[tianPanTable[1][-1]]) 137 | 138 | tianPanTable[2].insert(0, self.tianJiang[tianPanTable[2][0]]) 139 | tianPanTable[2].append(self.tianJiang[tianPanTable[2][-1]]) 140 | 141 | __tmp = [] 142 | for i in tianPanTable[0]: 143 | __tmp.append(self.tianJiang[i]) 144 | __tmp.insert(0, '') 145 | __tmp.append('') 146 | tianPanTable[0].insert(0, '') 147 | tianPanTable[0].append('') 148 | tianPanTable.insert(0, __tmp) 149 | 150 | __tmp = [] 151 | for i in tianPanTable[-1]: 152 | __tmp.append(self.tianJiang[i]) 153 | __tmp.insert(0, '') 154 | __tmp.append('') 155 | tianPanTable[-1].insert(0, '') 156 | tianPanTable[-1].append('') 157 | tianPanTable.append(__tmp) 158 | 159 | xtianPan = PrettyTable() 160 | 161 | xtianPan.header = False 162 | xtianPan.padding_width = 0 163 | xtianPan.border = 0 164 | 165 | for i in tianPanTable: 166 | xtianPan.add_row(i) 167 | 168 | return [xSanchuan, xsiKe, 169 | xtianPan] 170 | 171 | def __str__(self): 172 | # shipanPrint = [str(self.__天盘), str(self.__四课), str(self.__三传)] 173 | __table = self.table 174 | __string = "" 175 | for i in __table: 176 | __string = "{}\n{}\n".format(__string, i.get_string()) 177 | return __string 178 | 179 | @property 180 | def toHml(self): 181 | __table = self.table 182 | __tableString = "" 183 | for i in __table: 184 | __tableString = "{}{}".format(__tableString, i.get_html_string()) 185 | __spTable = '
{}
'.format(__tableString) 186 | __head = ''' 187 | 188 | 197 | ''' 198 | __spHeader = "
{}年{}月{}日{}时{}分{}秒
".format(self.year, 199 | self.month, 200 | self.day, 201 | self.hour, 202 | self.minutes, 203 | self.second) 204 | __spHeader = "{}
占测的事:{}
".format(__spHeader, self.占测的事) 205 | __spHeader = "{}
四柱:{} {} {} {}
{}
{}
".format( 206 | __spHeader, 207 | self.四柱与节气[0], 208 | self.四柱与节气[1], 209 | self.四柱与节气[2], 210 | self.四柱与节气[3], 211 | self.四柱与节气[5], 212 | self.四柱与节气[6]) 213 | __昼占 = "夜占" 214 | if self.昼占: 215 | __昼占 = "昼占" 216 | __spHeader = ("{}
月将:{}   月宿:{}   占时:{} {}   " 217 | "(空亡: {} {})
").format( 218 | __spHeader, 219 | self.yueJiang, 220 | self.moonMansion, 221 | self.zhanShi, 222 | __昼占, 223 | self.空亡[0], self.空亡[1]) 224 | __spHeader = "{}
性别:{} 本命:{} 行年:{}
".format( 225 | __spHeader, "男" if self.性别 == 0 else "女", self.本命, self.行年) 226 | __格局 = "
卦体: {}
".format(" ".join(self.格局)) 227 | __格局comment = "" 228 | for i in self.格局comment: 229 | __格局comment = "{}
{}
".format(__格局comment, i) 230 | __html = "{}{}{}{}{}".format(__head, 231 | __spHeader, 232 | __spTable, 233 | __格局, 234 | __格局comment) 235 | 236 | return __html 237 | 238 | def setGuaTi(self, g): 239 | self.格局.append(g) 240 | 241 | @property 242 | def 天盘(self): 243 | return self.tp 244 | 245 | @property 246 | def 四课(self): 247 | return self.sk 248 | 249 | @property 250 | def 三传(self): 251 | return self.sc 252 | 253 | @property 254 | def __空亡(self): 255 | d = [] 256 | gan = self.占日.干 257 | zhi = self.占日.支 258 | jia = 干("甲") 259 | 260 | delta = gan - jia 261 | 262 | xunShou = zhi + (-1 * delta) 263 | 264 | return [xunShou + (-2), xunShou + (-1)] 265 | 266 | def __年命(self): 267 | 本命 = GetLi(self.生年, 5, 20, 12, 0, 0)[0] 268 | if self.性别 == 0: 269 | 行年 = 干支(干("丙"), 支("寅")) + (self.year - self.生年) 270 | else: 271 | 行年 = 干支(干("壬"), 支("申")) + (self.生年 - self.year) 272 | return 本命, 行年 273 | 274 | 275 | class TianPan(): 276 | ''' 277 | 以寅上支标示天盘,方便__str__输出 278 | a = 天盘(支(2), 支(1)) 279 | a[支(4)] 获取巳上神 280 | ''' 281 | def __init__(self, 月将, 占时): 282 | if not isinstance(月将, 支): 283 | raise ValueError("月将需要是地支class") 284 | 285 | if not isinstance(占时, 支): 286 | raise ValueError("占时需要是地支class") 287 | self.__天盘 = 月将 + ((占时 - 支("子"))*-1) 288 | self.__月将 = 月将 289 | self.__占时 = 占时 290 | 291 | def __str__(self): 292 | x = PrettyTable() 293 | 294 | x.header = False 295 | x.padding_width = 0 296 | x.border = 0 297 | 298 | for i in self.__table: 299 | x.add_row(i) 300 | return x.get_string() 301 | 302 | @property 303 | def __table(self): 304 | x = [] 305 | 306 | line = [] 307 | for i in range(3, 7): 308 | line.append(self.__天盘 + i) 309 | x.append(line) 310 | 311 | line = [self.__天盘 + 2, '', '', self.__天盘 + 7] 312 | x.append(line) 313 | 314 | line = [self.__天盘 + 1, '', '', self.__天盘 + 8] 315 | x.append(line) 316 | 317 | line = [] 318 | for i in range(9, 13): 319 | line.append(self.__天盘 + i) 320 | line.reverse() 321 | x.append(line) 322 | return x 323 | 324 | def __getitem__(self, key): 325 | ''' 326 | 用于取得支上神 327 | ''' 328 | if not isinstance(key, 支): 329 | raise ValueError('{0} 不是地支'.format(key)) 330 | 331 | return self.__天盘 + (key - 支(1)) 332 | 333 | def 临(self, key): 334 | '''地支所临的地盘支''' 335 | if not isinstance(key, 支): 336 | raise ValueError('{0} 不是地支'.format(key)) 337 | 338 | return self.__占时 + (key - self.__月将) 339 | 340 | 341 | class SiKe(): 342 | def __init__(self, t, r): 343 | if not isinstance(t, TianPan): 344 | raise ValueError("{0} 不是天盘".format(t)) 345 | if not isinstance(r, 干支): 346 | raise ValueError("{0} 不是干支表示的日".format(t)) 347 | 348 | self.__天盘 = t 349 | self.__日 = r 350 | self.__干 = self.__日.干 351 | self.__干阳神 = self.__天盘[寄宫(self.__干)] 352 | self.__干阴神 = self.__天盘[self.__干阳神] 353 | 354 | self.__支 = self.__日.支 355 | self.__支阳神 = self.__天盘[self.__支] 356 | self.__支阴神 = self.__天盘[self.__支阳神] 357 | 358 | @property 359 | def 干(self): 360 | return self.__干 361 | 362 | @property 363 | def 干阳神(self): 364 | return self.__干阳神 365 | 366 | @property 367 | def 干阴神(self): 368 | return self.__干阴神 369 | 370 | @property 371 | def 支(self): 372 | return self.__支 373 | 374 | @property 375 | def 支阳神(self): 376 | return self.__支阳神 377 | 378 | @property 379 | def 支阴神(self): 380 | return self.__支阴神 381 | 382 | @property 383 | def 一课(self): 384 | return (self.__干阳神, self.__干) 385 | 386 | @property 387 | def 二课(self): 388 | return (self.__干阴神, self.__干阳神) 389 | 390 | @property 391 | def 三课(self): 392 | return (self.__支阳神, self.__支) 393 | 394 | @property 395 | def 四课(self): 396 | return (self.__支阴神, self.__支阳神) 397 | 398 | def __str__(self): 399 | x = PrettyTable() 400 | 401 | x.header = False 402 | x.padding_width = 0 403 | x.border = 0 404 | 405 | for i in self.__table: 406 | x.add_row(i) 407 | return x.get_string() 408 | 409 | @property 410 | def __table(self): 411 | x = [] 412 | x.append([self.__支阴神, self.__支阳神, self.__干阴神, self.__干阳神]) 413 | x.append([self.__支阳神, self.__支, self.__干阳神, self.__干]) 414 | return x 415 | 416 | 417 | class SanChuan(): 418 | bazhuan = (干支(干("甲"), 支("寅")), 干支(干("庚"), 支("申")), 419 | 干支(干("丁"), 支("未")), 干支(干("己"), 支("未"))) 420 | 421 | def __init__(self, t, s): 422 | if not isinstance(t, TianPan): 423 | raise ValueError("{0} 不是天盘".format(t)) 424 | if not isinstance(s, SiKe): 425 | raise ValueError("{0} 不是四课".format(s)) 426 | self.__天盘 = t 427 | self.__四课 = s 428 | self.__初 = None 429 | self.__中 = None 430 | self.__末 = None 431 | self.__type = [] 432 | self.__初, self.__中, self.__末 = self.__获取三传() 433 | 434 | def __获取三传(self): 435 | if self.__四课.支阳神 == self.__四课.支: 436 | return self.__伏呤() 437 | if self.__四课.支阳神.六冲(self.__四课.支): 438 | return self.__返呤() 439 | try: 440 | return self.__贼克() 441 | except NoSanchuan as err: 442 | pass 443 | 444 | try: 445 | return self.__遥克() 446 | except NoSanchuan as err: 447 | pass 448 | 449 | try: 450 | return self.__昂星() 451 | except NoSanchuan as err: 452 | pass 453 | try: 454 | return self.__别责() 455 | except NoSanchuan as err: 456 | pass 457 | try: 458 | return self.__八专() 459 | except NoSanchuan as err: 460 | pass 461 | 462 | def __有贼(self): 463 | ke = [] 464 | __ke = [self.__四课.一课, self.__四课.二课, self.__四课.三课, self.__四课.四课] 465 | for i in range(0, 4): 466 | __课 = __ke[i] 467 | if __课[1].wuxing.克(__课[0].wuxing): 468 | ke.append(__课) 469 | 470 | if len(ke) == 0: 471 | return ke 472 | # 删除重复课 473 | list_tmp = [] 474 | ke_tmp = [] 475 | for i in ke: 476 | if i[0] not in list_tmp: 477 | list_tmp.append(i[0]) 478 | ke_tmp.append(i) 479 | return ke_tmp 480 | 481 | def __有克(self): 482 | ke = [] 483 | __ke = [self.__四课.一课, self.__四课.二课, self.__四课.三课, self.__四课.四课] 484 | 485 | for i in range(0, 4): 486 | __课 = __ke[i] 487 | if __课[0].wuxing.克(__课[1].wuxing): 488 | ke.append(__课) 489 | if len(ke) == 0: 490 | return ke 491 | # 删除重复课 492 | list_tmp = [] 493 | ke_tmp = [] 494 | for i in ke: 495 | if i[0] not in list_tmp: 496 | list_tmp.append(i[0]) 497 | ke_tmp.append(i) 498 | return ke_tmp 499 | 500 | def __贼克(self): 501 | __贼 = self.__有贼() 502 | 503 | if len(__贼) != 0: 504 | if len(__贼) == 1: 505 | __初 = __贼[0][0] 506 | __中 = self.__天盘[__初] 507 | __末 = self.__天盘[__中] 508 | self.__type.append("重审卦") 509 | return (__初, __中, __末) 510 | else: 511 | return self.__比用(__贼) 512 | 513 | __克 = self.__有克() 514 | if len(__克) != 0: 515 | if len(__克) == 1: 516 | __初 = __克[0][0] 517 | __中 = self.__天盘[__初] 518 | __末 = self.__天盘[__中] 519 | self.__type.append("元首卦") 520 | return (__初, __中, __末) 521 | else: 522 | return self.__比用(__克) 523 | raise NoSanchuan('不能用贼克取三传') 524 | 525 | def __比用(self, ke): 526 | # le(results) ==1, >1, ==0 527 | # ke 是一个列表 528 | result = [] 529 | for i in ke: 530 | if 阴阳相同(i[0], self.__四课.干): 531 | result.append(i) 532 | if len(result) == 1: 533 | __初 = result[0][0] 534 | __中 = self.__天盘[__初] 535 | __末 = self.__天盘[__中] 536 | self.__type.append("知一卦") 537 | return (__初, __中, __末) 538 | elif len(result) == 0: 539 | return self.__涉害(ke) # 俱不比 540 | else: 541 | return self.__涉害(result) # 多个俱比 542 | 543 | def __涉害(self, ke): 544 | 545 | ''' 546 | 格式 547 | [ 548 | [[干阳神, 干],2], 549 | ] 550 | ''' 551 | __课的涉害深度 = [] 552 | 553 | for __ke in ke: 554 | 临地盘 = self.__天盘.临(__ke[0]) 555 | count = 0 556 | for i in range(0, 12): 557 | __d = 临地盘 + i 558 | if __d == __ke[0]: 559 | break 560 | 天干List = 干Of寄宫(__d) 561 | # [干阳, 干 ] 562 | if __ke[1].wuxing.克(__ke[0].wuxing): 563 | '''贼''' 564 | if __d.wuxing.克(__ke[0].wuxing): 565 | count = count + 1 566 | 567 | for __g in 天干List: 568 | if __g.wuxing.克(__ke[0].wuxing): 569 | count = count + 1 570 | else: 571 | if __ke[0].wuxing.克(__d.wuxing): 572 | count = count + 1 573 | 574 | for __g in 天干List: 575 | if __ke[0].wuxing.克(__g.wuxing): 576 | count = count + 1 577 | 578 | __课的涉害深度.append((__ke, count)) 579 | 580 | __最大涉害深度 = 0 581 | __有最大涉害深度的支组 = [] 582 | for i in __课的涉害深度: 583 | if i[1] > __最大涉害深度: 584 | __最大涉害深度 = i[1] 585 | for i in __课的涉害深度: 586 | if i[1] == __最大涉害深度: 587 | __有最大涉害深度的支组.append(i[0]) 588 | 589 | if len(__有最大涉害深度的支组) == 1: 590 | __初 = __有最大涉害深度的支组[0][0] 591 | __中 = self.__天盘[__初] 592 | __末 = self.__天盘[__中] 593 | self.__type.append("涉害卦") 594 | return (__初, __中, __末) 595 | 596 | # 涉害深度相同 597 | for i in __有最大涉害深度的支组: 598 | 临地盘 = self.__天盘.临(i[0]) 599 | 600 | # 从孟发用 601 | if 临地盘 in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 602 | __初 = i[0] 603 | __中 = self.__天盘[__初] 604 | __末 = self.__天盘[__中] 605 | self.__type.append("见机卦") 606 | return (__初, __中, __末) 607 | 608 | # 从仲发用 609 | for i in __有最大涉害深度的支组: 610 | 临地盘 = self.__天盘.临(i[0]) 611 | if 临地盘 in [支("子"), 支("卯"), 支("午"), 支("酉")]: 612 | __初 = i[0] 613 | __中 = self.__天盘[__初] 614 | __末 = self.__天盘[__中] 615 | self.__type.append("察微卦") 616 | return (__初, __中, __末) 617 | 618 | if self.__四课.干.属阳: 619 | __初 = self.__四课.干阳神 620 | __中 = self.__天盘[__初] 621 | __末 = self.__天盘[__中] 622 | self.__type.append("复等卦") 623 | return (__初, __中, __末) 624 | else: 625 | __初 = self.__四课.支阳神 626 | __中 = self.__天盘[__初] 627 | __末 = self.__天盘[__中] 628 | self.__type.append("复等卦") 629 | return (__初, __中, __末) 630 | 631 | # 俱是季 632 | raise NoSanchuan('所临皆四季,不能用涉害取三传') 633 | 634 | def __遥克(self): 635 | if 干支(self.__四课.干, self.__四课.支) in self.bazhuan: 636 | raise NoSanchuan('八传日不用遥克') 637 | ko = [] 638 | if self.__四课.二课[0].wuxing.克(self.__四课.干.wuxing): 639 | ko.append(self.__四课.二课) 640 | if self.__四课.三课[0].wuxing.克(self.__四课.干.wuxing): 641 | ko.append(self.__四课.三课) 642 | if self.__四课.四课[0].wuxing.克(self.__四课.干.wuxing): 643 | ko.append(self.__四课.四课) 644 | 645 | if len(ko) == 0: 646 | if self.__四课.干.wuxing.克(self.__四课.二课[0].wuxing): 647 | ko.append(self.__四课.二课) 648 | if self.__四课.干.wuxing.克(self.__四课.三课[0].wuxing): 649 | ko.append(self.__四课.三课) 650 | if self.__四课.干.wuxing.克(self.__四课.四课[0].wuxing): 651 | ko.append(self.__四课.四课) 652 | if len(ko) == 0: 653 | raise NoSanchuan('无遥克,不能用遥克取三传') 654 | 655 | # 删除重复课 656 | list_tmp = [] 657 | ko_tmp = [] 658 | for i in ko: 659 | if i[0] not in list_tmp: 660 | list_tmp.append(i[0]) 661 | ko_tmp.append(i) 662 | ko = ko_tmp 663 | if len(ko) == 1: 664 | __初 = ko[0][0] 665 | __中 = self.__天盘[__初] 666 | __末 = self.__天盘[__中] 667 | self.__type.append("遥克卦") 668 | return (__初, __中, __末) 669 | else: 670 | if len(ko) > 1: 671 | self.__type.append("遥克卦") 672 | return self.__比用(ko) 673 | 674 | def __昂星(self): 675 | ko = [] 676 | list_tmp = [] 677 | for i in (self.__四课.一课, self.__四课.二课, self.__四课.三课, self.__四课.四课): 678 | if i[0] not in list_tmp: 679 | list_tmp.append(i[0]) 680 | ko.append(i) 681 | if len(ko) != 4: 682 | raise NoSanchuan('课不备,不能用昂星取三传') 683 | if self.__四课.干.属阳: 684 | chu = self.__天盘[支("酉")] 685 | zhong = self.__四课.支阳神 686 | mo = self.__四课.干阳神 687 | self.__type.append("虎视卦") 688 | return (chu, zhong, mo) 689 | else: 690 | chu = self.__天盘.临(支("酉")) 691 | zhong = self.__四课.干阳神 692 | mo = self.__四课.支阳神 693 | self.__type.append("冬蛇掩目") 694 | return (chu, zhong, mo) 695 | 696 | def __别责(self): 697 | ko = [] 698 | list_tmp = [] 699 | for i in (self.__四课.一课, self.__四课.二课, self.__四课.三课, self.__四课.四课): 700 | if i[0] not in list_tmp: 701 | list_tmp.append(i[0]) 702 | ko.append(i) 703 | if len(ko) == 4: 704 | raise NoSanchuan('四课全备,不能用别责取三传') 705 | if len(ko) != 3: 706 | raise NoSanchuan('用别责用于三课备取三传') 707 | if self.__四课.干.属阳: 708 | chu = self.__天盘[寄宫(self.__四课.干 + 5)] 709 | else: 710 | chu = self.__四课.支 + 4 711 | zhong = self.__四课.干阳神 712 | mo = zhong 713 | self.__type.append("别责卦") 714 | return (chu, zhong, mo) 715 | 716 | def __八专(self): 717 | if 干支(self.__四课.干, self.__四课.支) not in self.bazhuan: 718 | raise NoSanchuan('不是八传日') 719 | if self.__四课.干.属阳: 720 | chu = self.__四课.干阳神 + 2 721 | self.__type.append("八专卦") 722 | return (chu, self.__四课.干阳神, self.__四课.干阳神) 723 | else: 724 | chu = self.__四课.支阴神 + (-2) 725 | self.__type.append("八专卦") 726 | return (chu, self.__四课.干阳神, self.__四课.干阳神) 727 | 728 | def __伏呤(self): 729 | # 六乙、六癸日 730 | if self.__四课.干 in (干("乙"), 干("癸")) or self.__四课.干.属阳: 731 | chu = self.__四课.干阳神 732 | else: 733 | # 阴日,非六乙日、六癸 734 | chu = self.__四课.支阳神 735 | for i in range(1, 13): 736 | if chu.刑(支(i)): 737 | zhong = 支(i) 738 | break 739 | 740 | # 初为自刑,阳日、六乙日、六癸日取支上神为中传 741 | if chu == zhong: 742 | if self.__四课.干 in (干("乙"), 干("癸")) or self.__四课.干.属阳: 743 | zhong = self.__四课.支阳神 744 | else: 745 | zhong = self.__四课.干阳神 746 | 747 | for i in range(1, 13): 748 | if zhong.刑(支(i)): 749 | mo = 支(i) 750 | break 751 | # 中传自刑,取中所冲之神 752 | if zhong == mo: 753 | mo = zhong + 6 754 | # 初、中互刑,如:子、卯,末取中所冲之神 755 | if zhong.刑(chu): 756 | mo = zhong + 6 757 | if self.__四课.干.属阳: 758 | self.__type.append("自任卦") 759 | else: 760 | self.__type.append("自信卦") 761 | return (chu, zhong, mo) 762 | 763 | def __返呤(self): 764 | try: 765 | return self.__贼克() 766 | except NoSanchuan as err: 767 | # 驿马计算 768 | zhi = self.__四课.支 769 | for i in range(0, 3): 770 | if zhi in [支("寅"), 支("巳"), 支("申"), 支("亥")]: 771 | yiMa = zhi + 6 772 | break 773 | zhi = zhi + 4 774 | chu = yiMa 775 | zhong = self.__四课.支阳神 776 | mo = self.__四课.干阳神 777 | self.__type.append("无依卦") 778 | return (chu, zhong, mo) 779 | 780 | def __str__(self): 781 | 782 | x = PrettyTable() 783 | 784 | x.header = False 785 | x.padding_width = 0 786 | x.border = 0 787 | 788 | for i in self.__table: 789 | x.add_row(i) 790 | return x.get_string() 791 | 792 | @property 793 | def __table(self): 794 | d = self.遁干 795 | x = [] 796 | 797 | x.append(['', d[0], self.__初, '']) 798 | x.append(['', d[1], self.__中, '']) 799 | x.append(['', d[2], self.__末, '']) 800 | 801 | return x 802 | 803 | @property 804 | def 初(self): 805 | return self.__初 806 | 807 | @property 808 | def 中(self): 809 | return self.__中 810 | 811 | @property 812 | def 末(self): 813 | return self.__末 814 | 815 | @property 816 | def 遁干(self): 817 | d = [] 818 | gan = self.__四课.干 819 | zhi = self.__四课.支 820 | jia = 干("甲") 821 | 822 | delta = gan - jia 823 | 824 | xunShou = zhi + (-1 * delta) 825 | 826 | for i in (self.初, self.中, self.末): 827 | zhiDelta = (i - xunShou + 12) % 12 828 | if zhiDelta == 10 or zhiDelta == 11: 829 | d.append('') 830 | else: 831 | d.append(jia + zhiDelta) 832 | return d 833 | 834 | @property 835 | def 六亲(self): 836 | luQing = [] 837 | gan = self.__四课.干 838 | sc = [self.初, self.中, self.末] 839 | for i in sc: 840 | if gan.wuxing.克(i.wuxing): 841 | luQing.append("财") 842 | elif i.wuxing.克(gan.wuxing): 843 | luQing.append("官") 844 | elif gan.wuxing.生(i.wuxing): 845 | luQing.append("子") 846 | elif i.wuxing.生(gan.wuxing): 847 | luQing.append("父") 848 | else: 849 | luQing.append("兄") 850 | return luQing 851 | 852 | @property 853 | def 格局(self): 854 | return self.__type 855 | 856 | def __eq__(self, other): 857 | if not isinstance(other, SanChuan): 858 | raise ValueError('{0}不是三传'.format(other)) 859 | return self.__初 == other.初 \ 860 | and self.__中 == other.中 \ 861 | and self.__末 == other.末 862 | 863 | def __nq__(self, other): 864 | if not isinstance(other, SanChuan): 865 | raise ValueError('{0}不是三传'.format(other)) 866 | return not self.__eq__(other) 867 | 868 | 869 | class 天将(Base): 870 | numToName = ['贵', '蛇', '雀', '合', '勾', '龙', '空', '虎', '常', '玄', '阴', '后'] 871 | 872 | def __init__(self, num): 873 | if isinstance(num, int) and (num > 0 or num < 13): 874 | n = num 875 | elif isinstance(num, str) and (num in self.numToName): 876 | n = self.numToName.index(num) + 1 877 | else: 878 | raise ValueError('输入的值为%s,输入值必是大于等于1小于等于12间的整数' % num) 879 | super().__init__(n) 880 | 881 | @property 882 | def 吉将(self): 883 | return self.num in [1, 4, 6, 9, 11, 12] 884 | 885 | def __add__(self, other): 886 | if not isinstance(other, int): 887 | raise ValueError('%s 必须是整数' % other) 888 | tmp = (self.num + other + 12) % 12 889 | tmp = 12 if tmp == 0 else tmp 890 | return 天将(tmp) 891 | 892 | def __sub__(self, other): 893 | if not isinstance(other, 天将): 894 | raise ValueError('%s 必须是天将' % other) 895 | return self.num - other.num 896 | 897 | def __eq__(self, other): 898 | if not isinstance(other, 天将): 899 | raise ValueError('%s 必须是天将' % other) 900 | return self.num == other.num 901 | 902 | 903 | class 天将盘(): 904 | zhouGui = {"甲": 支("未"), 905 | "乙": 支("申"), 906 | "丙": 支("酉"), 907 | "丁": 支("亥"), 908 | "戊": 支("丑"), 909 | "己": 支("子"), 910 | "庚": 支("丑"), 911 | "辛": 支("寅"), 912 | "壬": 支("卯"), 913 | "癸": 支("巳")} 914 | yeGui = {"甲": 支("丑"), 915 | "乙": 支("子"), 916 | "丙": 支("亥"), 917 | "丁": 支("酉"), 918 | "戊": 支("未"), 919 | "己": 支("申"), 920 | "庚": 支("未"), 921 | "辛": 支("午"), 922 | "壬": 支("巳"), 923 | "癸": 支("卯")} 924 | 925 | def __init__(self, t, s, 昼占=True): 926 | if not isinstance(t, TianPan): 927 | raise ValueError("{0} 不是天盘".format(t)) 928 | if not isinstance(s, SiKe): 929 | raise ValueError("{0} 不是四课".format(s)) 930 | self.__天盘 = t 931 | self.__四课 = s 932 | self.__gan = self.__四课.干 933 | self.__guiren = None # 贵人所乘地支 934 | self.__mi = False # 天将逆布 935 | 936 | if 昼占: 937 | self.__guiren = self.zhouGui[str(self.__gan)] 938 | else: 939 | self.__guiren = self.yeGui[str(self.__gan)] 940 | 941 | guiRenDiPan = 支("子") + (self.__guiren - self.__天盘[支("子")]) # 贵人地盘之支 942 | 943 | si = 支("巳") 944 | xu = 支("戌") 945 | if guiRenDiPan - si >= 0 and xu - guiRenDiPan >= 0: 946 | self.__mi = True 947 | 948 | @property 949 | def 逆(self): 950 | return self.__mi 951 | 952 | def __getitem__(self, key): 953 | ''' 954 | 获取某地支的天将 955 | ''' 956 | if not isinstance(key, 支): 957 | raise ValueError('只有支才有天将') 958 | if self.逆: 959 | return 天将("贵") + (self.__guiren - key) 960 | else: 961 | return 天将("贵") + (key - self.__guiren) 962 | 963 | def 临(self, tj): 964 | if not isinstance(tj, 天将): 965 | raise ValueError('只有天将才有所临地支') 966 | if self.逆: 967 | return self.__guiren + (天将("贵") - tj) 968 | else: 969 | return self.__guiren + (tj - 天将("贵")) 970 | 971 | 972 | class MinGPan(ShiPan): 973 | def __init__(self, year, month, day, hour, minutes, 974 | second, 月将, 占时, 昼占=True, 占测的事="", 性别=0, 生年=2018): 975 | super().__init__(year, month, day, hour, minutes, 976 | second, 月将, 占时, 昼占, 占测的事, 性别=0, 生年=生年) 977 | self.命宫 = self.四柱与节气[0].支 978 | self.三限 = self.__三限 979 | self.大运流年 = self.__大运流年() 980 | # print(self.三限) 981 | 982 | @property 983 | def __三限(self): 984 | __sx = [] 985 | __sc = (self.sc.初, self.sc.中, self.sc.末) 986 | for i in range(0, 3): 987 | __临 = self.tp[__sc[i]] 988 | __sx.append((__临.太玄数 * __sc[i].太玄数) / 2 + __临.太玄数) 989 | return __sx 990 | 991 | def __大运流年(self): 992 | __dL = [self.命宫.太玄数] 993 | for i in range(1, 12): 994 | __dL.append(__dL[-1] + (self.命宫 + (-1 * i)).太玄数) 995 | 996 | # __流年积数 = 0 997 | __daYun = [] 998 | for i in range(0, len(__dL)): 999 | __第一年Num = self.year + __dL[i] - 1 1000 | __第一年干支 = self.四柱与节气[0] + (__dL[i] - 1) 1001 | __流年List = [] 1002 | for j in range(0, (self.命宫 + (-1 * i - 1)).太玄数): 1003 | __流年List.append([__第一年Num + j, __第一年干支 + j]) 1004 | __daYun.append({"xian": __dL[i], "liunian": __流年List}) 1005 | return __daYun 1006 | 1007 | def __str__(self): 1008 | __pan = super().__str__() 1009 | 1010 | x = PrettyTable() 1011 | 1012 | x.header = False 1013 | x.padding_width = 0 1014 | x.border = 0 1015 | 1016 | x.add_row(["命宫", "财帛", "兄弟", "田宅", "男女", "奴仆", "夫妻", 1017 | "疾厄", "迁移", "官禄", "福德", "相貌"]) 1018 | 1019 | __daYun = [] 1020 | for i in range(0, 12): 1021 | __daYun.append(self.命宫 + (-1 * i)) 1022 | x.add_row(__daYun) 1023 | xian = [] 1024 | for i in self.大运流年: 1025 | xian.append(i["xian"]) 1026 | x.add_row(xian) 1027 | 1028 | liuNian = [] 1029 | for i in self.大运流年: 1030 | __tmp = "" 1031 | for j in i["liunian"]: 1032 | __tmp = "{}\n{}{}".format(__tmp, j[0], j[1]) 1033 | liuNian.append(__tmp) 1034 | x.add_row(liuNian) 1035 | 1036 | return "{}\n{}".format(__pan, x.get_string()) 1037 | 1038 | @property 1039 | def toHml(self): 1040 | __html = super().toHml 1041 | 1042 | x = PrettyTable() 1043 | 1044 | x.header = False 1045 | x.padding_width = 0 1046 | x.border = 0 1047 | 1048 | x.add_row(["命宫", "财帛", "兄弟", "田宅", "男女", "奴仆", "夫妻", 1049 | "疾厄", "迁移", "官禄", "福德", "相貌"]) 1050 | 1051 | __daYun = [] 1052 | for i in range(0, 12): 1053 | __daYun.append(self.命宫 + (-1 * i)) 1054 | x.add_row(__daYun) 1055 | xian = [] 1056 | for i in self.大运流年: 1057 | xian.append(i["xian"]) 1058 | x.add_row(xian) 1059 | 1060 | liuNian = [] 1061 | for i in self.大运流年: 1062 | __tmp = "" 1063 | for j in i["liunian"]: 1064 | __tmp = "{}\n{}{}".format(__tmp, j[0], j[1]) 1065 | liuNian.append(__tmp) 1066 | x.add_row(liuNian) 1067 | liuNianTable = x.get_html_string() 1068 | liuNianTable = regex.sub(r'', '', liuNianTable) 1069 | __三限html = "
三限:
初限:{0[0]}
中限:{0[1]}
末限:{0[2]}
".format(self.__三限) 1070 | html = regex.sub(r'', __三限html + liuNianTable, __html) 1071 | return "{}".format(html) 1072 | 1073 | 1074 | if __name__ == "__main__": 1075 | # a = MinGPan(2018, 6, 15,13, 22, 7, "申", "未", True, "abc") 1076 | a = ShiPan(2018, 8, 29,13, 22, 7, "巳", "酉", True, "abc",0,2018) 1077 | print(a.toHml) --------------------------------------------------------------------------------