python判断正负数和零有几种方法?都是什么

2021-09-10 13:53发布

12条回答
aijingda
2021-09-15 14:37

如题,在工作中写很多if总是感觉十分不美丽,例如下表:

输入r结果输出
r>02赢了
r==01平局
r<0>0输了
def result(r):
    lis=["输了","平局","赢了"]    
    if r >0:return lis[2]
    elif r ==0:return lis[1]
    else:return lis[0]

当r的值大于0时,返回2;当r的值等于0时,返回1;当r的值小于0时返回0。对应到一个列表中 lis=["输了","平局","赢了"]。

问题的本源应该是去判断一个数的正负性,当r大于0时,返回1;当r等于0时,返回0;当r小于0时返回-1.这样就可以了。

r的值返回结果
r>01
r==00
r<0>-1

首先看下如何获取r的符号,可以借助int(True)=1、int(False)=0.

int(r>0)
r>01
r<=00

那么,r<0>

2*int(r>0)-1

2*int(r>0)-1
r>01
r<=0-1


但是有个问题,当r==0的时候,r=-1,r应该等于0才靠谱。不如让2*int(r>0)-1乘以0或1,当r>0时乘以1,当r等于0时乘以0,当r小于0时乘以1即可。故:

(2*int(r>0)-1)*(r!=0)

2*int(r>0)-1)*(r!=0)
r>01
r==00
r<0>-1

所以整体代码如下:

def result(r):
    lis=["田忌输了","平局","田忌赢了"]
    x=(2*(r>0)-1)*(r!=0)+1
    #x=(r <0 and -1 or 1)*(r!=0 )+1  #这种写法也对>

但不知道相比于if...elif...else...语句效率是否更高。


一周热门 更多>