1

宿題として迷路経路探索の再帰関数を実行しましたが、問題が発生しています。私は(デバッグを通じて)すべてを正しく行ったこと、パスが見つかったことなどを知っています。しかし、すべての再帰関数がTrueを返し始めると、元の/最初の関数はそうではありません! true を返す方法が見つかりません (再帰呼び出しは「if, true」形式です)。

皆さんが私を助けてくれることを願っています。それは私の母国語ではないので、英語が下手で申し訳ありません.

*コードは次のとおりです。

def pathExists(labyrinth, currCoord, destination, previousRule, visited):
    if currCoord == destination:
        return True
    if currCoord not in labyrinth:
        print "False"
        return False

    rule = labyrinth[currCoord]
    if rule == Any:
        previousRule = rule
        print currCoord
        if (pathExists(labyrinth, (currCoord[0], currCoord[1] - 1), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0] + 1, currCoord[1]), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0] - 1, currCoord[1]), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0], currCoord[1] + 1), destination, rule, visited)):
            print "True"
            return True
        else:
            print"outro"

    elif rule == Bridge:
        print currCoord
        currCoord = nextCoord(currCoord, previousRule)
        if pathExists(labyrinth, currCoord, destination, rule, visited):
            print "True"
            return True

    else:
        print currCoord
        if currCoord in visited:
                print "False"
                return False
        visited.append(currCoord)
        previousRule = rule
        currCoord = nextCoord(currCoord, rule)
        if pathExists(labyrinth, currCoord, destination, rule, visited):
            print "True"
            return True
4

1 に答える 1

1

すべてのコードがないと私は間違っていますが、戻り値を格納するにはグローバル/クラス変数が必要だと思います。ロジック:他の関数を呼び出しているため、最初の呼び出しは何も返しません(またはNoneを返します)。
明確にするために:

a = [1,2,[4,6],3,4]
ret = None
def f(x):
    global ret
    if isinstance(x, list):
        f(x[0])
    else:
        ret = x
        return x

var = f(a)
print(var, ret)

テストすると、var = Noneが表示されますが、retは1です(グローバルではなく、クラスにコードをカプセル化し、self.retのようなものを使用することをお勧めします)。

PS:Joel Cornettが言ったように、英語/抽象変数名を使用すると、すべてのコードがはるかに読みやすくなります!

于 2013-02-27T22:43:44.033 に答える