Как проверить является ли введенная матрица магическим квадратом, или нет?
В строке проверки первой диагонали выдает ошибку, что b - это список, а не число.
Как исправить?
Создается матрица:
matrix = []
n = 2
for i in range(n):
row = []
for j in range(n):
row.append(int(input()))
matrix.append(row)
#Сумма 1ой строки сравнивается с остальными
first = sum(matrix[0])
for k in range(1, n):
if sum(matrix[k]) != first:
print(False)
break
else:
#Теперь столбцы сравниваются с первой строкой
for k in range(0, n):
if sum([row[k] for row in matrix]) != first:
print(False)
break
else:
#Теперь диагонали
#Первая диагональ \
for b in range(n):
if sum([matrix[b, b] for row in matrix]) != first:
print(False)
break
# Вторая диагональ
else:
if sum([matrix[n-b-1, b] for row in matrix]) != first:
print(False)
break
else:
print(True)
Ответы (3 шт):
Автор решения: Evgeniy
→ Ссылка
Сначала нужно найти саму диагональ в списке. Т.е. мы должны брать n элемент первой строки, потом n+1 второй строки, n+2 третьей строки, и так далее
matrix = []
n = 2
for i in range(n):
row = []
for j in range(n):
row.append(int(input()))
matrix.append(row)
# Сумма 1ой строки сравнивается с остальными
first = sum(matrix[0])
for k in range(1, n):
if sum(matrix[k]) != first:
print('Суммая 1й строки с остальными, FALSE')
break
else:
# Теперь столбцы сравниваются с первой строкой
for k in range(0, n):
if sum([row[k] for row in matrix]) != first:
print('Столцы со строкой, FALSE')
break
else:
# Теперь диагонали
# Первая диагональ \
diag = []
number = 0
for each in matrix:
diag.append(each[number])
number = number + 1
if sum(diag) != first:
print('Первая диагональ, FALSE')
break
# Вторая диагональ
else:
diag = []
number = -1
for each in matrix:
diag.append(each[number])
number = number - 1
if sum(diag) != first:
print(False)
break
else:
print(True)
break
Автор решения: Karlusha
→ Ссылка
Вот тоже что-то получилось...вроде как
Теперь диагонали
Первая диагональ \
for b in range(n):
if sum(matrix[b][b] for b in range(n)) != first:
print(False)
break
Вторая диагональ
else:
if sum(matrix[n-b-1][b] for b in range(n)) != first:
print(False)
break
else:
print(True)
Автор решения: Karlusha
→ Ссылка
Может вторая диагональ так
diag = []
num = n-1
for each in matrix:
diag.append(each[num])
num = num -1
if sum(diag) != first:
print(False)
break
else:
print(True)
break