Python类无法初始化,错误的参数使用?
问题描述:
我很确定我错误地初始化了这个列表,但是不管它是错误的参数还是错位的语法,我都不能说。首先,我认为这是由于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()
答
for i in range(10):
nodes = [ node(i, nodes[2*i], nodes[(2*i)+1, false]) for i in range(10)]
不能引用nodes
列表COMPRE同时建设它。 (即使你可以尝试访问尚未初始化的元素)。
答
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)]
这不是在你的代码唯一的错误,但这个是刚刚报告的错误的解决方案。
Python中的缩进问题很重要,你的问题已经被破坏。你需要修复它。 – user2357112