Python的alarm_clock函数传入(6,True)为何不返回'off'而是'10:00'
问题原因
你的代码出错的核心是Python逻辑运算符优先级规则:and 的优先级高于 or,你没有给并列的or条件加括号,导致判断逻辑和你预期的完全不符。
具体拆解错误逻辑
我们拿你的报错用例 alarm_clock(day=6, vacation=True) 走一遍代码执行流程:
- 第一个if判断
not vacation and 1<=day<=5:vacation=True,所以not vacation为False,整体条件为False,跳过。 - 第二个if判断
not vacation and day==0 or day==6:
按照优先级会被Python解析为(not vacation and day==0) or day==6,代入值后就是(False and False) or True,最终结果为True,所以直接返回"10:00",函数直接终止,后面的两个if判断根本不会执行。
为什么day=6、vacation=False时正常?
这是巧合:代入vacation=False后,第二个if的解析结果是 (True and False) or True,结果也是True,刚好符合你预期的非假期周末返回10:00的规则,才没暴露问题。
修正方案
你只需要给or连接的日期判断加括号,明确运算顺序即可:
def alarm_clock(day, vacation): if not vacation and 1<=day<=5: return "7:00" if not vacation and (day==0 or day==6): return "10:00" if vacation and 1<=day<=5: return "10:00" if vacation and (day==0 or day==6): return "off"
内容的提问来源于stack exchange,提问作者user16712533
相关产品推荐
相关产品推荐

