Coding Bat代码错误?求解Logic-1>alarm_clock题目问题
排查CodingBat Logic-1 > alarm_clock 代码错误
我一眼就看出问题出在逻辑运算符的优先级上,Python里and的优先级比or高,这导致你写的条件判断和你预期的逻辑完全不符。
问题分析
看你代码里的这两个关键条件:
elif day == 0 or day == 6 and not vacation:
Python会把这行解析成:
elif day == 0 or (day == 6 and not vacation):
意思是「只要是周日(day=0),不管是否度假,都会返回10:00」——但实际上周末度假应该返回off,这直接触发了错误分支。
同样,第三个条件:
elif day == 6 or day == 0 and vacation:
会被解析为:
elif day == 6 or (day == 0 and vacation):
这意味着「只要是周六(day=6),不管是否度假,都会返回off」——但周末不度假应该返回10:00,这也完全不符合题目要求。
修正后的代码
你只需要把周末的判断用括号括起来,确保day ==0 or day ==6作为一个整体先判断,再结合vacation的状态:
def alarm_clock(day, vacation): if 0 < day < 6 and not vacation: return "7:00" elif (day == 0 or day == 6) and not vacation: return "10:00" elif (day == 0 or day == 6) and vacation: return "off" else: return "10:00"
或者换一种更清晰的写法,先区分工作日和周末,再判断度假状态,可读性更高:
def alarm_clock(day, vacation): # 工作日:1-5 if 1 <= day <= 5: return "10:00" if vacation else "7:00" # 周末:0或6 else: return "off" if vacation else "10:00"
验证所有测试场景
这个修正能完美覆盖题目要求的所有情况:
- 工作日+不度假 → 7:00
- 工作日+度假 →10:00
- 周末+不度假 →10:00
- 周末+度假 →off
内容的提问来源于stack exchange,提问作者SH EE
相关产品推荐
相关产品推荐

