0

私はすでに以下のプログラムの一部を書きました:

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. 行列の要素は数字 1,2,3,...,n 2です
  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 をインポートしません。

4

1 に答える 1