def get_ceshu(gua, index): try: code = Gua.guatu64(gua) answer = 0 #原策数,阳 36 阴 24 yuanceshu = 24 * 6 + sum(code) * 12 up = Gua.get_8gua_index(code[0:3]) down = Gua.get_8gua_index(code[3:]) answer = yuanceshu + up + down + index if index > 3: answer += (index * 10 + up) * yuanceshu else: answer += (down * 10 + index) * yuanceshu answer = str(answer) answer = answer[len(answer) - 4:] #元会世运 result = {} result[u'元'] = answer[0] result[u'会'] = answer[1] result[u'世'] = answer[2] result[u'运'] = answer[3] print answer return result except Exception, e: traceback.print_exc() print e
def get_ceshu(gua,index): try: code = Gua.guatu64(gua) answer = 0 #原策数,阳 36 阴 24 yuanceshu = 24*6+sum(code)*12 up = Gua.get_8gua_index(code[0:3]) down = Gua.get_8gua_index(code[3:]) answer = yuanceshu + up + down + index if index > 3: answer += (index*10+up)*yuanceshu else: answer += (down*10+index)*yuanceshu answer = str(answer) answer = answer[len(answer)-4:] #元会世运 result = {} result[u'元'] = answer[0] result[u'会'] = answer[1] result[u'世'] = answer[2] result[u'运'] = answer[3] print answer return result except Exception,e: traceback.print_exc() print e
def __init__(self, date, whom, what, gender, qi_gua): self.date = LunarDate(date[0], date[1], date[2]) self.whom = whom self.what = what self.gender = gender bengua_num = 0b000000 zhigua_num = 0b000000 self.bianyao = [] for x in range(6): if qi_gua[x] == "单": yao = 1 << x bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao elif qi_gua[x] == "坼": yao = 0 << x # just for clearness bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao elif qi_gua[x] == "重": yao = 1 << x self.bianyao.append(x) bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao ^ (1 << x) elif qi_gua[x] == "交": yao = 0 << x self.bianyao.append(x) bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao ^ (1 << x) else: raise ValueError self.bengua = Gua(bengua_num) self.zhigua = Gua(zhigua_num) self.an_bianqin() self.an_liushou()
def yungua(year): try: gua,gua_remain = HUI_YUAN_YUN_SHI.gua(year) return Gua.biangua(gua,gua_remain) except Exception,e: traceback.print_exc() print e
def shigua(year): try: gua = HUI_YUAN_YUN_SHI.yungua(year) shi = HUI_YUAN_YUN_SHI.Shi(year)[0] return Gua.biangua(gua,(shi+1)/2) except Exception,e: traceback.print_exc() print e
def gua(year): try: hui,hui_remain = HUI_YUAN_YUN_SHI.Hui(year) yun,yun_remain = HUI_YUAN_YUN_SHI.Yun(year) guas = HUI_YUAN_YUN_SHI.HUI[hui-1] values = guas[guas.keys()[0]] yun_tmp = yun % 6 if yun_tmp == 0: yun_tmp = 6 return Gua.get_64gua_fullname(values[yun/6-1]),yun_tmp else: return Gua.get_64gua_fullname(values[yun/6]),yun_tmp except Exception,e: traceback.print_exc() print e
def niangua(year): try: gua = HUI_YUAN_YUN_SHI.shigua(year) value = 0 for i,v in enumerate(HUI_YUAN_YUN_SHI.XIANTIAN_60_PEIGUATU): if v in gua: value = i+1 break shi,shi_remain = HUI_YUAN_YUN_SHI.Shi(year) value = value -1 + shi_remain if shi % 2 == 0: value += 30 tmp = value % 60 if tmp == 0: tmp = 60 return Gua.get_64gua_fullname(HUI_YUAN_YUN_SHI.XIANTIAN_60_PEIGUATU[tmp-1]) except Exception,e: traceback.print_exc() print e
class ZhanGua(object): """一次占卦。 date: 起卦日期。named tuple. 如date.year .month .day = "甲子", whom: 所占何人,如:"同事", what: 所占何事,如:"婚姻", gender: 问卜者性别,"男" or "女", qi_gua: 摇卦结果, 如("单坼重交单坼"), """ def __init__(self, date, whom, what, gender, qi_gua): self.date = LunarDate(date[0], date[1], date[2]) self.whom = whom self.what = what self.gender = gender bengua_num = 0b000000 zhigua_num = 0b000000 self.bianyao = [] for x in range(6): if qi_gua[x] == "单": yao = 1 << x bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao elif qi_gua[x] == "坼": yao = 0 << x # just for clearness bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao elif qi_gua[x] == "重": yao = 1 << x self.bianyao.append(x) bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao ^ (1 << x) elif qi_gua[x] == "交": yao = 0 << x self.bianyao.append(x) bengua_num = bengua_num | yao zhigua_num = zhigua_num | yao ^ (1 << x) else: raise ValueError self.bengua = Gua(bengua_num) self.zhigua = Gua(zhigua_num) self.an_bianqin() self.an_liushou() def an_bianqin(self): """重定变爻六亲""" for x in self.bianyao: self.zhigua.yao[x].liuqin = self.bengua.find_liuqin(self.zhigua.yao[x].wuxing) """ if gong2wuxing[self.bengua.gong] == self.zhigua.yao[x].wuxing: self.zhigua.yao[x].liuqin = "兄弟" elif wuxing_sheng[gong2wuxing[self.bengua.gong]] == self.zhigua.yao[x].wuxing: self.zhigua.yao[x].liuqin = "子孙" elif wuxing_shengwo[gong2wuxing[self.bengua.gong]] == self.zhigua.yao[x].wuxing: self.zhigua.yao[x].liuqin = "父母" elif wuxing_ke[gong2wuxing[self.bengua.gong]] == self.zhigua.yao[x].wuxing: self.zhigua.yao[x].liuqin = "妻财" elif wuxing_kewo[gong2wuxing[self.bengua.gong]] == self.zhigua.yao[x].wuxing: self.zhigua.yao[x].liuqin = "官鬼" else: raise ValueError """ def an_liushou(self): if self.date.day[0] == "甲" or self.date.day[0] == "乙": liushou_start = 0 elif self.date.day[0] == "丙" or self.date.day[0] == "丁": liushou_start = 1 elif self.date.day[0] == "戊": liushou_start = 2 elif self.date.day[0] == "己": liushou_start = 3 elif self.date.day[0] == "庚" or self.date.day[0] == "辛": liushou_start = 4 elif self.date.day[0] == "壬" or self.date.day[0] == "癸": liushou_start = 5 else: raise ValueError for x in range(6): self.bengua.yao[x].liushou = liushou[(liushou_start + x) % 6] def __str__(self): s = "问卜人,{},于 {}年{}月{}日 问 {} {} 事,\n".format(self.gender, self.date.year, self.date.month, self.date.day, self.whom, self.what) s = s + "得 {} 之 {} 卦。\n".format(self.bengua.lname, self.zhigua.lname) for x in reversed(range(6)): yao_s = ". ".join([self.bengua.yao[x].name, self.bengua.yao[x].liushou, self.bengua.yao[x].zhi + self.bengua.yao[x].wuxing, self.bengua.yao[x].liuqin]) if x in self.bianyao: yao_s = yao_s + " 化为 " + ". ".join([self.zhigua.yao[x].zhi + self.zhigua.yao[x].wuxing, self.zhigua.yao[x].liuqin]) if x == self.bengua.shi: yao_s = yao_s + ", " + "世" elif x == self.bengua.ying: yao_s = yao_s + ", " + "应" s = s + yao_s + "\n" return(s)
def get_Hui(year): if year > 0: index = 67017 + year else: index = 67018 + year hui = index / 10800 #这是计算hui if index % 10800 != 0: hui += 1 hui_value = Hui[(hui - 1) % 12].keys()[0] tmp = index % 10800 if tmp == 0: tmp = 10800 #这是算运 yun = tmp / 360 if tmp % 360 != 0: yun += 1 #result[u'运'] = yun tmp = tmp % 360 if tmp == 0: tmp = 360 #这是算世 shi = tmp / 30 if tmp % 30 != 0: shi += 1 #result[u'世'] = shi shi_yu = tmp % 30 if shi_yu == 0: shi_yu = 30 gua = yun / 6 if yun % 6 != 0: gua += 1 gua_value = Hui[(hui - 1) % 12][hui_value][gua - 1] tmp = yun % 6 if tmp == 0: tmp = 6 tmp_gua = Gua(u'坤', u'乾') up, down = tmp_gua.get_up_down(gua_value) tmp_gua = Gua(up, down) #gua_value = tmp_gua.get_name(up,down) yungua = tmp_gua.bian_yao(tmp) tmp_gua = Gua(yungua[0], yungua[1]) #print 1+(result[u'世']-1)/2 shigua = tmp_gua.bian_yao(1 + (shi - 1) / 2) for i, value in enumerate(XianTian_60_PeiGuaShu): if value == shigua[2:]: tmp = i + 1 break nian = None if shi % 2 == 0: nian = shi_yu + tmp - 1 + 30 else: nian = shi_yu + tmp - 1 nian = nian % 60 if nian == 0: nian = 60 niangua = XianTian_60_PeiGuaShu[nian - 1] up, down = tmp_gua.get_up_down(niangua) niangua = tmp_gua.get_name(up, down) nian = shi_yu return (hui, yun, shi, nian, yungua, shigua, niangua)
def get_Hui(year): if year > 0: index = 67017+year else: index = 67018+year hui = index/10800 #这是计算hui if index % 10800 != 0: hui += 1 hui_value = Hui[(hui-1) % 12].keys()[0] tmp = index % 10800 if tmp == 0: tmp = 10800 #这是算运 yun = tmp / 360 if tmp % 360 != 0: yun += 1 #result[u'运'] = yun tmp = tmp % 360 if tmp == 0: tmp = 360 #这是算世 shi = tmp/30 if tmp % 30 != 0: shi += 1 #result[u'世'] = shi shi_yu = tmp % 30 if shi_yu == 0: shi_yu = 30 gua = yun/6 if yun % 6 != 0: gua += 1 gua_value = Hui[(hui-1) % 12][hui_value][gua-1] tmp = yun % 6 if tmp == 0: tmp = 6 tmp_gua = Gua(u'坤',u'乾') up,down = tmp_gua.get_up_down(gua_value) tmp_gua = Gua(up,down) #gua_value = tmp_gua.get_name(up,down) yungua = tmp_gua.bian_yao(tmp) tmp_gua = Gua(yungua[0],yungua[1]) #print 1+(result[u'世']-1)/2 shigua = tmp_gua.bian_yao(1+(shi-1)/2) for i,value in enumerate(XianTian_60_PeiGuaShu): if value == shigua[2:]: tmp = i + 1 break nian = None if shi % 2 == 0: nian = shi_yu + tmp -1 +30 else: nian = shi_yu + tmp -1 nian = nian % 60 if nian ==0: nian = 60 niangua = XianTian_60_PeiGuaShu[nian -1] up ,down = tmp_gua.get_up_down(niangua) niangua = tmp_gua.get_name(up,down) nian = shi_yu return (hui,yun,shi,nian,yungua,shigua,niangua)