2017-10-16 11 views
-1

私はリストを間違って初期化していることは間違いないと思います。 最初はmain()では表示されないクラスが原因だと考えましたが、メインを削除した後も同じエラーが返されました。 私はPythonリファレンスを読んで、コード間に矛盾がないことを発見しました。目に見えないエラーを正確に特定することができますか?前もって感謝します!Pythonクラスがmainで初期化できません。間違ったパラメータが使用されていますか?

参考: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)] 

あなたがリストCOMPREにnodesを参照することはできませんそれを構築している間、 (まだ初期化されていない要素にアクセスしようとしても)。

0

インデント付きで動作します。 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)] 

ここで同じことを2回実行しようとしています。

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

それはあなたのコードが、これではエラーだけではありません。また、あなたはスワップ)とこの行の]false後を持って

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])) 

を使用しますあなたが今報告したエラーの解決策です。

関連する問題