我正在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"
。有人可以帮我吗?
答案 0 :(得分:4)
您的第一个if
语句检查if day in range(1, 6)
。如果day
为1
,则将始终为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))