Python 为什么';你没读过我的布尔假期吗?

Python 为什么';你没读过我的布尔假期吗?,python,python-3.x,function,if-statement,boolean,Python,Python 3.x,Function,If Statement,Boolean,我在Codebat上尝试这个练习: 给定一周中的一天,编码为0=太阳,1=周一,2=周二,…6=周六,以及一个表示我们是否在度假的布尔值,返回一个形式为“7:00”的字符串,指示闹钟何时响起。在工作日,警报应为“7:00”,在周末,警报应为“10:00”。除非我们在度假,否则平日应该是“10:00”,周末应该是“休息” 如果我运行print(闹钟(1,True))它将返回“7:00”,而不是“10:00”。有人能帮我吗?您的第一个if语句检查if day在范围(1,6)内。如果day为1,则始终

我在Codebat上尝试这个练习:
给定一周中的一天,编码为0=太阳,1=周一,2=周二,…6=周六,以及一个表示我们是否在度假的布尔值,返回一个形式为“7:00”的字符串,指示闹钟何时响起。在工作日,警报应为“7:00”,在周末,警报应为“10:00”。除非我们在度假,否则平日应该是“10:00”,周末应该是“休息”


如果我运行
print(闹钟(1,True))
它将返回
“7:00”
,而不是
“10:00”
。有人能帮我吗?

您的第一个
if
语句检查
if day在范围(1,6)
内。如果
day
1
,则始终为真。由于第一个条件匹配,因此没有执行任何
elif
条件。(此外,由于
立即返回
,因此在该点之后也不会执行函数中的其他代码。)

您可能希望重新排列
if
语句,以便首先检查特殊情况,然后检查一般情况。或者,预先计算
周末
和/或
工作日
布尔值,然后明确表示所有条件:

def alarm_clock(day, vacation):
    weekday = 1 <= day <= 5
    weekend = not weekday

    if weekend and vacation:
        return "off"
    if weekend and not vacation:
        return "10:00"
    if weekday and vacation:
        return "10:00"
    if weekday and not vacation:
        return "7:00"
def闹钟(白天、假期):

weekday=1以下是您应该如何重写代码以正确评估代码:

def alarm_clock(day, vacation):
   weekday_alarm_clock = "7:00 AM"
   weekend_alarm_clock = "10:00 AM"

   if vacation:
      weekday_alarm_clock = "10:00 AM"
      weekend_alarm_clock = "off"
   if day > 0 and day < 6:
      return weekday_alarm_clock 
   else:
      return weekend_alarm_clock 
def闹钟(白天、假期):
工作日的闹钟=“上午7:00”
周末闹钟=“上午10:00”
如有假期:
工作日的闹钟=“上午10:00”
周末闹钟=“关闭”
如果天>0且天<6:
返回工作日闹钟
其他:
返回周末\u闹钟\u
正如你在这里看到的,如果我们在度假,那么我们将工作日的闹钟设置为10:00。关掉周末的闹钟。现在不是星期天或星期六,假期也不是真的,然后我们回到正常的时钟。否则是周末而不是假期,我们会恢复正常的周末闹钟


现在,我在使用
打印(闹钟(1,True))
时收到的输出是
10:00 AM
,正如预期的那样

我的方法有点复杂:

def alarm_clock(day, vacation):
  weekend = [6,7]
  if day not in weekend and vacation is True:
    return '10:00 AM'
  elif day in weekend and vacation is True:
    return 'off'
  elif day in weekend and vacation is False:
    return '10:00 AM'  
  elif day not in weekend and vacation is False:
    return '7:00 AM'
  else:
    return 'off'

print(alarm_clock(day, vacation))

day==0和day==6
将始终为
False
。你打算在这里做什么?它返回
“7:00”
,因为这是你检查的第一个条件,而且是真的。如果你想让假期优先,你必须先检查它。这个函数背后的逻辑是它计算不正确的原因。如果您从逻辑上解释了您希望执行的操作,我们可以重写它。即使
If
子句的主体不是
return
,假设
if
为真,则不会检查
elif
条件。老实说,我不知道是否有可能给出这个问题的真实答案,除非OP告诉我们他在检查什么。函数中的逻辑似乎不正确。@EdekiOkoh:我认为
休假
选项的目的很明显是要覆盖否则会发生的计算。我指的是函数本身的目的。在他进行编辑之前,我对他试图返回的内容感到困惑。例如假期_weekend=day==0和day==6,假期始终为false。但他也在寻找elif day==0或day==6:
def alarm_clock(day, vacation):
   weekday_alarm_clock = "7:00 AM"
   weekend_alarm_clock = "10:00 AM"

   if vacation:
      weekday_alarm_clock = "10:00 AM"
      weekend_alarm_clock = "off"
   if day > 0 and day < 6:
      return weekday_alarm_clock 
   else:
      return weekend_alarm_clock 
def alarm_clock(day, vacation):
  weekend = [6,7]
  if day not in weekend and vacation is True:
    return '10:00 AM'
  elif day in weekend and vacation is True:
    return 'off'
  elif day in weekend and vacation is False:
    return '10:00 AM'  
  elif day not in weekend and vacation is False:
    return '7:00 AM'
  else:
    return 'off'

print(alarm_clock(day, vacation))