python 判断大于等于且小于等于_关于if语句:检查python中值是否大于、小于或等于零的更好方法...

我有一个函数,它检查一个值是否大于、小于或等于零,并根据结果返回三种颜色中的一种。另外,如果某个属性存在,它不会返回三种颜色中的一种,而是返回单独的第四种颜色。我是这样解决的:

def set_colour(x, trigger=False):

if x > 0.0:

colour = 'green'

elif x < 0.0:

colour = 'red'

else:

colour = 'black'

if trigger:

colour = 'blue'

return colour

但我不喜欢。有没有更好的方法,更优雅,更有效和更Python?我发现这篇文章很有趣,但不能使用字典,因为我不是在检查静态值,而是在比较它的值。

是否有可能为所有大于零的数字定义一个变量,以便使用字典解决方案进行测试?也许和lambda一起?我试了些东西,但什么也没拿到。

目前,这个解决方案可能还可以工作,但在将来,可能会为小于-1.0、-2.0或大于1.0或2.0等的值添加其他颜色,此时,代码将变得越来越长,因为我觉得可以更优雅地解决某些问题。

我想我查了所有相关的帖子,希望这不是一个副本。

为什么你认为你的解决方案不优雅,不高效,或者不是Python?我觉得不错。

我觉得很完美,很清楚,很有意义。我不会碰这个密码的。

你可以把if trigger放在最上面,去掉color变量,立即返回所需的颜色。

也许只是return 'blue'更快,因为它似乎比x优先,但否则,它很好…

现在没事了。如果以后添加了其他颜色,请更改代码。

感谢大家的意见!我非常感激!^ ^ ^

这是我唯一的改变:

def set_colour(x, trigger=False):

if trigger:

return 'blue'

elif x > 0.0:

return 'green'

elif x < 0.0:

return 'red'

else:

return 'black'

正是我的观点:)

谢谢您!^^在这种情况下,我将只实现这些微小的更改。只是我经常写一些代码,结果证明这不是用Python来做的最好方法。所以我在挖掘,希望找到一个新的技巧。

您可以使用sign()函数和索引查找:

import math

def sign(v):

return int(math.copysign(1,v))

def set_color(x, trigger=False):

if trigger: return"blue"

return ('red', 'black', 'green')[sign(x)+1]

也就是说,我不确定这有多"好"。"聪明"!一般情况下为"更好"。

编辑备选方案,使您可以轻松地将其扩展到多种颜色范围:

colorRanges = (

# start, color

(-2, 'red'),

(0, 'yellow'),

(1, 'orange'),

)

def set_color(x, trigger=False):

if trigger: return"blue"

if x == 0.0: return 'black'

for start, color in colorRanges:

if x < start: return color

return 'green'

这允许您轻松定义颜色范围,但我没有更好地处理角情况的好主意。

而且很难扩展到其他可能的范围。

@怪胎:啊,我错过了。这给了我一个主意…

互动!将来可能会有用。谢谢!^ ^ ^

你不能逃避你需要一些条件的事实。但是,您可以在一个列表中列出您的条件,并在另一个列表中列出相应的颜色,然后调用这些条件。这样,您可以将条件从代码中分离出来。这是因为函数是Python中的第一类值。

你可以这样做:

conditions =  [

lambda m: m <  -3,

lambda m: m >= -3 and m < -2,

lambda m: m >= -3 and m < -2,

lambda m: m >= -2 and m <  0,

lambda m: m ==  0,

lambda m: m >=  0 and m <  1,

lambda m: m >= 1 ]

colors = [

'color1',

'color2',

'color3',

'color4',

'color5',

'color6',

'color7' ]

def colVal(m): return colors[ [c(m) for c in conditions].index(True) ]

这里,colVal(-4)是'color1'等…

通过这种方式,您可以根据自己的意愿继续追加您的conditions列表,并且仍然保持其余代码的完整性。这是一个关于你能做什么的想法。但是,如何格式化代码取决于您自己。例如,您可以

def set_colour(x, trigger=False):

if trigger: return 'someColor'

else: return colVal(x)

但不确定这是否是你想要的。

:d这实际上正是我想的,但没能开始工作!虽然我必须使用@yuval adam的版本,因为它看起来更高效,但我真的很喜欢这个版本,我一定会使用它!非常感谢你!^ ^ ^

不客气。开箱思考很有趣,你的问题似乎是一个完美的问题,我通常不会使用一些Python的功能。所以谢谢你的问题:)。

这是很容易阅读和扩展的:)

def set_colour(x, trigger=False):

color = 'black'

color = 'green' if x > 0.0 else color

color = 'red' if x < 0.0 else color

color = 'blue' if trigger else color

return color

谢谢您!这是更好的阅读,尤其是如果不同颜色的列表变得更长。不过,我更喜欢@yuval-adam的版本,因为它可能会更快一点,因为即时回报。虽然我在某个地方读到过,你不应该使用多次退货。但现在这是另一天的故事。^ ^ ^

可以使用嵌套的条件表达式,如下所示

def set_colour(x, trigger=False):

if trigger: return"blue"

return"green" if x > 0.0 else"red" if x < 0.0 else"black"

assert set_colour(None, True)   =="blue"

assert set_colour(0.0, True)    =="blue"

assert set_colour(0.0, False)   =="black"

assert set_colour(0.01, False)  =="green"

assert set_colour(-0.01, False) =="red"

这比原始版本的可读性差得多。

@尤瓦拉丹,我同意。

到目前为止,我只使用Assert进行单元测试。必须研究它明显的其他可能性。谢谢!^ ^ ^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值