Python IF语句混用OR、AND时判断结果不符合预期
问题根因
出现这个逻辑错误的核心原因是Python中逻辑运算符and的优先级高于or,你写的条件判断没有手动加括号控制运算顺序,实际执行逻辑和你预想的逻辑不一致。
你代码里的原始判断条件:
if day == 0 or day == 6 and vacation != True:
按照Python的运算符优先级规则,会优先计算and连接的部分,实际等价于下面的逻辑:
if day == 0 or (day == 6 and vacation != True):
也就是说,只要day == 0成立,不管后面的vacation是什么值,整个if条件都会判定为真——or运算只要任意一个子条件为真,就会直接返回真,不会再判断后续的子条件。
你调用alarm_clock(0, True)时,day ==0直接成立,所以程序直接进入if分支返回"10.00",完全没有走到你预期的「vacation不为True才进入分支」的判断逻辑。
修正方案
你原本想实现的逻辑是「当天是周末(周日0/周六6),且不在休假状态时,闹钟设为10:00,其余情况闹钟关闭」,只需要给or连接的周末判断部分加上括号,手动提升这部分的运算优先级即可:
def alarm_clock(day, vacation): # 给周末判定加括号,保证先判断是否为周末,再判断是否在休假 if (day == 0 or day == 6) and not vacation: return "10.00" else: return "off" print(alarm_clock(0, True)) # 输出off,符合预期
小提示:写包含多个逻辑运算符的条件判断时,哪怕你清楚优先级规则,也建议加括号明确标注运算顺序,既避免写错逻辑,也能提升代码可读性。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

