Python实现科学占卜 让视频自动打码


Posted in Python onApril 09, 2022

背景

一直以来,中式占卜都是基于算命先生手工实现,程序繁琐(往往需要沐浴、计算天时、静心等等流程)。准备工作复杂(通常需要铜钱等道具),计算方法复杂,需要纯手工计算二进制并转换为最终的卦象,为了解决这个问题,笔者基于python实现了一套科学算命工具,用于快速进行占卜
本文的算命方式采用八卦 + 周易+ 梅花易数实现,脚本基于python3.9.0开发。本人对于周易五行研究较浅,如有疏漏请见谅
最终效果如图,在运行程序之后,会根据当前的运势自动获取你心中所想之事的卦象(本卦、互卦、变卦)

Python实现科学占卜 让视频自动打码

前置知识

基础原理

首先我们需要了解一些最基本的占卜知识,目前我国几种比较主流的占卜方式基本都是基于易演化而来。总体而言都是根据某些现象,得到不同的卦象,而不同的卦象最终会代表所占卜事情的开端,发展和结果。

太极生两仪,两仪生四象,四象生八卦

这句话相信大家在很多影视作品中都听说过,但很少有人知道它的真正含义,这句话其实概括了卦象产生的流程。

  • 太极:代表一个绝对混沌的状态,是一个哲学观念,非要套用我们的客观世界,可以理解为是大爆炸之前宇宙的状态,所有的物理法则都不生效,当我们还未起卦时就处于这个状态。
  • 两仪:同样是一个哲学观念,代表一个事物的两个对立状态,套用到客观世界可以是“生-死”、“黑-白”、“清-浊”,在占卜的过程中,我们通常会有“阴-阳”两个状态,为了方便记录,古人发明了两个符号代表这两个状态,在占卜的时候,一个这样的状态我们称之为一爻(yao)

Python实现科学占卜 让视频自动打码

  • 四象:当我们将阴阳两两组合时,就可以得到四种不同的组合,古人称之为四象,注意,这里的四象同样是哲学层面的状态,它可以是“青龙白虎朱雀玄武”,也可以是东南西北四个方位,在占卜的时候,我们通常会用“太阴”、“少阴”、“太阳”、“少阳”来称呼这四象

Python实现科学占卜 让视频自动打码

  • 八卦:当给我们在四象中增加一爻,也就是三个阴阳组合在一起的时候,我们可以得到八个组合,古人认为这八个组合可以代表自然界中的八类事物(八中状态),即是为八卦

Python实现科学占卜 让视频自动打码

当然,八个状态用来代表事情的发展方向还是不够用,于是古人又将八卦(单独的八卦称之为经卦)两两组合,从而得到了64个不同的别卦,易经中的六十四卦就是这么产生的

Python实现科学占卜 让视频自动打码

目前,国内的主流占卜基本都是通过不同的取数方式得到不同的别卦,最终判断事情的走向。其实对于程序员来说,可以吧两仪当做一个一位二进制数,有0、1两个状态。四象就是两位二进制数,有00,01,10,11四个状态。八卦则是三位二进制数,有000,、001、010、011、100、101、110、111四个状态

如何产生卦象

现在我们知道了卦象是如何演变的,但是我们还没有能够得到卦象的方式,其实在占卜的过程中,不同的占卜方式往往最大的区别就是起卦方式不同,我们这里采用梅花易数的方式起卦

梅花易数起卦法(这里只截取两种起卦方式)
一、年月日时起卦:
即以农历之年月日总和除以八,以余数为卦数求上卦;以年月日时总和除以八,以余数为卦数求下卦,再以年月日时总和除以六,以余数为动爻。
例:农历壬申年四月十一日巳时起卦:申年9数,巳时6数。
上卦为:(年+月+日)÷8,取余数。 即:(9+4+11)÷8,此处无余数。
下卦为:(年+月+日+时)÷8,取余数。 即:(9+4+11+6)÷8,余数为6为坎卦。
动爻数为:(年+月+日+时)÷6,取余数。 即:(9+4+11+6)除以6,此处无余数。
此卦为:上卦为坤,下卦为坎,动爻为上爻。
二、直接以数起卦
这是一种简便而准确率极高的起卦方法。当有人求测某事时,可以让来人随意说出两个数,第一个数取为上卦,第二个数取为下卦,两数之和除以6,余数为动爻,或者可以随便借用其他能得到两数的办法起卦,如翻书、日历等等。

开发

我们将梅花易数的起卦方式流程用程序员的话总结一下,流程如下

  • 获取一个随机数(我们这里用当前的时间戳)对8取模,当做上挂(一个三位二进制数)
  • 再获取一个随机数,对八取模,当做下挂(一个三位二进制数)
  • 将上述两个随机数进行组合,得到一个六位二进制数
  • 六位二进制数转化为十进制数并查表,得到本卦
  • 取一个随机数,对6取模,将上述六位二进制数对应位数的0变为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()

源代码

https://github.com/MrFengGG/ToChange/tree/master

到此这篇关于基于Python的科学占卜的文章就介绍到这了,更多相关python科学占卜内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python标准库inspect的具体使用方法
Dec 06 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python编写简单端口扫描器
Sep 04 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
10个Python面试常问的问题(小结)
Nov 20 Python
python deque模块简单使用代码实例
Mar 12 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
python for循环赋值问题
Jun 03 Python
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
用Python仅20行代码编写一个简单的端口扫描器
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
You might like
php SQL防注入代码集合
2008/04/25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
十个Python程序员易犯的错误
2015/12/15 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Python将图片转换为字符画的方法
2020/06/16 Python
实践Vim配置python开发环境
2018/07/02 Python
python实现倒计时小工具
2019/07/29 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
python银行系统实现源码
2019/10/25 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
项目计划书范文
2014/01/09 职场文书
社区清明节活动总结
2014/07/04 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
千手观音观后感
2015/06/03 职场文书
发票退票证明
2015/06/24 职场文书
党章学习心得体会2016
2016/01/14 职场文书
2019年大学推荐信
2019/06/24 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle