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=275,275%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




