You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python实现2016年日期星期计算代码的错误排查求助

排查你的Python星期计算代码测试用例失败问题

首先,我帮你梳理了代码里的几个关键问题,尤其是导致部分测试用例失败的核心原因:

1. 8月之后的月份循环逻辑错误

这是最关键的问题!在12 >= a > 8的分支中,你的循环范围计算出错了,导致额外多加了一个月的天数。举个例子:
当输入a=9, b=1(2016年9月1日,实际是星期四),你的代码计算总天数时:

  • default_date是1-7月的总天数213天
  • 循环range(1, 9-6)range(1,3),会执行2次,累加了31*1 + 30*1 = 61
  • 总天数变成213+61+1=275275%7=2,对应d_o_w[2]='SAT',但实际应该是THU

问题出在:这个分支的default_date已经是1-7月的总和,你只需要累加8月到a-1月的天数,再加上b。但当前循环逻辑错误地多算了一个月的天数,把当前月份(比如9月)的整月天数也加进去了。

2. 冗余的日期越界处理(可能不影响,但不符合题目预期)

题目里的测试用例应该都是2016年的合法日期(毕竟是编程题,不会故意输入无效日期),你返回0的处理是多余的,甚至可能在某些场景下导致不符合预期的输出。

修复方案:简化代码逻辑

与其用复杂的分支拆分月份,不如直接定义2016年各月的天数列表,然后累加计算总天数,这样逻辑清晰,几乎不会出错。

修改后的代码如下:

def solution(a, b):
    # 2016年是闰年,各月天数
    month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    # 2016年1月1日是星期五,按顺序排列星期
    weekdays = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
    # 计算从年初到目标日期的总天数
    total_days = sum(month_days[:a-1]) + b
    # 总天数减1后模7,对应星期列表的索引(因为1月1日是第1天,对应索引0)
    return weekdays[(total_days - 1) % 7]

排查建议(以后遇到类似问题可以这么做)

  • 测试关键日期:找几个已知星期的日期(比如1月1日、2月29日、年末最后一天)代入代码,快速定位错误分支。
  • 打印中间变量:在代码中添加print语句,输出总天数、累加的月份天数等中间结果,就能直观看到哪里计算错了。
  • 简化逻辑:复杂的分支结构很容易出错,尽量用更简洁的方式实现(比如用列表存储月份天数),减少出错点。

内容的提问来源于stack exchange,提问作者minsing-jin

火山引擎 最新活动