在我的代码中避免使用多个(非嵌套)if语句

时间:2019-02-12 17:06:27

标签: python if-statement

我正在编写一个用于扫描特定地图(2D数组)的函数。为了避免扫描阵列之外的斑点,我编写了一些if语句,但是这样做的方式感觉很错误,漫长且效率低。

H是地图的高度值,int W是宽度,int c是当前点,一个包含x和y值的元组。

    floorH = c[0]-D
    floorW = c[1]-D
    ceilingH = c[0]+D+1
    ceilingW = c[1]+D+1
    if floorH < 0:
        floorH = 0
    if floorW < 0:
        floorW = 0
    if ceilingH > H:
        ceilingH = H
    if ceilingW > W:
        ceilingW = W

我该如何写得更好?

预先感谢:)

2 个答案:

答案 0 :(得分:8)

您可以只使用max和min函数来代替使用条件。

floorH = c[0]-D
floorW = c[1]-D
ceilingH = c[0]+D+1
ceilingW = c[1]+D+1
floorH  = max(floorH, 0)
floorW  = max(floorW, 0)
ceilingH = min(ceilingH , H)
ceilingW = min(ceilingW , W)

实际上,您可以使其更短:

floorH  = max(c[0]-D, 0)
floorW  = max(c[1]-D, 0)
ceilingH = min(c[0]+D+1, H)
ceilingW = min(c[1]+D+1, W)

答案 1 :(得分:1)

您可以像这样格式化if来节省空间:

floorH = c[0]-D if c[0]-D > 0 else 0
floorW = c[1]-D if c[1]-D > 0 else 0
ceilingH = c[0]+D+1 if c[0]+D+1 < H else H
ceilingW = c[1]+D+1 if c[1]+D+1 < W else W