2017-10-16 64 views
-1

我很确定我错误地初始化了这个列表,但是不管它是错误的参数还是错位的语法,我都不能说。首先,我认为这是由于main()中不可见的类,但在移除main之后,仍然返回相同的错误。 我已阅读了Python参考资料,发现我们的代码之间没有差异。非常感谢指出任何看不见的错误。提前致谢!Python类无法初始化,错误的参数使用?

参考:https://docs.python.org/3/tutorial/classes.html

返回错误:

Traceback (most recent call last): 
File "dfs_final.py", line 12, in <module> 
class node(object): 
File "dfs_final.py", line 77, in node 
main() 
File "dfs_final.py", line 68, in main 
nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 
File "dfs_final.py", line 68, in <listcomp> 
nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 
NameError: name 'node' is not defined 

代码:

class node(object): 

    def __init__(self,cargo = None, left = None, right = None, found = None): 
    self.cargo = cargo 
    self.left = left 
    self.right = right 
    self.found = found 

def __str__(self): 
    return str(self.cargo) 

# pass in root to begin search 
def DFS(curr_node, visited = []): 

# Return if node DNE 
if not curr_node: 
    return 


# if already visited, return cycle 

for i in visited: 
    if (curr_node.cargo == visited[i]): 
    err_str = "It's a cycle :(" 
    return err_str 

# mark node as found 
curr_node.found = true 

# add to visited list 
visited += [curr_node.cargo] 


# pass in node.left, node.right to recurse 

DFS(curr_node.left, visited) # Go left first 
DFS(curr_node.right, visited) # Try right 

# After finished traversing tree 
return visited 

def main(): 

    adjacency_matrix = {1: [2, 3], 2: [4, 5], 
    3: [5], 4: [6], 5: [6], 
    6: [7], 7: []} 

    # Initialize array of nodes to pass 
    for i in range(10): 
    nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 

    for i in nodes: 
    print(nodes[i].cargo) 

    # Pass into function 
    # DFS(nodes) 

if __name__ == "__main__": 
main() 
+4

Python中的缩进问题很重要,你的问题已经被破坏。你需要修复它。 – user2357112

回答

1
for i in range(10): 
     nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 

不能引用nodes列表COMPRE同时建设它。 (即使你可以尝试访问尚未初始化的元素)。

0

Python与缩进工作。 Python不使用括号来分隔函数体,因此缩进需要是正确的。

下面是一段简单的代码编写正确:

if True: 
    print("Hello") 

现在这里是一个糟糕的一段代码错误缩进:

if True: 
print("Hello") 

这是要拿出一个错误。 Python如何知道函数结束的地方?或者if声明?

现在,假设这只是一个复制粘贴问题,那么代码中会出现什么问题。

for i in range(10): 
    nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 

您试图在此处执行相同的操作两次。二者必选其一

nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 

nodes = [] 
for i in range(10): 
    nodes.push(node(i, nodes[2*i], nodes[(2*i)+1, false])) 

你也有交换)]在此行中false后:

nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)] 

这不是在你的代码唯一的错误,但这个是刚刚报告的错误的解决方案。

相关问题