位置: 首页 > 梅花起卦

梅花易数三位数起卦法 基于Python的科学占卜工具开发过程

梅花易数三位数起卦法 基于Python的科学占卜工具开发过程

目录 背景 前置知识 基础知识 如何生成卦 开发源码背景

长期以来,中国的占卜都是靠算命的手工实现,手续繁琐(经常需要洗澡、算天气、打坐等)。准备工作复杂(通常需要铜币等道具),计算方法复杂,需要手动计算二进制并转换成最终的卦。为了解决这个问题,作者实现了一套快速占卜的科学算命工具

本文的算命方法由八卦+周易+梅花易书实现,脚本基于.9.0开发。本人对周易五行的研究比较浅,如有疏漏,敬请见谅。

最终效果如图。程序运行后,会根据当前运势自动获取你所想的卦(本卦、互卦、变卦)。

在这里插入图片描述

必备知识基础

首先,我们需要了解一些基本的占卜知识。目前我国几种主流的占卜方法梅花易数三位数起卦法,基本都是以易进化为主。一般来说,根据某种现象得到不同的卦,不同的卦最终将代表占卜的开始、发展和结果。

太极生二法,二法生四象,四象生八卦

相信大家在很多影视作品中都听说过这句话梅花易数三位数起卦法,但很少有人知道它的真正含义。这句话其实概括了卦的生成过程。

太极:它代表一种绝对混乱的状态。这是一个哲学概念。它必须应用于我们的客观世界。可以理解为宇宙大爆炸前的状态。所有的物理定律都不会生效。这种状态。良一:也是一个哲学概念,代表一个事物的两种相反的状态。应用于客观世界时梅花易数三位数起卦法 基于Python的科学占卜工具开发过程,可以是“生死”、“黑白”、“清浊”。在占卜的过程中,我们通常会出现“阴阳”两种状态。为了记录方便,古人发明了两种符号来代表这两种状态。占卜时,我们称这样一种状态为要(yao)。

四象:当我们将阴阳配对时,我们可以得到四种不同的组合。古人称其为四象。请注意,这里的四个图像也是哲学的。,也可以是东、西、西北四个方向。占卜时,我们通常用“太阴”、“少阴”、“太阳”、“少阳”来称呼这四象。

四象

八卦:四象相加一行,即三阴阳合,可得八合。古人认为,这八种组合可以代表自然界中的八种事物(八种状态),即八卦

八卦

当然,八国不足以代表事物的发展方向,所以古人将八卦(个别八卦称为景卦)成对组合,产生了64个不同的其他卦,即《易经》中的六卦。十四卦就是这样产生的

乾为天

目前中国的主流占卜基本上是通过不同的取数方式得到不同的卦,最后判断事物的走向。其实对于程序员来说,两米可以看成是一位二进制数,有两种状态0、1。四象是两位二进制数,有00、01、10、11四种状态。八卦是三位二进制数,包括000、001、010、011、@ >100、101、110、111 个状态

如何生成六角星

现在我们知道了卦是如何演化的,但是我们还没有能够得到卦的方式。其实,在占卜的过程中,不同的占卜方式最大的区别就是起卦的方式不同。卦的方式

梅花易数卦法(这里只截取两种卦法)

一、 年、月、日、时、卦:

即农历年月日之和除以八,余数为卦数,求上卦;年、月、日之和除以八,余数为卦数,求出下卦,再将年月日之和除以六。,余数为移动线。

例:卦开始于农历人申年四月十一日:申年九数,四时六数。

上卦为:(年+月+日)÷8,取余数。即:(9+4+11)÷8,这里没有余数。

下卦为:(年+月+日+时)÷8,取余数。即:(9+4+11+6)÷8,余数为6为看卦。

移动线数为:(年+月+日+小时)÷6梅花易数三位数起卦法,取余数。即:(9+4+11+6)除以6,这里没有余数。

此卦为:上卦为坤,下卦为堪,动线为上行。

二、 直接算卦

这是一种简单而准确的制作卦的方法。当有人要求量某物时,你可以让他随意说出两个数字,第一个数字为上卦,第二个数字为下卦,两个数字之和除以6,其余的是移动线。或者你可以使用其他可以得到两个数字的方法来开始卦,比如翻书、日历等。

开发

让我们用程序员的话来总结一下梅花易书的过程。流程如下

获取一个随机数(我们这里使用当前时间戳)取8为模,作为上链(三位二进制数)再取一个随机数梅花易数三位数起卦法 基于Python的科学占卜工具开发过程,取8取模,作为下链接(一个三位二进制数)将上述两个随机数组合起来,得到一个六位二进制数。将六位二进制数转换为十进制数,查表得到这个卦的随机数。变1,1变0,再转成十进制数查表得到运势变化

import json
import random
import time
#别挂配置数据
gua_data_path = "data.json"
#别卦数据
gua_data_map = {
        
}
fake_delay = 10
#读取别卦数据
def init_gua_data(json_path):
	with open(gua_data_path,'r',encoding='utf8')as fp:
		global gua_data_map
		gua_data_map = json.load(fp)
#爻图标映射
yao_icon_map = {
	0:"- -",
	1:"---"
#经卦名
base_gua_name_map = {
	0:"坤",1:"震",2:"坎",3:"兑",4:"艮",5:"离",6:"巽",7:"乾"
#数字转化为二进制数组
def base_gua_to_yao(gua, yao_length=3):
	result = []
	while gua >= 1:
		level = 0 if gua % 2 == 0 else 1
		gua //= 2
		result.append(level)
	while len(result) < yao_length:
		result.append(0)
	return result
#二进制数组转化为数字
def base_yao_to_gua(array):
	array = array[:]
	while len(array) > 0 and array[-1] == 0:
		array.pop()
	result = 0
	for i in range(len(array)):
		if array[i] == 0:
			continue
		result += pow(2, i)
                
#打印一个挂
def print_gua(gua):
	yao_list = base_gua_to_yao(gua, 6)
	up_yao_list = yao_list[0:3]
	up = base_yao_to_gua(up_yao_list)
	print(yao_icon_map[up_yao_list[2]])
	print(yao_icon_map[up_yao_list[1]] + " " + base_gua_name_map[up])
	print(yao_icon_map[up_yao_list[0]])
	print("")
	down_yao_list = yao_list[3:6]
	down = base_yao_to_gua(down_yao_list)
	print(yao_icon_map[down_yao_list[2]])
	print(yao_icon_map[down_yao_list[1]] + " " + base_gua_name_map[down])
	print(yao_icon_map[down_yao_list[0]])
#使用梅花易数
def calculate_with_plum_flower():
	#起上卦
	print("使用梅花易数♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️♣️")
	print_a_wait_animation("卜上卦:", fake_delay)
	up_base_gua = int(round(time.time() * 1000)) % 8
	up_yao_array = base_gua_to_yao(up_base_gua)
	print("上卦获取成功,上卦为:", base_gua_name_map[up_base_gua])
	#起下卦
	print_a_wait_animation("正在获取下卦:", fake_delay)
	down_base_gua = random.randint(0, 999999999999) % 8
	down_yao_array = base_gua_to_yao(down_base_gua)
	print("上卦获取成功,下卦为:", base_gua_name_map[down_base_gua])
	#组成卦象
	print_a_wait_animation("正在组成本卦:", fake_delay)
	print("------------------------------------------------本卦------------------------------------------------")
	yao_list = up_yao_array + down_yao_array
	gua = base_yao_to_gua(yao_list)
	print_gua(gua)
	#读取本卦象信息
	gua_code = str(base_gua_name_map[up_base_gua]) + str(base_gua_name_map[down_base_gua])
	gua_data = gua_data_map[gua_code]
	print("本卦为:", gua_data['name'])
	print("辞:", gua_data['words'],"译:",gua_data['white_words'])
	print("象:", gua_data['picture'],"译:",gua_data['white_picture'])
	print_a_wait_animation("正在组成互卦:", fake_delay)
	print("------------------------------------------------互卦------------------------------------------------")
	#读取互卦象信息
	up_hu_yao_list = [yao_list[4],yao_list[5],yao_list[0]]
	up_hu_gua = base_yao_to_gua(up_hu_yao_list)
	down_hu_yao_list =[yao_list[5],yao_list[0],yao_list[1]]
	down_hu_gua = base_yao_to_gua(down_hu_yao_list)
	hu_yao_list = up_hu_yao_list + down_hu_yao_list
	hu_gua = base_yao_to_gua(hu_yao_list)
	hu_gua_code = str(base_gua_name_map[up_hu_gua]) + str(base_gua_name_map[down_hu_gua])
	hu_gua_data = gua_data_map[hu_gua_code]
	print_gua(hu_gua)
	print("互卦为:", hu_gua_data['name'])
	print("辞:", hu_gua_data['words'],"译:",hu_gua_data['white_words'])
	print("象:", hu_gua_data['picture'],"译:",hu_gua_data['white_picture'])
	print_a_wait_animation("正在组成变卦:", fake_delay)
	print("------------------------------------------------变卦------------------------------------------------")
	change_index = int(round(time.time() * 1000)) % 6
	change_yao_list = yao_list[:]
	change_yao_list[change_index] = 0 if change_yao_list[change_index] == 1 else 1
	up_change_yao_list = change_yao_list[0:3]
	up_change_gua = base_yao_to_gua(up_change_yao_list)
	down_change_yao_list =change_yao_list[3:5]
	down_change_gua = base_yao_to_gua(down_change_yao_list)
	
	change_gua = base_yao_to_gua(change_yao_list)
	print_gua(change_gua)
	change_gua_code = str(base_gua_name_map[up_change_gua]) + str(base_gua_name_map[down_change_gua])
	change_gua_data = gua_data_map[change_gua_code]
	print("变卦为:", change_gua_data['name'])
	print("辞:", change_gua_data['words'],"译:",change_gua_data['white_words'])
	print("象:", change_gua_data['picture'],"译:",change_gua_data['white_picture'])
def print_a_wait_animation(tips,times):
	animation = "|/-\\"
	idx = 0
	for i in range(times):
		print(tips + animation[idx % len(animation)],animation[idx % len(animation)],animation[idx % len(animation)],animation[idx % len(animation)],animation[idx % len(animation)], end="\r"),
		idx += 1
		time.sleep(0.1)
init_gua_data(gua_data_path)
calculate_with_plum_flower()

源代码

至此,本文就介绍了基于此的科学占卜。更多相关科学占卜,请搜索第一财经站往期文章或继续浏览下方相关文章。希望大家以后多多支持第一财经站。!

标签: 梅花易数 周易占卜

梅花相关内容