单个嵌套if语句的执行效率如何?

0 投票
6 回答
3008 浏览
提问于 2025-04-16 11:43

我正在处理以下问题:

你开车有点快,被警察拦下了。写一段代码来计算结果,结果用整数表示:0代表没有罚单,1代表小罚单,2代表大罚单。如果你的车速在60公里或以下,结果是0。如果车速在61到80公里之间(包括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 个回答

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

你一定会喜欢bisect这个模块。

def caught_speeding(speed, is_birthday):
    l=[60,80]
    if is_birthday:
        speed-=5
    return bisect.bisect_left(l,speed)
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

撰写回答