私はすでに以下のプログラムの一部を書きました:
def matrix_is_square(matrix):
for i in range(len(matrix)):
if len(matrix[i]) != len(matrix):
return False
return True
この関数は、matrix が正方行列の場合に True を返し、それ以外の場合は False を返します。
ただし、ここで問題が発生します。
関数が魔方陣かどうかを判断する 2 つ目の関数を作成する必要があります。
次の条件が満たされる場合、正方行列は魔方陣を形成します。
- 行列の要素は数字 1,2,3,...,n 2です
- 各行、各列、および 2 つの対角線の要素の合計は同じ値です。
コードは最初に次のように始まります。
def magic(matrix):
if(not(is_square(matrix))):
return False
# The remaining code
これは私が試みたものです。
square = []
for i in range(len(matrix)):
square.append([])
for j in range(len(matrix)):
square[i].append(0)
total = 0
x = len(matrix)
for i in range(x):
total += square[i][i]
if total != x*(x*x+1)/2:
return False
else:
return True
total = 0;
for i in range(x):
total += square[i][x-1-i]
if total != x*(x*x+1)/2:
return False
else:
return True
私のコードにはいくつかのエラーがあるようです。重要なのは、数値が正確に等しいかどうかをテストしていることです。数値は浮動小数点として正確に表すことができないため、これは間違っていますが、それを行う別の方法が見つかりません。ヒントをいただければ幸いです。
同じページにいるだけで、この関数の期待される結果は次のとおりです。
真実
[[2,7, 6],[9,5,1],[4,3,8]]
[[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
間違い
[[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
[[1,1],[1,1]]
[[1,1],[1,1],[1,2]]
numpy をインポートしません。