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)