单个嵌套if语句的执行效率如何?
我正在处理以下问题:
你开车有点快,被警察拦下了。写一段代码来计算结果,结果用整数表示: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