Функция ввода вне матрицы - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу функцию с параметрами d и e. d представляет матрицу, которую вводит пользователь, а e представляет начальную позицию в матрице. Я смог определить e как положение матрицы d:

mainIndex = e[0]
secondIndex = e[1]
position = d[row][column]

У меня есть проблема, при которой, если пользователь вводит позицию вне введенной пользователем матрицы, он возвращает False; например, если матрица d = [[3,2,1],[6,5,4],[9,8,7]] и e = [3,0], она должна вернуть False, а не выдавать ошибку index out of range. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

try / except

Вы можете написать функцию и поймать IndexError.Я бы также посоветовал вам не цеплять индексаторы, а использовать синтаксис arr[row, column].Например:

d = np.array([[3,2,1],[6,5,4],[9,8,7]])

def get_val(A, idx):
    try:
        return A[tuple(idx)]
    except IndexError:
        return False

e = [3, 0]
f = [0, 2]

get_val(d, e)  # False
get_val(d, f)  # 1

if / else

Альтернативное, более явное решение возможно с помощью конструкции if / else:

def get_val(A, idx):
    if all(i < j for i, j in zip(idx, A.shape)):
        return A[tuple(idx)]
    return False

Поскольку мы используем tuple(idx), оба решения работают для произвольных измерений.

0 голосов
/ 14 ноября 2018

вы должны быть в состоянии отловить ошибку следующим образом:

mainIndex = e[0]
secondIndex = e[1]
try:
    position = d[row][column]
except IndexError:
    return False

Источник: Я хочу обработать исключение 'индекс списка вне диапазона.'

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