python_apps/TheChanges/dohl.py
2023-11-03 14:49:12 +09:00

268 lines
19 KiB
Python

import random,re
class 주역점치기:
def __init__(self):
self.sangaji = 50
self.taegeuk = 1
self.hyores = self.doit()
self.byunhyo = self.checkbyunhyo()
self.detail = self.interprete()
def 괘명(self,value):
db = [{'name': '중천건(乾)', '上卦': '乾(天),☰', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '九五', '上九']},
{'name': '택천쾌(夬)', '上卦': '兌(澤),☱', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '九五', '上六']},
{'name': '화천대유(大有)', '上卦': '離(火),☲', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '六五', '上九']},
{'name': '뢰천대장(大壯)', '上卦': '震(雷),☳', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '九四', '六五', '上六']},
{'name': '풍천소축(小畜)', '上卦': '巽(風),☴', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '九五', '上九']},
{'name': '수천수(需)', '上卦': '坎(水),☵', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '九五', '上六']},
{'name': '산천대축(大畜)', '上卦': '艮(山),☶', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '六五', '上九']},
{'name': '지천대(泰)', '上卦': '坤(地),☷', '下卦': '乾(天),☰', 'value': ['初九', '九二', '九三', '六四', '六五', '上六']},
{'name': '천택리(履)', '上卦': '乾(天),☰', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '九五', '上九']},
{'name': '중택태(兌)', '上卦': '兌(澤),☱', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '九五', '上六']},
{'name': '화택규(睽)', '上卦': '離(火),☲', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '六五', '上九']},
{'name': '뢰택귀매(歸妹)', '上卦': '震(雷),☳', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '九四', '六五', '上六']},
{'name': '풍택중부(中孚)', '上卦': '巽(風),☴', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '九五', '上九']},
{'name': '수택절(節)', '上卦': '坎(水),☵', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '九五', '上六']},
{'name': '산택손(損)', '上卦': '艮(山),☶', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '六五', '上九']},
{'name': '지택림(臨)', '上卦': '坤(地),☷', '下卦': '兌(澤),☱', 'value': ['初九', '九二', '六三', '六四', '六五', '上六']},
{'name': '천화동인(同人)', '上卦': '乾(天),☰', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '九五', '上九']},
{'name': '택화혁(革)', '上卦': '兌(澤),☱', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '九五', '上六']},
{'name': '중화리(離)', '上卦': '離(火),☲', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '六五', '上九']},
{'name': '뢰화풍(豊)', '上卦': '震(雷),☳', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '九四', '六五', '上六']},
{'name': '풍화가인(家人)', '上卦': '巽(風),☴', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '九五', '上九']},
{'name': '수화기제(旣濟)', '上卦': '坎(水),☵', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '九五', '上六']},
{'name': '산화비(賁)', '上卦': '艮(山),☶', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '六五', '上九']},
{'name': '지화명이(明夷)', '上卦': '坤(地),☷', '下卦': '離(火),☲', 'value': ['初九', '六二', '九三', '六四', '六五', '上六']},
{'name': '천뢰무방(无妄)', '上卦': '乾(天),☰', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '九五', '上九']},
{'name': '택뢰수(隨)', '上卦': '兌(澤),☱', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '九五', '上六']},
{'name': '화뢰서합(噬嗑)', '上卦': '離(火),☲', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '六五', '上九']},
{'name': '중뢰진(震)', '上卦': '震(雷),☳', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '九四', '六五', '上六']},
{'name': '풍뢰익(益)', '上卦': '巽(風),☴', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '九五', '上九']},
{'name': '수뢰준(屯)', '上卦': '坎(水),☵', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '九五', '上六']},
{'name': '산뢰이(頤)', '上卦': '艮(山),☶', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '六五', '上九']},
{'name': '지뢰복(復)', '上卦': '坤(地),☷', '下卦': '震(雷),☳', 'value': ['初九', '六二', '六三', '六四', '六五', '上六']},
{'name': '천풍구(姤)', '上卦': '乾(天),☰', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '九五', '上九']},
{'name': '택풍대과(大過)', '上卦': '兌(澤),☱', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '九五', '上六']},
{'name': '화풍정(鼎)', '上卦': '離(火),☲', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '六五', '上九']},
{'name': '뢰풍항(恒)', '上卦': '震(雷),☳', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '九四', '六五', '上六']},
{'name': '중풍손(巽)', '上卦': '巽(風),☴', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '九五', '上九']},
{'name': '수풍정(井)', '上卦': '坎(水),☵', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '九五', '上六']},
{'name': '산풍고(蠱)', '上卦': '艮(山),☶', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '六五', '上九']},
{'name': '지풍승(升)', '上卦': '坤(地),☷', '下卦': '巽(風),☴', 'value': ['初六', '九二', '九三', '六四', '六五', '上六']},
{'name': '천수송(訟)', '上卦': '乾(天),☰', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '九五', '上九']},
{'name': '택수곤(困)', '上卦': '兌(澤),☱', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '九五', '上六']},
{'name': '화수미제(未濟)', '上卦': '離(火),☲', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '六五', '上九']},
{'name': '뢰수해(解)', '上卦': '震(雷),☳', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '九四', '六五', '上六']},
{'name': '풍수환(渙)', '上卦': '巽(風),☴', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '九五', '上九']},
{'name': '중수감(坎)', '上卦': '坎(水),☵', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '九五', '上六']},
{'name': '산수몽(蒙)', '上卦': '艮(山),☶', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '六五', '上九']},
{'name': '지수사(師)', '上卦': '坤(地),☷', '下卦': '坎(水),☵', 'value': ['初六', '九二', '六三', '六四', '六五', '上六']},
{'name': '천산둔(遯)', '上卦': '乾(天),☰', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '九五', '上九']},
{'name': '택산함(咸)', '上卦': '兌(澤),☱', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '九五', '上六']},
{'name': '화산려(旅)', '上卦': '離(火),☲', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '六五', '上九']},
{'name': '뢰산소과(小過)', '上卦': '震(雷),☳', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '九四', '六五', '上六']},
{'name': '풍산점(漸)', '上卦': '巽(風),☴', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '九五', '上九']},
{'name': '수산건(蹇)', '上卦': '坎(水),☵', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '九五', '上六']},
{'name': '중산간(艮)', '上卦': '艮(山),☶', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '六五', '上九']},
{'name': '지산겸(謙)', '上卦': '坤(地),☷', '下卦': '艮(山),☶', 'value': ['初六', '六二', '九三', '六四', '六五', '上六']},
{'name': '천지비(否)', '上卦': '乾(天),☰', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '九五', '上九']},
{'name': '택지췌(萃)', '上卦': '兌(澤),☱', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '九五', '上六']},
{'name': '화지진(晉)', '上卦': '離(火),☲', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '六五', '上九']},
{'name': '뢰지예(豫)', '上卦': '震(雷),☳', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '九四', '六五', '上六']},
{'name': '풍지관(觀)', '上卦': '巽(風),☴', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '九五', '上九']},
{'name': '수지비(比)', '上卦': '坎(水),☵', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '九五', '上六']},
{'name': '산지박(剝)', '上卦': '艮(山),☶', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '六五', '上九']},
{'name': '중지곤(坤)', '上卦': '坤(地),☷', '下卦': '坤(地),☷', 'value': ['初六', '六二', '六三', '六四', '六五', '上六']}
]
for i in range(len(db)):
if value == db[i]['value']:
name = db[i]['name']
上卦 = db[i]['上卦']
下卦 = db[i]['下卦']
res = {'name': name, '下卦': 下卦, '上卦': 上卦}
return res
def explain(self):
res = self.detail
symbols = {'본괘':[],'지괘':[]}
guoiname = {}
for i in range(len(res)):
symbols['본괘'].append(res[i]['symbol'])
symbols['지괘'].append(res[i]['jigoui_symbol'])
guoiname['본괘'] = self.괘명(symbols['본괘'])
guoiname['지괘'] = self.괘명(symbols['지괘'])
if guoiname['본괘'] == guoiname['지괘']:
guoiname['지괘'] = ''
if self.byunhyo == 0:
guoiname['설명'] = guoiname['본괘']['name'] + "의 단사로 점의 답을 얻는다. 괘사뿐 아니라 단전, 대상을 모두 포함하여 판단한다."
if self.byunhyo == 1:
guoiname['설명'] = guoiname['본괘']['name'] + "의 변효의 효사를 해석한다."
if self.byunhyo == 2:
guoiname['설명'] = guoiname['본괘']['name'] + "의 두 변효의 효사를 해석한다. 위쪽 효사가 주동적 의미"
if self.byunhyo == 3:
guoiname['설명'] = guoiname['본괘']['name'] + "" + guoiname['지괘']['name'] + "의 괘사로 점을 판단한다."
if self.byunhyo == 4:
guoiname['본괘'] = ''
guoiname['설명'] = guoiname['지괘']['name'] + "의 불변효의 괘사로 판단한다. 아랫쪽이 주동한다."
if self.byunhyo == 5:
guoiname['본괘'] = ''
guoiname['설명'] = guoiname['지괘']['name'] + "의 불변호의 괘사로 판단한다."
if self.byunhyo == 6:
guoiname['본괘'] = ''
guoiname['설명'] = guoiname['지괘']['name'] + "의 단사로 판단한다. 건괘 곤괘의 경우는 용구, 용육의 효사를 따름"
return guoiname
def interprete(self):
res = self.hyores
if self.byunhyo == 0:
for i in range(len(res)):
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
res[i]['hyosaCheck'] = ""
if self.byunhyo == 1:
for i in range(len(res)):
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
if res[i]['number'] in [6, 9]:
res[i]['hyosaCheck'] = ""
else:
res[i]['hyosaCheck'] = ""
if self.byunhyo == 2:
j = 0
for i in range(len(res)):
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
if res[i]['number'] in [6, 9]:
res[i]['hyosaCheck'] = "Y"
j = j + 1
if j == 2:
res[i]['hyosaCheck'] = ""
else:
res[i]['hyosaCheck'] = ""
if self.byunhyo == 3:
for i in range(len(res)):
if res[i]['number'] == 6:
res[i]['jigoui_shape'] = 'xxxxxxx'
res[i]['jigoui_symbol'] = re.sub("六$","",res[i]['symbol'])
elif res[i]['number'] == 9:
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
res[i]['jigoui_symbol'] = re.sub("九$","",res[i]['symbol'])
else:
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
res[i]['hyosaCheck'] = ""
if self.byunhyo == 4:
j = 0
for i in range(len(res)):
if res[i]['number'] == 6:
res[i]['jigoui_shape'] = 'xxxxxxx'
res[i]['jigoui_symbol'] = re.sub("六$","",res[i]['symbol'])
res[i]['hyosaCheck'] = ""
elif res[i]['number'] == 9:
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
res[i]['jigoui_symbol'] = re.sub("九$","",res[i]['symbol'])
res[i]['hyosaCheck'] = ""
else:
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
res[i]['hyosaCheck'] = "Y"
j = j + 1
if j == 1 :
res[i]['hyosaCheck'] = ""
if self.byunhyo == 5:
for i in range(len(res)):
if res[i]['number'] == 6:
res[i]['jigoui_shape'] = 'xxxxxxx'
res[i]['jigoui_symbol'] = re.sub("六$","",res[i]['symbol'])
res[i]['hyosaCheck'] = ""
elif res[i]['number'] == 9:
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
res[i]['jigoui_symbol'] = re.sub("九$","",res[i]['symbol'])
res[i]['hyosaCheck'] = ""
else:
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
res[i]['hyosaCheck'] = ""
if self.byunhyo == 6:
for i in range(len(res)):
if res[i]['number'] == 6:
res[i]['jigoui_shape'] = 'xxxxxxx'
res[i]['jigoui_symbol'] = re.sub("六$","",res[i]['symbol'])
elif res[i]['number'] == 9:
res[i]['jigoui_shape'] = 'ㅁㅁ ㅁㅁ'
res[i]['jigoui_symbol'] = re.sub("九$","",res[i]['symbol'])
else:
res[i]['jigoui_shape'] = res[i]['shape']
res[i]['jigoui_symbol'] = res[i]['symbol']
for i in range(len(res)):
chg = {'初六':'初六','上六':'上六','初九':'初九','上九':'上九','二六':'六二','二九':'九二','三六':'六三','三九':'九三','四六':'六四','四九':'九四','五六':'六五','五九':'九五'}
res[i]['symbol'] = chg[res[i]['symbol']]
res[i]['jigoui_symbol'] = chg[res[i]['jigoui_symbol']]
return res
def checkbyunhyo(self):
res = 0
for i in range(len(self.hyores)):
if self.hyores[i]['number'] in [6,9]:
res = res + 1
return res
def doit(self):
res = []
prefix = ['', '', '', '', '', '']
for i in range(6):
res.append(self.decidehyo())
res[i]['symbol'] = prefix[i] + res[i]['symbol']
return res
def decidehyo(self):
objList = self.sambyun()
#number = (49 - (r1 + r2 + r3))//4
db = [{'name':'소양','shape':'=======','number': 7,'symbol':'','values': [[9, 4, 8], [9, 8, 4], [5, 8, 8]]},
{'name':'소음','shape':'=== ===','number': 8,'symbol':'','values': [[5, 4, 8], [5, 8, 4], [9, 4, 4]]},
{'name':'노양','shape':'ㅁㅁㅁㅁㅁ','number': 9,'symbol':'','values': [[5, 4, 4]]},
{'name':'노음','shape':'xxx xxx','number': 6,'symbol':'','values': [[9, 8, 8]]}]
for i in range(len(db)):
for j in range(len(db[i]['values'])):
if objList == db[i]['values'][j]:
hyoname = db[i]['name']
shape = db[i]['shape']
number = db[i]['number']
symbol = db[i]['symbol']
res = {'name': hyoname, 'shape': shape, 'number': number, 'symbol':symbol, 'remains': objList}
return res
def sambyun(self):
hyo = self.sangaji - self.taegeuk
res = []
for i in range(3):
res.append(self.byun(hyo))
hyo = hyo - res[i]
return res
def byun(self,hyo):
tmp = random.randrange(1, 6)
randmin = (hyo // 2) - tmp
randmax = (hyo // 2) + tmp
left = random.randrange(randmin, randmax)
right = hyo - left
human = 1
right = right - human
left_tmp = left % 4
if left_tmp == 0:
left_tmp = 4
human = human + left_tmp
right_tmp = right % 4
if right_tmp == 0:
right_tmp = 4
human = human + right_tmp
return human
주역점치기 = 주역점치기()
if __name__ == '__main__':
res = 주역점치기.detail
for i in reversed(res):
print(i)
rres = 주역점치기.explain()
print(rres)