《周易》中大衍筮法用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()
#计算出结果,每一爻,由下至上,与自己算卦书写时一致
#根据所得六爻,及变卦,得到两个卦象,自行百度查看意思
查看结果
本卦- 泰卦
泰卦 - 解释
〖原文〗小往大来,吉,亨。
〖译文〗付出小,收益大,吉祥,顺利。
〖解说〗这是泰卦卦辞,综合说明当前形势。主卦的卦象是天,天有无穷威力;客卦卦象是地,地对天无限顺从。因此,整个形势对主方有利。“小往大来”,交往中主方付出小,收益大。“吉”,形势对主方吉利。“亨”,进展顺利。
变卦 - 兑卦
兑卦 - 解释
〖卦辞原文〗亨,利贞。
〖译文〗顺利,利于坚持下去。
〖解说〗主客双方都有良好的素质,都积极主动寻求发展,而态度又都随和,主客双方关系对于主方来说是一个好的环境,“亨”,利于继续坚持下去。