首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闹钟打印

闹钟打印
EN

Code Review用户
提问于 2015-07-10 14:33:35
回答 4查看 4.5K关注 0票数 5

我知道写这篇文章肯定有一种更简单的方法,但我陷入了过于复杂的心态,而不只是跟随Python的禅宗。请帮我简化一下。

给定一周中编码为0=Sun、1=Mon、2=Tue、...6=Sat的一天,以及指示我们是否正在度假的布尔值,则返回表单"7:00“的字符串,指示闹钟何时应响。工作日,闹钟应该是7:00,周末应该是10:00。除非我们在度假--那么在平日应该是"10:00“,周末应该是”休息“。alarm_clock(1,False)→'7:00‘alarm_clock(5,False)→'7:00’alarm_clock(0,False)→'10:00‘

代码语言:javascript
复制
def alarm_clock(day, vacation):

    weekend = "06"
    weekdays = "12345"
    if vacation:
        if str(day) in weekend:
            return "off"
        else:
            return "10:00"
    else:
        if str(day) in weekend:
            return "10:00"
        else:
            return "7:00"
EN

回答 4

Code Review用户

回答已采纳

发布于 2015-07-10 15:39:10

我不认为它比这简单得多(Pythonic,易于阅读,性能好到永远不会成为瓶颈):

代码语言:javascript
复制
def alarm_clock(day, vacation):
    weekend = int(day) in (0, 6)
    if weekend and vacation:
        return 'off'
    elif weekend or vacation:
        return '10:00'
    return '7:00'

在创建了一个weekend布尔值之后,我想出了这个问题,然后检查alarm_clock应该具有的返回值:

代码语言:javascript
复制
return_values = {
    # (weekend, vacation): Return value,
    (True, True): 'off',
    (True, False): '10:00',
    (False, True): '10:00',
    (False, False): '7:00'
}

正如您所看到的,如果两者都是True (if weekend and vacation:),那么我们应该返回'off',如果其中一个是True (if weekend or vacation:),则应该返回10:00,而不管哪一个。否则返回7:00

票数 4
EN

Code Review用户

发布于 2015-07-10 15:04:05

  1. 你不使用平日。
  2. 您可以有两个返回语句。(见下文)。

这保持了相同的逻辑,它只是消除了对如此简单的返回语句的需求。

代码语言:javascript
复制
def alarm_clock(day, vacation):
    weekend = "06"
    if vacation:
        return "off" if str(day) in weekend else "10:00"
    else:
        return "10:00" if str(day) in weekend else "7:00"

我会进一步改进它,增加一个检查,您输入一个数字0-6。

代码语言:javascript
复制
if not (0 <= day <= 6):
    return "-:--"
票数 7
EN

Code Review用户

发布于 2015-07-10 14:55:52

那麽:

  1. 使用10:00作为缺省值:
  2. 只有周末的支票
  3. 您可能会用(str(day) in weekend)替换(0 == day %6),但是很难理解

代码:

代码语言:javascript
复制
def alarm_clock(day, vacation):
    weekend = "06"
    if vacation and (str(day) in weekend):
        return "off"
    else:
        if not (str(day) in weekend):
            return "7:00"
    return "10:00"

更隐秘的版本:

代码语言:javascript
复制
def alarm_clock(day, vacation):
    if vacation and 0 == day % 6:
        return "off"
    else:
        if 0 != day % 6:
            return "7:00"
    return "10:00"
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/96478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档