下面是完整计算八字的代码。但是报错了,请检查问题在哪里。检查完毕后多测试几个数据,比如测公元500年出生的人的八字,至少保证能出结果。
```python
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)
#-------------
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)
#-------------
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])
```