【问题标题】:Why my Python function doesn't return the result?为什么我的 Python 函数不返回结果?
【发布时间】:2016-04-08 15:13:15
【问题描述】:

我正在尝试编写一个 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

我想知道是不是因为缩进?

【问题讨论】:

  • 我猜 exist 列表中没有附加任何内容
  • Python 函数总是返回一个值。
  • 布尔值附加到列表中。
  • if all(exist): -- 由于某种原因返回 False。弄清楚这一点,你就会发现你的函数返回 None 的原因。
  • @beiller 谢谢!你说的对。我现在正在调查。

标签: python


【解决方案1】:

对于您的前两个if 语句if A3.shape[0] == A3.shape[1]if all(exist),请注意如果条件为假,则不会返回任何内容 (None)。如果不满足所有 if 条件,我想您想返回 False 。然后只需将return False 放在函数的最后,这样如果没有达到return True,它就会运行:

def isMagic(A3):
    ...
    return False

【讨论】:

  • 谢谢@qwr。我将“else return False”添加到“If”语句的每个级别。该函数现在返回 T/F。之前猜猜,当“If”语句不满足时,函数返回“None”,因为我没有指定“else”。再次感谢!
猜你喜欢
  • 2011-06-02
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2016-07-03
  • 2017-09-23
相关资源
最近更新 更多