掐指一算——小六壬预测方法的简单实现
小六壬预测方法十分简单,预测时只须提取当时的月、日、时信息,用左拇指在六个掌诀位上按顺时针方向依次掐算即知结果。其法以大安起正月,月上起日,日上起时。郑博士提醒注意:这句话意思就是从月上开始计算日子,从日上开始计算时辰。如:占三月初五辰时吉凶。大安起数,三(月)是速喜,速喜起日(开始计算日子),五是大安。大安起时(开始计算时辰),辰时是小吉。
第一步,先确定月份在掌诀上的起点(定位),以起点推算月份落点。不管是第几个月,均以“大安”为正月起点,然后按顺时针在六个掌诀定位上按六神次序依次往下数。
第二步,以月份落(终)点为日辰起点,然后推算日辰落点。从月份落点上起初一,同样按顺时针在六个掌诀定位上按六神顺序依次柱下数,一直数到天数为止,此掌诀定位即为日辰之落点。
第三步,以日辰落点为时辰起点,推算时辰落点。
代码如下:
from lunarcalendar import Converter, Solar
def six_divination(lunar_month, lunar_day, s):
# 六个掌诀的位置
positions = ["大安", "留连", "速喜", "赤口", "小吉", "空亡"]
# 计算月份、日期和时间对应的掌诀位置
month_position = (lunar_month - 1) % 6
day_position = (lunar_day + month_position - 1) % 6
hour_position = (s + lunar_month - 1 + lunar_day - 1) % 6
return positions[month_position], positions[day_position], positions[hour_position]
def convert_to_lunar(year, month, day):
# 使用Converter将公历日期转换为农历日期
lunar_date = Converter.Solar2Lunar(Solar(year, month, day))
# 获取农历年、月、日
lunar_year = lunar_date.year
lunar_month = lunar_date.month
lunar_day = lunar_date.day
return lunar_year, lunar_month, lunar_day
def convert_hour_to_shichen(in_hour):
# 将24小时制时间转换为12小时制,并确定对应的时辰
hour, minute = map(int, in_hour.split(":"))
if 0 <= hour < 1:
sc_time = "子"
hour = 0
elif 1 <= hour < 3:
sc_time = "丑"
hour = 1
elif 3 <= hour < 5:
sc_time = "寅"
hour = 2
elif 5 <= hour < 7:
sc_time = "卯"
hour = 3
elif 7 <= hour < 9:
sc_time = "辰"
hour = 4
elif 9 <= hour < 11:
sc_time = "巳"
hour = 5
elif 11 <= hour < 13:
sc_time = "午"
hour = 6
elif 13 <= hour < 15:
sc_time = "未"
hour = 7
elif 15 <= hour < 17:
sc_time = "申"
hour = 8
elif 17 <= hour < 19:
sc_time = "酉"
hour = 9
elif 19 <= hour < 21:
sc_time = "戌"
hour = 10
elif 21 <= hour < 23:
sc_time = "亥"
hour = 11
elif hour == 23 or hour == 0:
sc_time = "子"
hour = 0
return sc_time, hour
# 输入公历年、月、日和时辰(24小时制)
year = int(input("请输入公历年份: "))
month = int(input("请输入公历月份: "))
day = int(input("请输入公历日期: "))
hour = input("请输入公历小时(0-23): ")
lunar_year, lunar_month, lunar_day = convert_to_lunar(year, month, day)
# 转换公历时间到农历时辰
shichen = convert_hour_to_shichen(hour)[0]
hour = convert_hour_to_shichen(hour)[1]
# 进行小六壬预测
month_result, day_result, hour_result = six_divination(lunar_month, lunar_day, hour)
print(
f"公历{year}年{month}月{day}日{hour}时对应的农历日期为:农历{lunar_year}年{lunar_month}月{lunar_day}日")
print(f"根据小六壬预测,该日期的占卜结果为:月份位置-{month_result}, 日期位置-{day_result}, 农历时辰为:{shichen}时-{hour_result}")
例1
如你农历2010年六月初五上午九点半。要和男友(女友)初次相会,可以算一下吉凶如何。
前面说了凡事都从大安起卦,大安为一月,留连为二月,速喜为三月,赤口为四月,小吉为五月,空亡为六月;下面再算日子,月份算到空亡了,接着日子从空亡开始,空亡是初一,大安是初二,留连初三,速喜初四,赤口初五;同理接着时辰算,赤口是子时,小吉是丑时,空亡是寅时,大安是卯时,留连是辰时,速喜是巳时(9:00-11:00)。所以最终得了个速喜卦。是好事,可能一见钟情。
例2
以农历2010年农历八月
十七日辰时为例。(一)首先照顺时针方向由大安开始计为正月,则留连便是二月,如此类推,八月就是留连了。
(二)再由八月这个留连开始计为初一,速喜为初二,如此类推,十七日就是空亡了。
(三)由十七日这个空亡开始计为子时,大安就是丑时,如此类推,顺时针数下去,辰时就落在赤口上了
验证:
例1
如上所述:农历2010年六月初五上午九点半即2010年7月16日9:30
六月——空亡,初五——赤口,上午九点半——速喜巳时
例2
如上所述:
农历八月十七日辰时即2010年9月24日上午07:00-09:00
八月——留连,十七——空亡,上午07:00-09:00——赤口
请输入公历年份: 2010
请输入公历月份: 7
请输入公历日期: 16
请输入公历小时(0-23): 9:30
公历2010年7月16日5时对应的农历日期为:农历2010年6月5日
根据小六壬预测,该日期的占卜结果为:月份位置-空亡, 日期位置-赤口, 农历时辰为:巳时-速喜
请输入公历年份: 2010
请输入公历月份: 9
请输入公历日期: 24
请输入公历小时(0-23): 8:00
公历2010年9月24日4时对应的农历日期为:农历2010年8月17日
根据小六壬预测,该日期的占卜结果为:月份位置-留连, 日期位置-空亡, 农历时辰为:辰时-赤口