为什么我的函数dosnt工作? (短一个)

时间:2016-12-23 21:07:34

标签: python debugging

我正在尝试创建一个函数,返回一个地方到另一个地方的所有可能性。

这不是我的最终代码,我不确定它是否有效,但是我阻止了我的错误继续。

以下是我的python 2.7代码:

def routes(graph,start,end):
    path=[]
    paths=[]

    for node in graph[start]:
        if node==end:
            path+=[end]
        elif node<end:
            path.append(node)
            start=node
            routes(graph,start,end)
    return paths       

graph={001:(002),002:(003,004,005),003:(004),004:(005,006)}
routes(graph,002,005)

进入第二个函数调用时启动的问题。 当它试图在图形[开始]行中运行'for node'时,我得到'int'对象不可迭代'错误。

导致该错误的原因是什么?

为什么在递归之外它起作用而在里面却没有?

非常感谢。

2 个答案:

答案 0 :(得分:1)

here被盗(可能读得很好)并略有更新:

def find_all_paths(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return [path]
    if start not in graph:
        return []
    paths = []
    for node in graph[start]:
        if node not in path:
            newpaths = find_all_paths(graph, node, end, path)
            for newpath in newpaths:
                paths.append(newpath)
    return paths

然后这应该给出所需的结果:

graph = {1: (2, ), 2: (3, 4, 5), 3: (4, ), 4: (5, 6)}
print(find_all_paths(graph=graph, start=2, end=5))
# -> [[2, 3, 4, 5], [2, 4, 5], [2, 5]]

或许可以将其与您的版本进行比较并找出出错的地方?

答案 1 :(得分:0)

  

仍然不起作用

基本上,您只是错过了将找到的路径分配给paths并在return之前插入起始节点。更正的版本:

def routes(graph,start,end):
    paths=[]
    for node in graph[start]:
        if node==end:
            paths+=[[end]]
        elif node<end:
            paths+=routes(graph,node,end)
    for path in paths:
        path.insert(0, start)
    return paths

graph={001:(002,),002:(003,004,005),003:(004,),004:(005,006)}
print routes(graph,002,005)

输出:

[[2, 3, 4, 5], [2, 4, 5], [2, 5]]