2021-09-10 13:53发布
如题,在工作中写很多if总是感觉十分不美丽,例如下表:
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的符号,可以借助int(True)=1、int(False)=0.
那么,r<0>
2*int(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)
所以整体代码如下:
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...语句效率是否更高。
但不知道相比于if...elif...else...语句效率是否更高。
最多设置5个标签!
如题,在工作中写很多if总是感觉十分不美丽,例如下表:
当r的值大于0时,返回2;当r的值等于0时,返回1;当r的值小于0时返回0。对应到一个列表中 lis=["输了","平局","赢了"]。
问题的本源应该是去判断一个数的正负性,当r大于0时,返回1;当r等于0时,返回0;当r小于0时返回-1.这样就可以了。
首先看下如何获取r的符号,可以借助int(True)=1、int(False)=0.
那么,r<0>
2*int(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)
所以整体代码如下:
一周热门 更多>