從生日來推算八字(從零開始學(xué)python) | 您所在的位置:網(wǎng)站首頁 › 稱骨算命公式怎么算 › 從生日來推算八字(從零開始學(xué)python) |
題目要求:用戶輸入生日,來得到其生辰八字? 首先生辰八字分為四個部分,分別對應(yīng)生日的四個部分,即年,月,日,時。并且由天干地支來組成。 十天干:甲,乙,丙,丁,戊,己,庚,辛,壬,癸 十二地支:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥 由于每部分的干支最初的定位不同,所以我把每一部分都設(shè)置了自己的干支list 首先做準(zhǔn)備工作,將用戶輸入的生日轉(zhuǎn)化為農(nóng)歷 from zhdate import ZhDate from datetime import datetime birthday=input('請輸入出生日期(Y/M/D/H):') #例:2022102321 dt_date = datetime(int(birthday[0:4]),int(birthday[4:6]),int(birthday[6:8]),int(birthday[8:])) date = str(ZhDate.from_datetime(dt_date)) print(date)用此方法即可得到生日的農(nóng)歷日期? 一、年干支算法 tiangan_1=['庚','辛','壬','癸','甲','乙','丙','丁','戊','己'] dizhi_1=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] #輸出年的天干和地支 a,b=0,0 year = int(date[2:6]) year-=1900 year%=60 for _ in range(year): a+=1 b+=1 A = a % 10 B = b % 12 print(tiangan_1[A],dizhi_1[B])?二、月干支算法 tiangan_2=['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'] dizhi_2=["寅","卯","辰","巳","午","未","申","酉","戌","亥","子","丑"] if date[7] == 1 : if date[8] in [1,2,0]: month = int(date[7]+date[8]) else: month = int(date[7]) #月干序 mon_gx = (int(date[5])-3)*2 + month while mon_gx >10 : mon_gx-=10 #月支序 mon_zx = month print(mon_gx,mon_zx)三、日干支算法 (因?yàn)槿崭芍П旧淼奶攸c(diǎn),計算起來比較麻煩,該代碼僅供大家參考) tiangan_3 = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'] dizhi_3 = ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] Day = int(birthday[6]+birthday[7]) Y_2=int(date[4:6]) F_day = ((Y_2+7)*5 + int((Y_2+19)/4) + 15) % 60 if (year % 4) == 0: if (year % 100) == 0: if (year % 400) == 0: Feb = 29 else: Feb = 28 else: Feb = 29 else: Feb = 28 mon = int(birthday[4:6]) if mon == 1: N_day = (F_day + Day)%60 elif mon == 2: N_day = (F_day + 31 + Day)%60 elif mon == 3: N_day = (F_day + 31 + Feb + Day)%60 elif mon == 4: N_day = (F_day + 31 + Feb + 31 + Day)%60 elif mon == 5: N_day = (F_day + 31 + Feb + 31 + 30 + Day)%60 elif mon == 6: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + Day)%60 elif mon == 7: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + Day)%60 elif mon == 8: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + 31 + Day)%60 elif mon == 9: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + 31 + 31 + Day)%60 elif mon == 10: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + Day)%60 elif mon == 11: N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + Day)%60 else : N_day = (F_day + 31 + Feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + Day)%60 print(tiangan_3[N_day%10-1],dizhi_3[N_day%12-1])四、時干支算法 tiangan_4 = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'] dizhi_4 = ["丑","寅","卯","辰","巳","午","未","申","酉","戌","亥","子"] H = int(birthday[8:10]) if H == 1 or H == 2: H_dz = 1 elif H == 3 or H == 4: H_dz = 2 elif H == 5 or H == 6: H_dz = 3 elif H == 7 or H == 8: H_dz = 4 elif H == 9 or H == 10: H_dz = 5 elif H == 11 or H == 12: H_dz = 6 elif H == 13 or H == 14: H_dz = 7 elif H == 15 or H == 16: H_dz = 8 elif H == 17 or H == 18: H_dz = 9 elif H == 19 or H == 20: H_dz = 10 elif H == 21 or H == 22: H_dz = 11 else : H_dz = 12 #時天干 H_tg = ((N_day%10) * 2 + int(H/2) - 1)%10 print(tiangan_4[H_tg-1],dizhi_4[H_dz-1])綜上即可得到對應(yīng)的生辰八字! |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有 |