哪些网站做品牌特卖,网站怎么做留言提交功能,网站一级页面标题怎么做,app制作网站制作完一直以来#xff0c;中式占卜都是基于算命先生手工实现#xff0c;程序繁琐#xff08;往往需要沐浴、计算天时、静心等等流程#xff09;。准备工作复杂#xff08;通常需要铜钱等道具#xff09;#xff0c;计算方法复杂#xff0c;需要纯手工计算二进制并转换为最终…一直以来中式占卜都是基于算命先生手工实现程序繁琐往往需要沐浴、计算天时、静心等等流程。准备工作复杂通常需要铜钱等道具计算方法复杂需要纯手工计算二进制并转换为最终的卦象为了解决这个问题笔者基于python实现了一套科学算命工具用于快速进行占卜。
本文的算命方式采用八卦 周易 梅花易数实现脚本基于python3.9.0开发。本人对于周易五行研究较浅如有疏漏请见谅。
最终效果如图在运行程序之后会根据当前的运势自动获取你心中所想之事的卦象本卦、互卦、变卦 前置知识
基础原理
首先我们需要了解一些最基本的占卜知识目前我国几种比较主流的占卜方式基本都是基于易演化而来。总体而言都是根据某些现象得到不同的卦象而不同的卦象最终会代表所占卜事情的开端发展和结果。
太极生两仪两仪生四象四象生八卦
这句话相信大家在很多影视作品中都听说过但很少有人知道它的真正含义这句话其实概括了卦象产生的流程。 太极代表一个绝对混沌的状态是一个哲学观念非要套用我们的客观世界可以理解为是大爆炸之前宇宙的状态所有的物理法则都不生效当我们还未起卦时就处于这个状态。 两仪同样是一个哲学观念代表一个事物的两个对立状态套用到客观世界可以是“生-死”、“黑-白”、“清-浊”在占卜的过程中我们通常会有“阴-阳”两个状态为了方便记录古人发明了两个符号代表这两个状态在占卜的时候一个这样的状态我们称之为一爻yao 四象当我们将阴阳两两组合时就可以得到四种不同的组合古人称之为四象注意这里的四象同样是哲学层面的状态它可以是“青龙白虎朱雀玄武”也可以是东南西北四个方位在占卜的时候我们通常会用“太阴”、“少阴”、“太阳”、“少阳”来称呼这四象。 八卦当给我们在四象中增加一爻也就是三个阴阳组合在一起的时候我们可以得到八个组合古人认为这八个组合可以代表自然界中的八类事物八中状态即是为八卦。 当然八个状态用来代表事情的发展方向还是不够用于是古人又将八卦单独的八卦称之为经卦两两组合从而得到了64个不同的别卦易经中的六十四卦就是这么产生的。 目前国内的主流占卜基本都是通过不同的取数方式得到不同的别卦最终判断事情的走向。其实对于程序员来说可以吧两仪当做一个一位二进制数有0、1两个状态。四象就是两位二进制数有00,01,10,11四个状态。八卦则是三位二进制数有000,、001、010、011、100、101、110、111四个状态。
如何产生卦象
现在我们知道了卦象是如何演变的但是我们还没有能够得到卦象的方式其实在占卜的过程中不同的占卜方式往往最大的区别就是起卦方式不同我们这里采用梅花易数的方式起卦
梅花易数起卦法这里只截取两种起卦方式
一、年月日时起卦即以农历之年月日总和除以八以余数为卦数求上卦;以年月日时总和除以八以余数为卦数求下卦再以年月日时总和除以六以余数为动爻。例农历壬申年四月十一日巳时起卦申年9数巳时6数。上卦为年月日÷8取余数。 即9411÷8此处无余数。下卦为年月日时÷8取余数。 即94116÷8余数为6为坎卦。动爻数为年月日时÷6取余数。 即94116除以6此处无余数。此卦为上卦为坤下卦为坎动爻为上爻。
二、直接以数起卦这是一种简便而准确率极高的起卦方法。当有人求测某事时可以让来人随意说出两个数第一个数取为上卦第二个数取为下卦两数之和除以6余数为动爻或者可以随便借用其他能得到两数的办法起卦如翻书、日历等等。
开发
我们将梅花易数的起卦方式流程用程序员的话总结一下流程如下。
获取一个随机数我们这里用当前的时间戳对8取模当做上挂一个三位二进制数。再获取一个随机数对八取模当做下挂一个三位二进制数。将上述两个随机数进行组合得到一个六位二进制数。六位二进制数转化为十进制数并查表得到本卦。取一个随机数对6取模将上述六位二进制数对应位数的0变为1,1变为0然后转化为十进制数并查表得到变卦。根据本卦和变卦查表得到占卜结果.。 import json
import random
import time#别挂配置数据
# 源代码Python学习资料都在这个群啦 924040232
gua_data_path data.json#别卦数据
gua_data_map {}
fake_delay 10#读取别卦数据
def init_gua_data(json_path):with open(gua_data_path,r,encodingutf8)as fp:global gua_data_mapgua_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_length3):result []while gua 1:level 0 if gua % 2 0 else 1gua // 2result.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 0for i in range(len(array)):if array[i] 0:continueresult pow(2, i)return result#打印一个挂
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)) % 8up_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) % 8down_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_arraygua 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_listhu_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)) % 6change_yao_list yao_list[:]change_yao_list[change_index] 0 if change_yao_list[change_index] 1 else 1up_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 0for 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 1time.sleep(0.1)init_gua_data(gua_data_path)
calculate_with_plum_flower()