banner
Hello!

python实现简单的卜筮方法

Scroll down

Duality 之前暑假自学python时突发奇想写出来的东西而已 基本的iching函数(将1和0转化为64卦):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
def iching(str):
'''将数字转化为六十四卦'''
if str=='111111':
return '乾䷀'
elif str=='000000':
return '坤䷁'
elif str=='010001':
return '屯䷂'
elif str=='100010':
return '蒙䷃'
elif str== '010111':
return '需䷄'
elif str=='111010':
return '讼䷅'
elif str=='000010':
return '师䷆'
elif str=='010000':
return '比䷇'
elif str=='110111':
return '小蓄䷈'
elif str=='111011':
return '履䷉'
elif str=='000111':
return '泰䷊'
elif str=='111000':
return '否䷋'
elif str=='111101':
return '同人䷌'
elif str=='101111':
return '大有䷍'
elif str=='000100':
return'谦䷎'
elif str=='001000':
return '豫䷏'
elif str=='011001':
return '随䷐'
elif str=='100110':
return '蛊䷑'
elif str=='000011':
return '临䷒'
elif str=='110000':
return '观䷓'
elif str=='101001':
return '噬嗑䷔'
elif str=='100101':
return '贲䷕'
elif str=='100000':
return '剥䷖'
elif str=='000001':
return '复䷗'
elif str=='111001':
return '无妄䷘'
elif str=='100111':
return '大蓄䷙'
elif str=='100001':
return '颐䷚'
elif str=='011110':
return '大过䷛'
elif str=='010010':
return '坎䷜'
elif str=='101101':
return '离䷝'
elif str=='011100':
return '咸䷞'
elif str=='001110':
return '恒䷟'
elif str=='111100':
return '遁䷠'
elif str=='001111':
return '大壮䷡'
elif str=='101000':
return '晋䷢'
elif str=='000101':
return '明夷'
elif str=='110101':
return '家人䷤'
elif str=='101011':
return '睽䷥'
elif str=='010100':
return '蹇䷦'
elif str=='001010':
return '解䷧'
elif str=='100011':
return '损䷨'
elif str=='110001':
return '益䷩'
elif str=='011111':
return '夬䷪'
elif str=='111110':
return '姤䷫'
elif str=='011000':
return '萃䷬'
elif str=='000110':
return '升䷭'
elif str=='011010':
return '困䷮'
elif str=='010110':
return '井䷯'
elif str=='011101':
return '革䷰'
elif str=='101110':
return '鼎䷱'
elif str=='001001':
return '震䷲'
elif str=='100100':
return '艮䷳'
elif str=='110100':
return '渐䷴'
elif str=='001011':
return '归妹䷵'
elif str=='001101':
return '丰䷶'
elif str=='101100':
return '旅䷷'
elif str=='110110':
return '巽䷸'
elif str=='011011':
return '兑䷹'
elif str=='110010':
return '涣䷺'
elif str=='010011':
return '节䷻'
elif str=='110011':
return '中孚䷼'
elif str=='001100':
return '小过䷽'
elif str=='010101':
return '既济䷾'
elif str=='101010':
return '未济䷿'

1.硬币筮法: 用三个铜钱抛掷,根据结果判断爻型。

  • 两个面一个背为少阳。
  • 两个背一个面为少阴。
  • 三个背为老阳。
  • 三个面为老阴。 如此抛掷六次即可得到六爻。无变爻看本卦卦辞,一个变爻看变爻爻辞,两个以上变爻看本卦卦辞。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    import random
    bagua1={'乾':'111','坤':'000','坎':'010','离':'101','巽':'110','兑':'011','震':'001','艮':'100'}
    bagua2={'111':'乾','000':'坤','010':'坎','101':'离','110':'巽','011':'兑','001':'震','100':'艮'}
    coin=[]
    res=[]
    for n in range(1,7):
    print('第',n,'次扔硬币',sep='')
    for i in range(1,4):
    coin.append(random.randint(0,1))#扔三个硬币
    for t in range(0,3):
    if coin[t]==1:
    print('第',t+1,'个硬币为正面',sep='')
    else:
    print('第',t+1,'个硬币为反面',sep='')
    zheng=coin.count(1)
    if zheng==0:
    res.append(9)#9为老阳
    elif zheng==1:
    res.append(8)#8为少阴
    elif zheng==2:
    res.append(7)#7为少阳
    elif zheng==3:
    res.append(6)#6为老阴
    coin=[]
    transc=[]
    trans=[]
    print(res)
    #无变爻的情况
    if res.count(9)+res.count(6)==0:
    for s in range(0,6):
    if res[s]==8:#少阴为阴
    trans.append(0)
    elif res[s]==7:#少阳为阳
    trans.append(1)
    ult=''.join(str(e) for e in trans)
    print(iching(ult),'不变',sep='')
    #有变爻的情况
    elif res.count(9)+res.count(6)==1:#仅一个变爻
    for s in range(0,6):
    if res[s]==8:#少阴为阴
    trans.append(0)
    transc.append(0)
    elif res[s]==7:#少阳为阳
    trans.append(1)
    transc.append(1)
    elif res[s]==9:#老阳阳变阴
    transc.append(1)
    trans.append(0)
    elif res[s]==6:#老阴阴变阳
    transc.append(0)
    trans.append(1)
    ult0=''.join(str(e) for e in transc)#变爻前
    ult=''.join(str(e) for e in trans)#变爻后
    print(ult0,ult)
    print(iching(ult0),'之',iching(ult),sep='')
    elif res.count(9)+res.count(6)>1:#有多个变爻
    for s in range(0,6):
    if res[s]==8:#少阴为阴
    trans.append(0)
    elif res[s]==7:#少阳为阳
    trans.append(1)
    elif res[s]==9:#老阳为阳
    trans.append(1)
    elif res[s]==6:#老阴为阴
    trans.append(0)
    ult=''.join(str(e) for e in trans)
    print(ult)
    print('多个变爻,本卦为',iching(ult))
    input()

2.简易竹签筮法 五十根竹签,除去一根为太极。剩下的四十九根竹签分握于左右手,左手为天右手为地。从右手中抽出一根夹在左手小指中。用右手数左手中的竹签,八根一数,数尽不留,余下的加上左手小指的一根,计数得到下卦:一为乾☰,二为兑☱,三为离☲,四为震☳,五为巽☴,六为坎☵,七为艮☶,八为坤☷。 重复以上流程得到上卦。 再取四十九根竹签,分握于左右手,从右手取出一根夹于左小指,将左手的签六根一数,数尽不留。余下的加上小指的一根,合计为几时便几爻变。以变爻的爻辞占断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
bagua1={'乾':'111','坤':'000','坎':'010','离':'101','巽':'110','兑':'011','震':'001','艮':'100'}
bagua2={'111':'乾','000':'坤','010':'坎','101':'离','110':'巽','011':'兑','001':'震','100':'艮'}
res=[]
for n in range(1,2):
for i in range(1,3):
x=random.randint(1,49)#此为左手所握有的竹签数
y=(x%8)+1
if y==1:
res.append('乾')
elif y==2:
res.append('兑')
elif y==3:
res.append('离')
elif y==4:
res.append('震')
elif y==5:
res.append('巽')
elif y==6:
res.append('坎')
elif y==7:
res.append('艮')
elif y==8:
res.append('坤')
#开始变爻
x=random.randint(1,49)#此为左手所握有的竹签数
y=(x%6)+1
down=bagua1[res[0]]
up=bagua1[res[1]]
down1=down
up1=up
for i in range(1,4):
if y==i:
#i1=i
if down[i-1]=='1':
dl=list(down1)#由于字符串无法直接修改,故先转化为列表,修改后再拼接回字符串
dl[i-1]=0#修改元素
down1=''.join(str(e) for e in dl)#由于拼接只能用于字符串,故将dl中的整数全转换为字符串后再拼接
else:
dl=list(down1)
dl[i-1]=1
down1=''.join(str(e) for e in dl)
res[0]=bagua2[down1]
for i in range(4,7):
if y==i:
#i1=i
if up[i-4]=='1':
ul=list(up1)
ul[i-4]=0
up1=''.join(str(e) for e in ul)
else:
ul=list(up1)
ul[i-4]=1
up1=''.join(str(e) for e in ul)
res[1]=bagua2[up1]
print(iching(up+down),'之',iching(up1+down1),sep="")
res=[]
input()
其他文章
cover
简单的不等式推导
  • 22/09/14
  • 23:06
  • 数学
cover
【自设架空】桃花源解
  • 22/03/05
  • 20:40
  • 架空