268 lines
19 KiB
Python
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) |