Симметричная ли матрица?
Подскажите что не правильно. Работает не при всех входных данных
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 шт):
print("yes")будет выводиться всегда, не зависимо от того когда цикл закончится.- 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")
Давайте разбираться постепенно.
Шаг 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