函子蛋糕 2023-03-22 05:00 采纳率: 80.6%
浏览 31
已结题

请问这段代码错误在哪里?

下面是完整计算八字的代码。但是报错了,请检查问题在哪里。检查完毕后多测试几个数据,比如测公元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])

```

  • 写回答

3条回答 默认 最新

  • OKX安生 2023-03-22 06:38
    关注
    该回答引用于gpt与OKX安生共同编写:
    
    • 该回答引用于gpt与OKX安生共同编写:

    这段代码的缩进存在问题。

    1. 月份和日的计算部分缩进不正确,代码块划分错误。

    正确示例:

    
    
    
    #-------------
    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)
    
    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])
    
    

    如有用的话,还望采纳哦~

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月27日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 为什么安装Anaconda时报系统找不到指定文件?
  • ¥15 如何将这个项目的ssh-TCP,改成ssh3-UDP协议
  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 QChart画大量横向叠加柱状图时,颜色变为白色
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办