You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python的alarm_clock函数传入(6,True)为何不返回'off'而是'10:00'

问题原因

你的代码出错的核心是Python逻辑运算符优先级规则:and 的优先级高于 or,你没有给并列的or条件加括号,导致判断逻辑和你预期的完全不符。

具体拆解错误逻辑

我们拿你的报错用例 alarm_clock(day=6, vacation=True) 走一遍代码执行流程:

  1. 第一个if判断 not vacation and 1<=day<=5:
    vacation=True,所以not vacation为False,整体条件为False,跳过。
  2. 第二个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:09:00