编辑代码

# 先天八卦
ba_gua = [
    {"乾": "金"},
    {"兑": "金"},
    {"离": "火"},
    {"震": "木"},
    {"巽": "木"},
    {"坎": "水"},
    {"艮": "土"},
    {"坤": "土"},
]
gua_xiang = [
    [1, 1, 1],
    [0, 1, 1],
    [1, 0, 1],
    [0, 0, 1],
    [1, 1, 0],
    [0, 1, 0],
    [1, 0, 0],
    [0, 0, 0],
]

# 获取年月日时
time = input("起卦之年月日时:")
nian = time.split()[0]
yue = int(time.split()[1])
ri = int(time.split()[2])
shi = int(time.split()[3])

# 计算年支数
match nian:
    case "子":
        nian = 1
    case "丑":
        nian = 2
    case "寅":
        nian = 3
    case "卯":
        nian = 4
    case "辰":
        nian = 5
    case "巳":
        nian = 6
    case "午":
        nian = 7
    case "未":
        nian = 8
    case "申":
        nian = 9
    case "酉":
        nian = 10
    case "戌":
        nian = 11
    case "亥":
        nian = 12
    case _:
        print("!!输入有误!!")

# 计算时支数
match shi:
    case 23 | 0:
        shi = 1
    case 1 | 2:
        shi = 2
    case 3 | 4:
        shi = 3
    case 5 | 6:
        shi = 4
    case 7 | 8:
        shi = 5
    case 9 | 10:
        shi = 6
    case 11 | 12:
        shi = 7
    case 13 | 14:
        shi = 8
    case 15 | 16:
        shi = 9
    case 17 | 18:
        shi = 10
    case 19 | 20:
        shi = 11
    case 21 | 22:
        shi = 12
    case _:
        print("!!输入有误!!")

# 计算上卦和下卦
gua1 = (nian + yue + ri) % 8
gua2 = (nian + yue + ri + shi) % 8
if gua1 == 0:
    gua1 = 8
if gua2 == 0:
    gua2 = 8
if gua1 > gua2:
    shang_gua = gua2
    xia_gua = gua1
else:
    shang_gua = gua1
    xia_gua = gua2
dong_yao = (shang_gua + xia_gua) % 6
if dong_yao == 0:
    dong_yao = 6

# 计算用卦和体卦
if dong_yao <= 3:
    ti_gua = shang_gua
    yong_gua = xia_gua
else:
    ti_gua = xia_gua
    yong_gua = shang_gua
print(f"\n\n\n体卦:{ba_gua[ti_gua-1]}\n用卦:{ba_gua[yong_gua-1]}")

# 计算上互卦和下互卦
shang_hu = []
shang_hu.append(gua_xiang[shang_gua - 1][1])
shang_hu.append(gua_xiang[shang_gua - 1][2])
shang_hu.append(gua_xiang[xia_gua - 1][0])
shang_hu_gua = gua_xiang.index(shang_hu)
xia_hu = []
xia_hu.append(gua_xiang[shang_gua - 1][2])
xia_hu.append(gua_xiang[xia_gua - 1][0])
xia_hu.append(gua_xiang[xia_gua - 1][1])
xia_hu_gua = gua_xiang.index(xia_hu)
print(f"下互卦:{ba_gua[xia_hu_gua]},上互卦:{ba_gua[shang_hu_gua]}")

# 计算变卦
# bian = gua_xiang[yong_gua - 1]  # 引用复制,会同步改变!找了好久的bug
bian = []
bian.append(gua_xiang[yong_gua - 1][0])
bian.append(gua_xiang[yong_gua - 1][1])
bian.append(gua_xiang[yong_gua - 1][2])
if dong_yao == 3 or dong_yao == 6:
    dong_yao = 0
if dong_yao == 2 or dong_yao == 5:
    dong_yao = 1
if dong_yao == 1 or dong_yao == 4:
    dong_yao = 2
bian[dong_yao] = 1 - bian[dong_yao]
bian_gua = gua_xiang.index(bian)
print(f"变卦:{ba_gua[bian_gua]}")