【项目预览】
【创作背景】
我爹在大学教《易经》,我也跟着学了点算卦的皮毛,当上了半仙,经常在群里给小伙伴算姻缘。其实算卦的流程非常的机械化,既然学了python,那就要用起来呀!解放双手,快速算卦!
【功能设想】
输入一句话,得出一个卦。输出卦名,卦辞,爻辞。因为对卦辞爻辞的解释实在太长,就不输出了,自己去百度查吧。
【功能实现】
一句话如何转换成一个卦呢?手工算卦的办法是:
1、把这句话分成两半。
2、前半截笔画总和除以8取余数,得到下卦数;后半截笔画总和除以8取余数,得到上卦数。
3、全句笔画总和除以6取余数,得到爻数。
4、按照“乾,兑,离,震,巽,坎,艮,坤”的顺序,确定上下卦名,再组合出全卦名。
可以看出,这个程序非常机械化,就是一个 数笔画-做除法-查卦名 的过程。机械的事情最适合交给程序来做了。
1、数笔画这个过程的本质就是把汉字数字化,虽然我不会用程序数笔画,但只要能实现汉字数字化,就行了。先把输入的字符串对半切片,然后使用ord()即可把任意字符转换成数字。
2、取余得到上下卦数
3、取余得到爻数
4、设置字典1,把上下卦数转换成卦名。设置字典2,把卦数+爻数转换成卦辞+爻辞。
【效果体验】
【完工感受】
以前在群里手工算卦得掰着手指头数笔画,尤其句子一长,可累了。所以我自称灵力不足,每天要限制算卦数量。现在好了,小程序一秒算卦,我只负责编解释+瞎掰扯就行了,有更多时间去摸鱼啦!
另外一点,这个程序里的字典的创建,真的是累死我了。一共64*7=448条卦辞+爻辞,从网上一条一条复制粘贴。这让我发誓赌咒要好好学习爬虫,以后再也不做这么笨重的事情了。
【完整代码】(字典太长,只截取了一小段):
import time
print('----------------欢迎来到云云仙快速算卦小屋----------------')
print('\n制作人:云云\n完工日期:2021-4-13')
print('''
算卦三原则:1,无疑不卜:没有疑问就不要瞎算了。
2,不重复算:问过的问题不要重复问。
3,不信不卜:抱着玩玩的态度问问题,算出的答案也就跟你玩玩。''')
order=['乾','兑','离','震','巽','坎','艮','坤']
dic={11:'乾为天:元亨利贞',\
111:'初九,潜龙,勿用。',\
112:'九二,见龙在田,利见大人。',\
113:'九三,君子终日乾乾,夕惕若,厉无咎。',\
...
884:'六四,括囊,无咎无誉。',\
885:'六五,黄裳,元吉。',\
886:'上六,龙战于野,其血玄黄。'}
while True:
word=input('\n把你想算的问题写下来吧(支持中英文):')
n=len(word)
line1=[]
line2=[]
for i in range(0,int(n/2)):
line1.append(ord(word[i]))
sum1=sum(line1)
yao1=sum1%8
if yao1==0:
yao1=8
for j in range(int(n/2),n):
line2.append(ord(word[j]))
sum2=sum(line2)
yao2=sum2%8
if yao2==0:
yao2=8
yao=(sum1+sum2)%6
if yao==0:
yao=6
time.sleep(1)
print('\n您的算卦结果:上',order[yao2-1],'下',order[yao1-1],',第',yao,'爻\n')
print('卦辞:',dic[yao1*10+yao2])
print('\n爻辞:',dic[yao1*100+yao2*10+yao])
time.sleep(1)
print('\n'+'-'*70)
conti=input('\n还想再算一卦吗?按1再算一卦。按其他键结束程序:')
if conti!='1':
print('\n谢谢使用,程序即将自动关闭。\n')
for n in range(3,-1,-1):
print(n,end="")
print("\b"*2,end="",flush=True)
time.sleep(1)
break