├── .gitattributes ├── .gitignore ├── DaLuRenWindow.py ├── README.assets └── image-20200628102135350.png ├── README.md ├── common ├── __init__.py └── moonMansions.py ├── dalurenCalendar ├── __init__.py ├── lunar │ ├── __init__.py │ ├── elp82.py │ ├── elp82_const.py │ ├── iau1980.py │ └── mathutil.py └── util │ ├── __init__.py │ ├── julianday.py │ └── util.py ├── help.py ├── help └── help.html ├── main.py ├── requirements.txt ├── shensha ├── ShenShaDialog.py ├── __init__.py └── shensha.py └── shipan ├── __init__.py ├── guati.py ├── guaticomment.json └── shipan.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *pyc 2 | .project 3 | .pydevproject 4 | __pycache__ 5 | -------------------------------------------------------------------------------- /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 | from opencc import OpenCC 8 | import pdb 9 | 10 | from common import GetShiChen, GetLi, DiZHiList 11 | from help import HelpDialog 12 | from shensha.ShenShaDialog import ShenShaDialog 13 | 14 | 15 | def checkValue(func): 16 | @wraps(func) 17 | def wrapper(self): 18 | year = int("0{}".format(self.yearInput.text())) 19 | month = int("0{}".format(self.monthInput.text())) 20 | day = int("0{}".format(self.dayInput.text())) 21 | hour = int("0{}".format(self.hourInput.text())) 22 | minutes = int("0{}".format(self.minutesInput.text())) 23 | second = int("0{}".format(self.secondInput.text())) 24 | shengNian = int("0{}".format(self.shengNianInput.text())) 25 | if year < 1 or year > 2100 or \ 26 | shengNian < 1920 or shengNian > 2100 or \ 27 | month < 1 or month > 12 or \ 28 | day < 1 or day > 31 or \ 29 | hour < 0 or hour > 23 or \ 30 | minutes < 0 or minutes > 59 or \ 31 | second < 0 or second > 59: 32 | QtWidgets.QMessageBox.information(None, "OK", "輸入時間不正確", 33 | QtWidgets.QMessageBox.Ok, 34 | QtWidgets.QMessageBox.Ok) 35 | return 36 | timeString = "{0}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}".format( 37 | year, month, day, hour, minutes, second) 38 | try: 39 | datetime.datetime.strptime(timeString, "%Y-%m-%d %H:%M:%S") 40 | except ValueError as e: 41 | QtWidgets.QMessageBox.information(None, 42 | "OK", "輸入時間{}不正確".format( 43 | timeString), 44 | QtWidgets.QMessageBox.Ok, 45 | QtWidgets.QMessageBox.Ok) 46 | return 47 | return func(self) 48 | return wrapper 49 | 50 | 51 | class DaLuRenWindow(QtWidgets.QMainWindow): 52 | def __init__(self): 53 | super().__init__() 54 | self.shiPan = None 55 | self.setWindowTitle("大六壬") 56 | 57 | # Create mainold layout 58 | layout = QtWidgets.QHBoxLayout() 59 | 60 | mainWidget = QtWidgets.QWidget() 61 | mainWidget.setLayout(layout) 62 | self.setCentralWidget(mainWidget) 63 | 64 | self.textBrowser = QWebEngineView() 65 | layout.addWidget(self.textBrowser) 66 | 67 | # 设置右则面板 68 | rightWidget = QtWidgets.QWidget() 69 | rightWidget.setFixedWidth(100) 70 | # layout.addWidget(rightWidget) 71 | scrollArea = QtWidgets.QScrollArea(self) 72 | scrollArea.setFixedWidth(120) 73 | scrollArea.setWidgetResizable(True) 74 | 75 | # scroll_bar = scrollArea.verticalScrollBar() 76 | scrollArea.setWidget(rightWidget) 77 | layout.addWidget(scrollArea) 78 | 79 | # 为右则面板使用水平布局 80 | rightVBoxLayout = QtWidgets.QVBoxLayout() 81 | rightWidget.setLayout(rightVBoxLayout) 82 | # 83 | self.yearInput = QtWidgets.QLineEdit() 84 | self.yearInput.setPlaceholderText("年 1920-2050") 85 | self.yearInput.setValidator(QtGui.QIntValidator(1920, 2050, 86 | self.yearInput)) 87 | rightVBoxLayout.addWidget(self.yearInput) 88 | 89 | self.monthInput = QtWidgets.QLineEdit() 90 | self.monthInput.setPlaceholderText("月") 91 | self.monthInput.setValidator(QtGui.QIntValidator(1, 12, 92 | self.monthInput)) 93 | rightVBoxLayout.addWidget(self.monthInput) 94 | 95 | self.dayInput = QtWidgets.QLineEdit() 96 | self.dayInput.setPlaceholderText("日") 97 | self.dayInput.setValidator(QtGui.QIntValidator(1, 31, self.dayInput)) 98 | rightVBoxLayout.addWidget(self.dayInput) 99 | 100 | self.hourInput = QtWidgets.QLineEdit() 101 | self.hourInput.setPlaceholderText("時") 102 | self.hourInput.setValidator(QtGui.QIntValidator(0, 23, self.hourInput)) 103 | rightVBoxLayout.addWidget(self.hourInput) 104 | 105 | self.minutesInput = QtWidgets.QLineEdit() 106 | self.minutesInput.setPlaceholderText("分") 107 | self.minutesInput.setValidator(QtGui.QIntValidator(0, 59, 108 | self.minutesInput)) 109 | rightVBoxLayout.addWidget(self.minutesInput) 110 | 111 | self.secondInput = QtWidgets.QLineEdit() 112 | self.secondInput.setPlaceholderText("秒") 113 | self.secondInput.setValidator(QtGui.QIntValidator(0, 59, 114 | self.minutesInput)) 115 | rightVBoxLayout.addWidget(self.secondInput) 116 | 117 | timeNowButton = QtWidgets.QPushButton("目前時間") 118 | rightVBoxLayout.addWidget(timeNowButton) 119 | 120 | self.yueJiang = QtWidgets.QComboBox() 121 | self.yueJiang.addItems(DiZHiList) 122 | 123 | yueJiangHBoxLayout = QtWidgets.QHBoxLayout() 124 | yueJiangHBoxLayout.addWidget(QtWidgets.QLabel("月將")) 125 | yueJiangbutton = QtWidgets.QPushButton("計算") 126 | yueJiangHBoxLayout.addWidget(yueJiangbutton) 127 | rightVBoxLayout.addLayout(yueJiangHBoxLayout) 128 | rightVBoxLayout.addWidget(self.yueJiang) 129 | 130 | self.zhanShi = QtWidgets.QComboBox() 131 | self.zhanShi.addItems(DiZHiList) 132 | rightVBoxLayout.addWidget(QtWidgets.QLabel("占時")) 133 | rightVBoxLayout.addWidget(self.zhanShi) 134 | 135 | self.zhouZhan = QtWidgets.QComboBox() 136 | self.zhouZhan.addItems(["是", "否"]) 137 | rightVBoxLayout.addWidget(QtWidgets.QLabel("晝占/晝生人")) 138 | rightVBoxLayout.addWidget(self.zhouZhan) 139 | 140 | self.mingJu = QtWidgets.QComboBox() 141 | self.mingJu.addItems(["否", "是"]) 142 | rightVBoxLayout.addWidget(QtWidgets.QLabel("命局")) 143 | rightVBoxLayout.addWidget(self.mingJu) 144 | 145 | man = QtWidgets.QRadioButton("男") 146 | male = QtWidgets.QRadioButton("女") 147 | man.setChecked(True) 148 | self.sex = QtWidgets.QButtonGroup() 149 | self.sex.addButton(man, 0) 150 | self.sex.addButton(male, 1) 151 | sexLayout = QtWidgets.QHBoxLayout() 152 | sexLayout.addWidget(man) 153 | sexLayout.addWidget(male) 154 | rightVBoxLayout.addLayout(sexLayout) 155 | 156 | self.shengNianInput = QtWidgets.QLineEdit() 157 | self.shengNianInput.setPlaceholderText("生年") 158 | self.shengNianInput.setValidator( 159 | QtGui.QIntValidator(1920, 2050, self.shengNianInput)) 160 | rightVBoxLayout.addWidget(self.shengNianInput) 161 | 162 | rightVBoxLayout.addWidget(QtWidgets.QLabel("占測之事")) 163 | self.占测的事Input = QtWidgets.QLineEdit() 164 | rightVBoxLayout.addWidget(self.占测的事Input) 165 | 166 | button = QtWidgets.QPushButton("起六壬局") 167 | rightVBoxLayout.addWidget(button) 168 | 169 | shenShaButton = QtWidgets.QPushButton("神煞查詢") 170 | rightVBoxLayout.addWidget(shenShaButton) 171 | 172 | helpButton = QtWidgets.QPushButton("幫助") 173 | rightVBoxLayout.addWidget(helpButton) 174 | rightVBoxLayout.addStretch() 175 | 176 | # 设置默认时间 177 | self.timeNow() 178 | 179 | 月将 = GetLi(int(self.yearInput.text()), int(self.monthInput.text()), 180 | int(self.dayInput.text()), int(self.hourInput.text()), 181 | int(self.minutesInput.text()), 182 | int(self.secondInput.text()))[4] 183 | self.yueJiang.setCurrentIndex(月将.num - 1) 184 | button.clicked.connect(self.onclick) 185 | helpButton.clicked.connect(self.helpOnclick) 186 | yueJiangbutton.clicked.connect(self.yueJiangOnClick) 187 | shenShaButton.clicked.connect(self.shenShaOnclick) 188 | timeNowButton.clicked.connect(self.timeNowOnClick) 189 | # self.show() 190 | 191 | # Connect event for button 192 | @checkValue 193 | def onclick(self): 194 | year = int("0{}".format(self.yearInput.text())) 195 | month = int("0{}".format(self.monthInput.text())) 196 | day = int("0{}".format(self.dayInput.text())) 197 | hour = int("0{}".format(self.hourInput.text())) 198 | minutes = int("0{}".format(self.minutesInput.text())) 199 | second = int("0{}".format(self.secondInput.text())) 200 | shengNian = int("0{}".format(self.shengNianInput.text())) 201 | 月将=DiZHiList[self.yueJiang.currentIndex()] 202 | 占时=DiZHiList[self.zhanShi.currentIndex()] 203 | 昼占=True 204 | __占测的事 = self.占测的事Input.text() 205 | if self.zhouZhan.currentIndex() == 1: 206 | 昼占=False 207 | 命局=False 208 | if self.mingJu.currentIndex() == 1: 209 | 命局 = True 210 | 性别 = self.sex.checkedId() 211 | cc = OpenCC('s2t') 212 | if 命局: 213 | sq = MinGPan(year, month, day, hour, minutes, second, 月将, 占时, 昼占, 214 | __占测的事, 性别, shengNian) 215 | #pdb.set_trace() 216 | else: 217 | sq = ShiPan(year, month, day, hour, minutes, second, 月将, 占时, 昼占, 218 | __占测的事, 性别, shengNian) 219 | #pdb.set_trace() 220 | sqhtml = cc.convert(sq.toHml) 221 | #sqhtml = sq.toHml 222 | sqhtml = sqhtml.replace('後','后') 223 | sqhtml = sqhtml.replace('佔','占') 224 | sqhtml = sqhtml.replace('醜','丑') 225 | self.textBrowser.setHtml(sqhtml) 226 | self.shiPan = sq 227 | 228 | @checkValue 229 | def yueJiangOnClick(self): 230 | year = int("0{}".format(self.yearInput.text())) 231 | month = int("0{}".format(self.monthInput.text())) 232 | day = int("0{}".format(self.dayInput.text())) 233 | hour = int("0{}".format(self.hourInput.text())) 234 | minutes = int("0{}".format(self.minutesInput.text())) 235 | second = int("0{}".format(self.secondInput.text())) 236 | __月将 = GetLi(year, month, day, hour, minutes, second)[4] 237 | self.yueJiang.setCurrentIndex(__月将.num - 1) 238 | __占时 = GetShiChen(int(self.hourInput.text())) 239 | self.zhanShi.setCurrentIndex(__占时.num - 1) 240 | 241 | def helpOnclick(self): 242 | helpDialog = HelpDialog(self) 243 | helpDialog.show() 244 | 245 | def shenShaOnclick(self): 246 | # return 247 | shenShaDialog = ShenShaDialog(self, self.shiPan) 248 | shenShaDialog.show() 249 | 250 | def timeNowOnClick(self): 251 | self.timeNow() 252 | 253 | def timeNow(self): 254 | nowDateTime = datetime.datetime.today() 255 | self.yearInput.setText("{}".format(nowDateTime.year)) 256 | self.monthInput.setText("{}".format(nowDateTime.month)) 257 | self.dayInput.setText("{}".format(nowDateTime.day)) 258 | self.hourInput.setText("{}".format(nowDateTime.hour)) 259 | self.minutesInput.setText("{}".format(nowDateTime.minute)) 260 | self.secondInput.setText("{}".format(nowDateTime.second)) 261 | self.shengNianInput.setText("{}".format(nowDateTime.year)) 262 | __占时 = GetShiChen(nowDateTime.hour) 263 | # self.zhanShi.setCurrentIndex(GetShiChen(int(self.hourInput.text())).num 264 | # - 1) 265 | self.zhanShi.setCurrentIndex(__占时.num - 1) 266 | -------------------------------------------------------------------------------- /README.assets/image-20200628102135350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d1210182010/daliurenpython-zh-tw/cc8f670232e23b3e8fdd6454d3e8985794115fc3/README.assets/image-20200628102135350.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 大六壬(DaLiuRen)/六壬神課(りくじんしんか) for Python 2 | 3 | 此為[dalurenpython](https://github.com/wlhyl/dalurenpython)的繁體中文版本,僅加入語言及格式之修改,運算皆同。 4 | 5 | ![image-20200628102135350](README.assets/image-20200628102135350.png) 6 | 7 | ### 安裝步驟 8 | 1. 下載.zip檔,並解壓縮後進入該目錄 9 | 2. 將`requirements.txt`的`ganzhiwuxin==0.1`註解掉,並參考下方安裝`ganzhiwuxin` 10 | 3. 安裝必要套件`pip install -r requirements.txt` 11 | 4. 啟動GUI界面`python main.py` 12 | 13 | ### 常見問題 14 | 15 | - 找不到`ganzhiwuxin==0.1` 16 | - 請至此安裝[ganzhiwuxinForPython](https://github.com/wlhyl/ganzhiwuxinForPython) 17 | - 或是直接透過pip安裝`pip install https://github.com/wlhyl/ganzhiwuxinForPython/archive/refs/heads/master.zip` 18 | - `error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/` 19 | - 參閱[此文章](https://hjwang520.pixnet.net/blog/post/404280185-%E5%AE%89%E8%A3%9Dmicrosoft-visual-c%2B%2B-14.0)安裝Microsoft Visual C++ 14.0即可 20 | -------------------------------------------------------------------------------- /common/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import datetime 3 | import eacal, pdb 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_t=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 | -------------------------------------------------------------------------------- /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 支("亥") -------------------------------------------------------------------------------- /dalurenCalendar/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d1210182010/daliurenpython-zh-tw/cc8f670232e23b3e8fdd6454d3e8985794115fc3/dalurenCalendar/__init__.py -------------------------------------------------------------------------------- /dalurenCalendar/lunar/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d1210182010/daliurenpython-zh-tw/cc8f670232e23b3e8fdd6454d3e8985794115fc3/dalurenCalendar/lunar/__init__.py -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /dalurenCalendar/util/__init__.py: -------------------------------------------------------------------------------- 1 | from dalurenCalendar.util.util import * -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /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',encoding="utf-8") as f: 19 | helpStrings = f.read() 20 | guaTiFont = QtGui.QFont() 21 | guaTiFont.setPixelSize(18) 22 | self.guaTiTextBrowser.setFont(guaTiFont) 23 | self.guaTiTextBrowser.setHtml(helpStrings) -------------------------------------------------------------------------------- /help/help.html: -------------------------------------------------------------------------------- 1 |
2 |
判斷
3 | 13 |
14 |
15 |
連茹課
16 |
17 |
順連茹三奇十二課
18 | 32 |
33 |
34 |
逆連茹三奇十二課
35 | 49 |
50 |
51 |
天將取象
52 | 58 |
59 |
-------------------------------------------------------------------------------- /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.22.0 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 | opencc-python-reimplemented==0.1.6 13 | 14 | -------------------------------------------------------------------------------- /shensha/ShenShaDialog.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtWidgets 2 | from PyQt5 import QtCore 3 | from PyQt5 import QtGui 4 | from shensha import shensha 5 | from opencc import OpenCC 6 | cc = OpenCC('s2t') 7 | 8 | class ShenShaDialog(QtWidgets.QDialog): 9 | def __init__(self, parent=None, shiPan=None): 10 | super().__init__(parent) 11 | self.setWindowTitle("神煞") 12 | self.setWindowFlag(QtCore.Qt.WindowMinMaxButtonsHint) 13 | self.resize(700, 500) 14 | guaTiLayout = QtWidgets.QVBoxLayout() 15 | # self.layout=helpLayout 16 | self.setLayout(guaTiLayout) 17 | self.guaTiTextBrowser = QtWidgets.QTextBrowser() 18 | guaTiLayout.addWidget(self.guaTiTextBrowser) 19 | guaTiFont = QtGui.QFont() 20 | guaTiFont.setPixelSize(18) 21 | self.guaTiTextBrowser.setFont(guaTiFont) 22 | 23 | if shiPan is None: 24 | self.guaTiTextBrowser.setHtml("查詢神煞,請先排盤") 25 | return 26 | 27 | shenShaJson = {"年": {}, "月": {}, "日": {}} 28 | shenShaModules = shensha 29 | shenShaFuns = [] 30 | for attr in (a for a in dir(shenShaModules) if a.startswith('do_')): 31 | callback = getattr(shenShaModules, attr) 32 | shenShaFuns.append(callback) 33 | for fun in shenShaFuns: 34 | fun(shiPan, shenShaJson) 35 | guaTiStrings = "" 36 | for key in shenShaJson: 37 | s0 = None 38 | count = 0 39 | for sh in shenShaJson[key]: 40 | if s0 is None: 41 | s0 = '{}: {} '.format(cc.convert(sh), shenShaJson[key][sh]) 42 | else: 43 | if count % 8 == 0: 44 | s0 = '{}
{}: {} '.format(s0, cc.convert(sh), shenShaJson[key][sh]) 45 | else: 46 | s0 = '{}    {}: {} '.format(s0, cc.convert(sh), shenShaJson[key][sh]) 47 | # if count == 7: 48 | # s0 = "{}
".format(s0) 49 | count = count + 1 50 | guaTiStrings = "{}
{}
{}
".format(guaTiStrings, key, s0) 51 | self.guaTiTextBrowser.setText(guaTiStrings) -------------------------------------------------------------------------------- /shensha/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d1210182010/daliurenpython-zh-tw/cc8f670232e23b3e8fdd6454d3e8985794115fc3/shensha/__init__.py -------------------------------------------------------------------------------- /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/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d1210182010/daliurenpython-zh-tw/cc8f670232e23b3e8fdd6454d3e8985794115fc3/shipan/__init__.py -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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) --------------------------------------------------------------------------------