有没有更好的方法来编写这个"if"布尔评估?

Dav*_*612 12 python if-statement

我写了一小段python代码.它有效,但我认为应该有一个更简化的方法来实现相同的结果.我只是没有看到它.有任何想法吗?

if tx_avt >= 100: tx = 1 
elif tx_avt < 100 and tx_avt >= 50: tx = 2 
elif tx_avt < 50 and tx_avt >= 25: tx = 3
elif tx_avt < 25 and tx_avt >= 12.5: tx = 4 
else: tx = 5
Run Code Online (Sandbox Code Playgroud)

sam*_*hen 29

您可以将其更改为:

if tx_avt >= 100: tx = 1 
elif tx_avt >= 50: tx = 2 
elif tx_avt >= 25: tx = 3
elif tx_avt >= 12.5: tx = 4 
else: tx = 5
Run Code Online (Sandbox Code Playgroud)

说明:

  • 如果if tx_avt >= 100不是真的,那么你可以推断出tx_avt < 100 必须是真的.
  • 这消除了tx_avt < 100在检查" elif tx_avt < 100 and tx_avt >= 50:"中执行" "部分的需要.

相同的逻辑级联下来并适用于其他elif案例.


相关阅读:为什么Python没有Switch语句及其替代方案.

  • 到目前为止最完整的答案! (2认同)

Jor*_*ley 10

你不需要elifs的上限,因为这些都是通过上面的条款来解决的......

elif tx_avt >= 50 : #do something
elif tx_avt >= 25 : #somthing else
Run Code Online (Sandbox Code Playgroud)

你可以在python的旁注上做

if 3 < ab < 10 : #check if ab is between 3 and 10
Run Code Online (Sandbox Code Playgroud)

  • 这里的第一段有一点http://docs.python.org/2/reference/expressions.html#not-in (2认同)

Ste*_*ski 8

如果你的if-elif-else链很长,你可以使用这个方法:

for amt, tx in [(100, 1), (50, 2), (25, 3), (12.5, 4)]:
    if tx_avt >= amt:
        break
else:
    tx = 5
Run Code Online (Sandbox Code Playgroud)

注意:循环的else子句forbreak未遇到时执行.在这种情况下,它用于提供默认情况.