2017-10-16 95 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)] 

這不是在你的代碼唯一的錯誤,但這個是剛剛報告的錯誤的解決方案。

相關問題