Избегать множественных (не вложенных) операторов if в моем коде - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу функцию для сканирования конкретной карты (2D-массив).Чтобы избежать сканирования пятен за пределами массива, я написал несколько операторов if, но это выглядит как неправильный, длинный, неэффективный способ сделать это.

H - значение высоты карты, int W - дляwidth, 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 голосов
/ 12 февраля 2019

Вы можете отформатировать 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
0 голосов
/ 12 февраля 2019

Вместо использования условных выражений вы можете просто использовать функции 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...