大衍筮法-python实现

《周易》中大衍筮法用python实现

import numpy as np

hand = np.zeros(4)
天道 = 1


def yao():

    num = 50 - 天道 #num为计算总数,第一变时,计算总数减去天道

    # 分二
    ## 从49个数分为两堆
    ###num_rand为右手
    ###num_resi为左手
    num_rand = np.random.randint(0, num)
    #print("此次计算总数:",num)
    num_resi = num - num_rand

    # 挂一
    ##挂一以象三,从右堆取出一个,放在手指间
    hand[0] = 1
    num_rand = num_rand - hand[0]

    # 揲四
    ## 将num_resi,按四个一堆分出
    num_resi_rema = num_resi % 4  # 取余数

    # 归奇
    ##确定余数为1、2、3、4
    if num_resi_rema == 0:
        num_resi_rema = 4
    else:
        num_resi_rema = num_resi_rema
    ##两边余数相加为4,若其中一个为4,另一个也为4
    if num_resi_rema == 4:
        num_rand_rema = 4
    else:
        num_rand_rema = 4 - num_resi_rema
    ##两个余数加在一起,rema结果为4或8
    rema = num_rand_rema + num_resi_rema

    hand[1] = rema # 余数放在手指间
    num = num - rema-1 #更新num值,用于下一变计算.即桌子上剩余个数
    #print("手指1间隔蓍草余数之和:", hand[1])


    # 计算第二变

    #分二
    num_rand = np.random.randint(0, num)
    #print("二变计算总数:",num)
    num_resi = num - num_rand

    # 挂一
    hand[2] = 1
    num_rand = num_rand - hand[2]

    # 揲四
    ## 将num_resi,按四个一堆分出
    num_resi_rema = num_resi % 4  # 取余数
    if num_resi_rema == 0:
        num_resi_rema = 4
    else:
        num_resi_rema = num_resi_rema

    hand[2] = hand[2] + num_resi_rema
    if hand[2] < 4 :
        num_rand = num_rand - (4 - hand[2])
        hand[2] = 4
    elif hand[2] == 4:
        num_rand = num_rand - 4
        hand[2] = 8
    else:
        num_rand = num_rand - 3
        hand[2] = 8

    num = num - hand[2]
    #print("手指2间隔蓍草余数之和:", hand[2])
    #print("二变后变计算蓍草总数:", num)

    # 计算第三变

    #分二
    num_rand = np.random.randint(0, num)
    #print("二变计算总数:",num)
    num_resi = num - num_rand

    # 挂一
    hand[3] = 1
    num_rand = num_rand - hand[3]

    # 揲四
    ## 将num_resi,按四个一堆分出
    num_resi_rema = num_resi % 4  # 取余数
    if num_resi_rema == 0:
        num_resi_rema = 4
    else:
        num_resi_rema = num_resi_rema

    hand[3] = hand[3] + num_resi_rema
    if hand[3] < 4 :
        num_rand = num_rand - (4 - hand[3])
        hand[3] = 4
    elif hand[3] == 4:
        num_rand = num_rand - 4
        hand[3] = 8
    else:
        num_rand = num_rand - 3
        hand[3] = 8

    num = num - hand[3]
    result = num/4

    if result == 6:
        本卦 = '老阴'
        变卦 = '阳'
    elif result == 7:
        本卦 = '少阳'
        变卦 = '阳'
    elif result == 8:
        本卦 = '少阴'
        变卦 = '阴'
    elif result == 9:
        本卦 = '老阳'
        变卦 = '阴'

    #print("手指3间隔蓍草余数之和:", hand[3])
    #print("最终剩余数量:", num)
    #print("爻:", result)#必为6、7、8、9
    print("本挂:", 本卦,"变挂:", 变卦)  # 必为6、7、8、9
    #9:老阳、7:少阳、6:老阴、8:少阴
    # 老阴、老阳要变

'''

    推演三变出来一爻
    一卦六爻
    十八变出现一卦
    
    用哪一爻预测未来,取决于老阴老阳有多少
'''
def main():
    for i in range(6):
        # 计算6次
        yao()

main()
#计算出结果,每一爻,由下至上,与自己算卦书写时一致
#根据所得六爻,及变卦,得到两个卦象,自行百度查看意思

查看结果

在这里插入图片描述

本卦- 泰卦

在这里插入图片描述

泰卦 - 解释

〖原文〗小往大来,吉,亨。
〖译文〗付出小,收益大,吉祥,顺利。
〖解说〗这是泰卦卦辞,综合说明当前形势。主卦的卦象是天,天有无穷威力;客卦卦象是地,地对天无限顺从。因此,整个形势对主方有利。“小往大来”,交往中主方付出小,收益大。“吉”,形势对主方吉利。“亨”,进展顺利。

变卦 - 兑卦

在这里插入图片描述

兑卦 - 解释

〖卦辞原文〗亨,利贞。
〖译文〗顺利,利于坚持下去。
〖解说〗主客双方都有良好的素质,都积极主动寻求发展,而态度又都随和,主客双方关系对于主方来说是一个好的环境,“亨”,利于继续坚持下去。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值