执行单独的嵌套if语句是否有效?

时间:2011-02-13 00:44:17

标签: python boolean-logic

我正在解决以下问题:

  

你驾驶的速度有点太快,一名警察阻止你。编写代码来计算结果,编码为int值:0 =没有票,1 =小票,2 =大票。如果速度为60或更低,则结果为0.如果速度在61和80之间,则结果为1.如果速度为81或更高,则结果为2.除非是您的生日 - 在那一天,您的在所有情况下,速度可以高出5个。

我想出了以下代码:

def caught_speeding(speed, is_birthday):
    if is_birthday == True:
        if speed <= 65:
            return 0
        elif speed <= 85:
            return 1
        else:
            return 2
    else:
        if speed <= 60:
            return 0
        elif speed <= 80:
            return 1
        else:
            return 2

我觉得单独检查每个人的效率有点低,还是没问题?

6 个答案:

答案 0 :(得分:3)

你必须喜欢bisect模块。

def caught_speeding(speed, is_birthday):
    l=[60,80]
    if is_birthday:
        speed-=5
    return bisect.bisect_left(l,speed)

答案 1 :(得分:1)

我的代码没有问题。它清晰可读。

如果你想减少线路,那么你可以这样做:

def caught_speeding(speed, is_birthday):
    adjustment = 5 if is_birthday else 0
    if speed <= 60 + adjustment:
        return 0
    elif speed <= 80 + adjustment:
        return 1
    else:
        return 2

答案 2 :(得分:1)

你可以这样做:

def caught_speeding(speed, is_birthday):

    if is_birthday:
        speed = speed - 5

    if speed <= 60:
        return 0
    elif speed <= 80:
        return 1
    else:
        return 2

is_birthday == True意味着你还没有得到布尔; - )

答案 3 :(得分:1)

选中此一项。已优化:

def caught_speeding(speed, is_birthday):
 if speed in range(0,66 if is_birthday else 61):
   return 0
 elif speed in range(0,86 if is_birthday else 81):
   return 1
 return 2

答案 4 :(得分:0)

假设速度是一个整数,效率意味着运行速度,而不是理解的速度:

>>> def t(speed, is_birthday):
...     speed -= 5 * is_birthday
...     return speed // 61 + speed // 81
...
>>> for s in xrange(58, 87):
...     print s, t(s, False), t(s, True)
...
58 0 0
59 0 0
60 0 0
61 1 0
62 1 0
63 1 0
64 1 0
65 1 0
66 1 1
67 1 1
68 1 1
69 1 1
70 1 1
71 1 1
72 1 1
73 1 1
74 1 1
75 1 1
76 1 1
77 1 1
78 1 1
79 1 1
80 1 1
81 2 1
82 2 1
83 2 1
84 2 1
85 2 1
86 2 2
>>>

答案 5 :(得分:0)

def caught_speeding(speed, is_birthday):
    speed -= 5 * is_birthday
    return 0 if speed < 61 else 2 if speed > 80 else 1