2016-04-08 2 views
2

Я пытаюсь написать функцию Python, которая может возвращать «True» или «False» при оценке магического квадрата. Магический квадрат - это матрица, все суммы строк, суммы столбцов и суммы двух диагоналей одинаковы. (Одна диагональ матрицы идет от верхнего левого угла в нижний правый угол, другой диагонали идет сверху справа в нижнем левом углу.)Почему моя функция 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 

Тем не менее, когда я пытаюсь проверить свой код на одном из магического квадрата, функция не возвращает никакого значения:

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

Я подумал, что если бы это было потому, что отступы?

+0

Я думаю, нет ничего прилагается к ** есть ** список –

+1

функции Python всегда возвращает значение. –

+0

Булевские значения добавляются в список. –

ответ

4

Для ваших первых двух заявлений if A3.shape[0] == A3.shape[1] и if all(exist), обратите внимание, если условие ложно, ничего (None) не возвращается. Я думаю, вы хотите вернуть False, если все ваши условия if не выполняются. Тогда просто положить return False в самом конце функции, так что выполняется, если return True не достигнуто:

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

Спасибо @qwr. Я добавляю «else return False» к каждому уровню инструкции «If». Теперь функция возвращает T/F. Угадайте ранее, функция возвращает «Нет», когда оператор «If» не встречается, так как я не указал «else». Еще раз спасибо! –

Смежные вопросы