Симметричная ли матрица?

Подскажите что не правильно. Работает не при всех входных данных

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split())))

for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            break
            print("no")

print("yes")


Ответы (2 шт):

Автор решения: RomanR
  1. print("yes") будет выводиться всегда, не зависимо от того когда цикл закончится.
  2. break стоит перед print("no"), значит цикл завершится, а вывода "no" не произойдет.

Чтобы программа заработала в таком виде, я бы добавил exit(), вместо break тогда, в случае если матрица не симметричная, программа выведет "no" и завершится, не дойдя до print("yes")

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split())))

for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")
            exit()

print("yes")
→ Ссылка
Автор решения: hedgehogues

Давайте разбираться постепенно.

Шаг 1

Вы не выводите "no":

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split())))

for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")  #  break
            break  #  print("no")

print("yes")

Шаг 2

В ряде случаев, Вы будете дважды выводить "no". Поэтому следует использовать дополнительный флаг:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 

stop = False
for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break

print("yes")

Шаг 3

В заключение, не следует выводить после "no", "yes":

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 

stop = False
for i in range (len(a)):
    for j in range (len(a[i])):
        if a[i][j]!=a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break

if not stop:
    print("yes")

Замечания по коду

Используйте одну переменную в коде для обозначения размерности. Так улучшается читаемость:

n = int(input())
a = []
for i in range(n):
    a.append(list(map(int, input().split()))) 

stop = False
for i in range(n):
    for j in range(n):
        if a[i][j] != a[j][i]:
            print("no")
            stop = True
            break
    if stop:
        break

if not stop:
    print("yes")

Пользуйтесь функциями. Тогда отпадёт надобность в сложных конструкциях с флагами:

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a

def is_symmetry(a):
    n = len(a)
    for i in range(n):
        for j in range(n):
            if a[i][j] != a[j][i]:
                return False
    return True

a = read_matrix()
s = is_symmetry()
if s:
   print("yes")
else:
   print("no")

Ещё раз пользуйтесь функциями:

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a   

def is_row_correct(a, i, j):
    n = len(a)
    for j in range(n):
        if a[i][j] == a[j][i]:
            continue
        return False
    return True
         
def is_symmetry(a):
    n = len(a)
    for i in range(n):
        correct = is_row_correct(a, i, j)
        if not correct:
           return False
    return True

a = read_matrix()
s = is_symmetry()
if s:
   print("yes")
else:
   print("no")

Чего добились? Можем делать библиотеку. Например:

import core


a = core.read_matrix()
s = core.is_symmetry()
if s:
   print("yes")
else:
   print("no")

В библиотеке код написан практически словами естественного языка. Возможно, имеет смысл чутка над названиями подумать:

def read_matrix():
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split()))) 
    return a   

def is_row_correct(a, i, j):
    n = len(a)
    for j in range(n):
        if a[i][j] == a[j][i]:
            continue
        return False
    return True
         
def is_symmetry(a):
    n = len(a)
    for i in range(n):
        correct = is_row_correct(a, i, j)
        if not correct:
           return False
    return True
→ Ссылка