Логика вашего кода запутана. Каждая функция возвращает логическое значение, и эти первые два запускают только одно сравнение, прежде чем они возвращают значение и прекращают работу. Они на самом деле не смотрят на всю матрицу, и то, что вы возвращаете, не будет иметь смысла, даже если они это сделают. Хорошее эмпирическое правило - думать об операторе присваивания (=) как о формулировке (Вы являетесь руководителем группы.), А об операторе равенства (==) задаете вопрос (Вы являетесь руководителем группы?). Вы используете это, чтобы проверить, равны ли значения, а не утверждать, что они есть.
Если вы скажете return x==y
, все, что вы получите, это логическое значение, которое сообщает вам, хранят ли эти переменные одно и то же значение, и в случае вашего цикла они всегда будут. Это потому, что mat [0] [0] (первый элемент mat [i] [j]), всегда будет равен mat [0] [0] (первый элемент mat [j] [i]). То, что вы хотите, чтобы эти две первые функции делали, это генерирует транспонированные и негативно транспонированные матрицы. Затем ваша тестовая функция может проверить эти матрицы на соответствие оригиналу и посмотреть, являются ли они симметричными или наклонными. Это работает:
def isSymmetric(mat, N):
newmat = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(N):
for j in range(N):
newmat[i][j] = mat[j][i]
return newmat
def isSkew(mat, N):
newmat = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(N):
for j in range(N):
newmat[i][j] = -mat[j][i]
return newmat
def test(mat, N):
if isSymmetric(mat, N) == mat:
return 1
if isSkew(mat, N) == mat:
return -1
else:
return 0;
N = 3
mat = [[0, 1, -2], [-1, 0, 3], [2, -3, 0]]
print(test(mat, N))
>>> -1
N = 3
mat = [[1, 1, -1], [1, 2, 0], [-1, 0, 5]]
print(test(mat, N))
>>> 1
N = 3
mat = [[1, 1, -1], [11, 2, 0], [4, 9, 5]]
print(test(mat, N))
>>> 0