小六壬 日加时速断,代码实现

from lunarcalendar.converter import Solar, Lunar
from datetime import datetime

# 定义小六壬的六宫名称
palaces = ["大安", "留连", "速喜", "赤口", "小吉", "空亡"]

# 定义月、日、时的口诀
oracles = {
    "大安": "大安:身不动时,属木,青龙,方位东,凡事主逢1、5、7。大安事事昌,求财在坤方,失物去不远,宅舍保安康",
    "留连": "留连:人未归时,属水,玄武,方位北,凡事主逢2、8、10。留连事难成,求谋日未明,官事只宜缓,去者未回程",
    "速喜": "速喜:人即至时,属火,朱雀,方位南,凡事主逢3、6、9。速喜喜来临,求财向南行,失物申午未,逢人路上寻",
    "赤口": "赤口:官事凶时,属金,白虎,方位西,凡事主逢4、7、10。赤口主口舌,是非要紧防,失物速速讨,行人有惊慌",
    "小吉": "小吉:人来喜时,属木,六合,凡事主逢1、5、7。小吉最吉昌,路上好商量,阴人来报喜,失物在坤方",
    "空亡": "空亡:音信稀时,属土,勾陈,方位中,凡事主逢3、6、9。空亡事不祥,阴人少乖张,求财无利益,行人有灾殃"
}

# 定义组合口诀
combined_oracles = {
    "大安加留连": "大安加留连,办事不周全,失物西北去,婚姻晚几天",
    "大安加速喜": "大安加速喜,事事自己起,失物当日见,婚姻自己提",
    "大安加赤口": "大安加赤口,办事不顺手,失物不用找,婚姻两分手",
    "大安加小吉": "大安加小吉,事事从己及,失物不出门,婚姻成就地",
    "大安加空亡": "大安加空亡,病人要上床,失物无踪影,事事不顺情",
    "留连加大安": "留连加大安,办事两分张,婚姻有喜事,先苦后来甜",
    "留连加速喜": "留连加速喜,事事由自己,婚姻有成意,失物三天里",
    "留连加赤口": "留连加赤口,病者死人口,失物准丢失,婚姻两分手",
    "留连加小吉": "留连加小吉,事事不用提,失物东南去,病者出人齐",
    "留连加空亡": "留连加空亡,病人准死亡,失物不见面,婚姻两分张",
    "速喜加赤口": "速喜加赤口,自己往外走,失物往正北,婚姻得勤走",
    "速喜加小吉": "速喜加小吉,婚姻有人提,病人当天好,时物在家里",
    "速喜加空亡": "速喜加空亡,婚姻有分张,病者积极治,失物不久见",
    "速喜加大安": "速喜加大安,事事都平安,姻姻成全了,占病都相安",
    "速喜加留连": "速喜加留连,婚姻不可言,失物无信息,病人有仙缘",
    "赤口加小吉": "赤口加小吉,办事自己提,婚姻不能成,失物无信息",
    "赤口加空亡": "赤口加空亡,无病也上床,失物不用找,婚姻不能成",
    "赤口加大安": "赤口加大安,办事险和难,失物东北找,婚姻指定难",
    "赤口加留连": "赤口加留连,办事有困难,行人在外走,失物不回还",
    "赤口加速喜": "赤口加速喜,婚姻在自己,失物有着落,办事官事起",
    "小吉加空亡": "小吉加空亡,病人不妥当,失物正东找,婚姻再想想",
    "小吉加大安": "小吉加大安,事事两周全,婚姻当日定,失物自己损",
    "小吉加留连": "小吉加留连,事事有反还,婚姻有人破,失物上西南",
    "小吉加速喜": "小吉加速喜,事事从头起,婚姻能成就,失物在院里",
    "小吉加赤口": "小吉加赤口,办事往外走,婚姻有难处,失物丢了手",
    "空亡加大安": "空亡加大安,事事不周全,婚姻从和好,失物反复间",
    "空亡加留连": "空亡加留连,办事处处难,婚姻重新定,失物永不还",
    "空亡加速喜": "空亡加速喜,事事怨自己,婚姻有一定,失物在家里",
    "空亡加赤口": "空亡加赤口,办事官非有,婚姻难定准,失物往远走",
    "空亡加小吉": "空亡加小吉,事事有猜疑,婚姻有喜事,失物回家里"
}


def get_lunar_date(solar_date):
    """将公历日期转换为农历日期"""
    lunar = Lunar.from_date(solar_date)
    return lunar.month, lunar.day


def calculate_palace(start_index, step):
    """根据起始索引和步数计算六宫名称"""
    index = (start_index + step - 1) % 6
    return palaces[index]


def get_hour_index(hour):
    """将时辰转换为对应的数字"""
    hour_map = {
        "子时": 1, "丑时": 2, "寅时": 3, "卯时": 4,
        "辰时": 5, "巳时": 6, "午时": 7, "未时": 8,
        "申时": 9, "酉时": 10, "戌时": 11, "亥时": 12
    }
    if hour >= 23 or hour < 1:
        return hour_map["子时"]
    elif 1 <= hour < 3:
        return hour_map["丑时"]
    elif 3 <= hour < 5:
        return hour_map["寅时"]
    elif 5 <= hour < 7:
        return hour_map["卯时"]
    elif 7 <= hour < 9:
        return hour_map["辰时"]
    elif 9 <= hour < 11:
        return hour_map["巳时"]
    elif 11 <= hour < 13:
        return hour_map["午时"]
    elif 13 <= hour < 15:
        return hour_map["未时"]
    elif 15 <= hour < 17:
        return hour_map["申时"]
    elif 17 <= hour < 19:
        return hour_map["酉时"]
    elif 19 <= hour < 21:
        return hour_map["戌时"]
    else:
        return hour_map["亥时"]


def main():
    # 获取当前公历日期和时间
    now = datetime.now()
    print(f"当前公历日期和时间: {now}")

    # 获取农历日期
    lunar_month, lunar_day = get_lunar_date(now)
    print(f"当前农历日期: {lunar_month}月{lunar_day}日")

    # 获取当前时辰
    current_hour = now.hour
    hour_index = get_hour_index(current_hour)
    print(f"当前时辰: {hour_index}")

    # 计算月、日、时对应的六宫名称
    start_index = 0  # 从大安开始
    month_palace = calculate_palace(start_index, lunar_month)
    day_palace = calculate_palace(palaces.index(month_palace), lunar_day)
    time_palace = calculate_palace(palaces.index(day_palace), hour_index)

    print(f"月对应的六宫名称: {month_palace}")
    print(f"日对应的六宫名称: {day_palace}")
    print(f"时对应的六宫名称: {time_palace}")

    # 输出月、日、时对应的口诀
    print(f"月对应的口诀: {oracles.get(month_palace, '未知口诀')}")
    print(f"日对应的口诀: {oracles.get(day_palace, '未知口诀')}")
    print(f"时对应的口诀: {oracles.get(time_palace, '未知口诀')}")

    # 如果日和时对应的宫位相同,输出组合口诀
    if day_palace == time_palace:
        combined_key = f"{day_palace}加{time_palace}"
        print(f"组合口诀: {combined_oracles.get(combined_key, '未知组合口诀')}")
    else:
        combined_key = f"{day_palace}加{time_palace}"
        print(f"组合口诀: {combined_oracles.get(combined_key, '未知组合口诀')}")
    input("点击任意按钮退出...")

if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值