Python为什么不阅读我的布尔假期?

时间:2019-02-06 16:45:02

标签: python python-3.x function if-statement boolean

我正在Codebat上尝试这项运动:
给定一周中的一天,将其编码为0 = Sun,1 = Mon,2 = Tue,... 6 = Sat和一个布尔值(表示我们是否在休假),返回形式为“ 7:00”的字符串,表示何时闹钟应该响了。在工作日中,警报应为“ 7:00”,在周末应为“ 10:00”。除非我们休假-否则在工作日应为“ 10:00”,在周末应为“休息”。

def alarm_clock(day, vacation):
  vacation_weekday = vacation and day in range(1,6)
  vacation_weekend = day == 0 and day == 6 and vacation

  if day in range(1,6):
     return  "7:00"
  elif day == 0 or day == 6:
     return  "10:00"
  elif vacation_weekday:
     return "10:00"
  elif vacation_weekend:
     return "off"    

如果我运行print(alarm_clock(1,True)),它将返回"7:00"而不是"10:00"。有人可以帮我吗?

3 个答案:

答案 0 :(得分:4)

您的第一个if语句检查if day in range(1, 6)。如果day1,则将始终为true。由于第一个条件匹配,因此elif个条件都不会执行。 (此外,由于您立即return,因此此后也不会执行该函数中的其他代码。)

您可能想重新排列if语句,以便先检查特殊情况,然后再检查一般情况。或者,预先计算一个weekend和/或weekday布尔值,然后明确表示所有条件:

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 alarm_clock(day, vacation):
    weekday = 1 <= day <= 5

    if vacation:
        return "10:00" if weekday else "off"

    return "7:00" if weekday else "10:00"

答案 1 :(得分:1)

这是您应该如何重写代码以对其进行正确评估的方法:

>>> mydf
          a         b         c
0  0.263551  0.175394  0.570277
1  0.032766  0.243175  0.524796
2  0.034853  0.607542  0.568370
3  0.021440  0.685070  0.121700
4  0.253535  0.402529  0.264492
5  0.381109  0.964744  0.362228
6  0.860779  0.670297  0.035365
7  0.872243  0.960212  0.306681
8  0.698318  0.530086  0.469734
9  0.832100  0.697919  0.238539

正如您在这里看到的,如果我们正在休假,那么我们将工作日闹钟设置为10:00。并关闭周末时钟。不是星期天或星期六,并且假期不正确,那么我们将返回正常时钟。在其他周末而不是假期,我们返回正常的周末闹钟

现在,使用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 时收到的输出是预期的print(alarm_clock(1,True))

答案 2 :(得分:0)

我的方法会有点复杂:

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))