Python:我的程序可以打印,但是返回None?

时间:2017-03-30 01:10:21

标签: python return

调用函数时遇到一些问题。

import random
board = []
solution=[]


def isConflict(x, y):

    for (i, j) in board:
        if x == i:
            return True
        if y == j:
            return True
        if abs(x - i) == abs(y - j):
            return True
    else:
        return False


def solve(x,y):
    for y in range(1, 9):
        if isConflict(x, y)==False:
            board.append((x, y))
            solve(x + 1,y)
            board.remove((x,y))
    if x > 8:
        solution.append(list(board))
        if len(solution)==92:
                return solution[random.randint(1,91)]

a=solve(1,1)
print(a)

这将给出无。但是,如果我将最后一部分更改为:

    if x > 8:
        solution.append(list(board))
        if len(solution)==92:
                print(solution[random.randint(1,91)])

solve(1,1)

我能得到答案。 因此,我无法对该函数执行任何操作,因为它总是变成Nonetype,我想在其他函数中使用它。我该怎么办?非常感谢!!

2 个答案:

答案 0 :(得分:1)

片刻似乎很神奇,但后来我注意到解决方案是递归的。条件为真,但不在最顶层的调用中。

您应该使用solve的值而不是仅仅调用它。我将其更改为:

def solve(x,y):
    if x > 8:
        solution.append(list(board))
        if len(solution)==92:
            return solution[random.randint(1,91)]

    for y in range(1, 9):
        if isConflict(x, y)==False:
            board.append((x, y))
            s = solve(x + 1,y)
            board.remove((x,y))

            if s is not None:
                return s

如果函数的所有路径都没有返回值,通常会出错。

答案 1 :(得分:-1)

solve只会在x > 8时返回任何内容。在Python中,如果你的函数因为它的执行结束(而不是return)而结束,那么它将返回None

如果您想在x <= 8时退回某些内容,则应添加else并将其返回。