Как я могу уменьшить свои операторы if и сократить свой код? - PullRequest
0 голосов
/ 29 октября 2019

Мой код работает, однако появляется ошибка, говорящая о том, что операторов слишком много.

Я не знаю, как уменьшить операторы, потому что каждый из них служит своей цели в функции.

def is_sink(elevation_map: List[List[int]], cell: List[int]) -> bool:
    """Return True if and only if cell exists in the elevation map
    elevation_map and cell is a sink.

    Precondition: elevation_map is a valid elevation map.
                  cell is a 2-element list.

    >>> is_sink(THREE_BY_THREE, [0, 5])
    False
    >>> is_sink(THREE_BY_THREE, [0, 2])
    True
    >>> is_sink(THREE_BY_THREE, [1, 1])
    False
    >>> is_sink(FOUR_BY_FOUR, [2, 3])
    True
    >>> is_sink(FOUR_BY_FOUR, [3, 2])
    True
    >>> is_sink(FOUR_BY_FOUR, [1, 3])
    False
    """    
    x = cell[0]
    y = cell[1]
    x_initial = 0
    x_final = 0
    y_initial = 0
    y_final = 0

    if x > len(elevation_map): 
        return False
    elif y > len(elevation_map[0]): 
        return False 
    if x - 1 < 0:
        x_initial = x
    else:
        x_initial = x - 1
    if x + 1 >= x:
        x_final = x
    else:
        x_final = x + 1
    if y - 1 < 0:
        y_initial = y
    else:
        y_initial = y - 1
    if y + 1 >= y:
        y_final = y
    else:
        y_final = y + 1
    validsink = True
    for i in range(x_initial, x_final + 1):
        for j in range(y_initial, y_final + 1):
            if elevation_map[i][j] < elevation_map[x][y]:
                validsink = False
    return validsink 

R0915 (слишком много операторов) Количество вхождений: 1. [Строка 142] Слишком много операторов (24/20)

1 Ответ

0 голосов
/ 29 октября 2019

Это похоже на предупреждение py-lint, предполагающее, что ваш код пытается сделать слишком много за одну процедуру. Не совсем ошибка, но это указывает на не идеальную практику кодирования.

Вы можете уменьшить несколько вещей.

if x - 1 < 0:
    x_initial = x
else:
    x_initial = x - 1

может стать

x_initial = x if x - 1 < 0 else x - 1

и т. Д. Для x_final, y_initial и y_final.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...