我正在处理Python的问题单,并回答了以下问题
你开得有点太快了,警察拦住了你。编写一个函数返回三种可能的结果之一:“无票”、“小票”或“大票”。如果你的速度是60或更低,结果是“没有票”。如果速度在61到80之间,结果就是“小票”。如果速度是81或更高,结果是“大票”。除非它是您的生日(在函数的参数中编码为布尔值) --在您的生日那天,您的速度在任何情况下都可以高出5。
def caught_speeding(speed, is_birthday):
if is_birthday:
speeding = speed - 5
else:
speeding = speed
if speeding < 60:
print("No ticket")
if 60 < speeding <= 80:
print("Small Ticket")
if speeding > 80:
print("Big Ticket")
然而,给出的答案使用了elif和else子句。是否有更好的理由使用elif和there子句?还是只是个人喜好?
谢谢你的帮助!
发布于 2020-03-16 16:56:31
请注意,您的解决方案是错误的,因为它忽略了speed
为60的任何情况。if … elif … elif … else …
结构划分了各种可能性:每种可能性只分为一种情况(或者,如果省略了else
,最多只有一种情况)。如果需要分区(通常是这样),那么if … if … if …
的结构有两个缺点:
如果测试条件没有得到很好的设计,那么可以执行多个
60 < speeding
.…
代码(在if
情况下),我们更改变量,有时是在测试条件中使用的变量,这些变量可以使后续的if
测试结果变为真,尽管我们希望它们是假的。elif
结构避免了这种情况.发布于 2020-03-16 17:00:14
您可以编写更少的代码,也可以更容易阅读+提高代码速度:
def caught_speeding(speed, is_birthday):
if is_birthday:
speed -= 5
if speed <= 60:
print("No ticket")
elif <= 80:
print("Small Ticket")
else:
print("Big Ticket")
发布于 2020-05-13 00:11:53
这是另一个解决方案。
def caught_speeding(speed, is_birthday):
if is_birthday:
ll=60+5
ul=80+5
else:
ll=60
ul=80
if speed<=ll:
return "No Ticket"
elif ll<speed<=ul:
return "Small Ticket"
else:
return "Big Ticket"
https://stackoverflow.com/questions/60710029
复制相似问题