2016-04-08 28 views
2

私は、マジックスクエアを評価する際に "True"または "False"を返すことができるPython関数を記述しようとしています。マジックスクエアは、行合計、列合計、および2つの対角線の合計がすべて同じ行列です。 (行列の対角の一つは、左上から右下へ行く、他の対角線が左下に右上から行く。)ここで 私のPython関数が結果を返さないのはなぜですか?

は私のコードです:私がしようとすると、しかし

def isMagic(A3): 
    dim = A3.shape[0] * A3.shape[1] 
    construct = np.arange(1,dim+1) 
    if A3.shape[0] == A3.shape[1]: 
     exist = [] 
     for r in range(len(A3)): 
      for c in range(len(A3)): 
       exist.append(A3[r,c] in construct) 
     if all(exist): 
      def all_same(items): 
       return all(x == items[0] for x in items) 
      dig_1 = sum(np.diag(A3)) 
      dig_2 = sum(np.diag(np.fliplr(A3))) 
      dig = all_same(np.array([dig_1, dig_2])) 
      column = all_same(np.sum(A3, axis = 1)) 
      row = all_same(np.sum(A3, axis = 0).transpose()) 
      if all(dig, column, row): 
       return True 
      else: 
       return False 

魔方陣の1に私のコードをテストし、関数が任意の値を返しません:

test2 = np.matrix([[8, 1, 6], 
       [3, 5, 7], 
       [4, 9, 2]]) 
isMagic(test2) # True 

私はそれがインデントためだった場合ということだろうか?

+0

が、私は**存在**リスト –

+1

Pythonの関数は常に値を返すために追加何も存在しないと思います。 –

+0

ブール値がリストに追加されます。 –

答えて

4

最初の2つのifステートメントif A3.shape[0] == A3.shape[1]if all(exist)については、条件がfalseの場合は何も返されません(None)。 if条件がすべて満たされていない場合、Falseを返すと思います。そして、ちょうどそれがreturn True場合に実行されるように、関数の一番最後にreturn Falseを置くには達していない。

def isMagic(A3): 
    ... 
    return False 
+0

ありがとう@qwr。 "If"ステートメントの各レベルに "else return False"を追加します。今関数はT/Fを返します。私が "else"を指定しなかったので、 "If"ステートメントが満たされないとき、関数は "None"を返します。再度、感謝します! –

関連する問題