为什么我的Python函数没有返回结果?

3
我正在尝试编写一个Python函数,该函数可以返回“True”或“False”,以评估幻方。幻方是一个矩阵,其所有行和、列和以及两条对角线的和都相同。(矩阵的一条对角线从左上到右下,另一条对角线从右上到左下。)
这是我的代码:
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

我想知道这是否是因为缩进引起的?

我猜现有列表中没有附加任何内容。 - Andrey Lyubimov
1
Python函数总是返回一个值。 - OneCricketeer
布尔值被附加到列表中。 - Mark Li
1
如果所有(exist):-- 这个返回False,原因不明。找出原因,你就会发现为什么你的函数返回None。 - beiller
@beiller 谢谢!你说得对。我现在正在研究它。 - Mark Li
1个回答

4
对于你的前两个if语句if A3.shape[0] == A3.shape[1]if all(exist),请注意如果条件为假,则不会返回任何东西(None)。我猜你想在所有的if条件都不满足时返回False。然后只需在函数的最后加上return False,以确保它在没有达到return True时运行:
def isMagic(A3):
    ...
    return False

谢谢@qwr。我在每个"if"语句的层次上添加了"else return False"。函数现在返回T / F。猜想以前,当"If"语句不符合条件时,函数返回"None",因为我没有指定"else"。再次感谢! - Mark Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接