2017-02-11 5 views
0

How to Think Like a Computer Scientistを使用してPythonを教えています。私はテキストからこのコードをコピーしましたが、私は何らかの理由でエラーを投げています。誰かが私が行方不明であることを見ることができる?なぜPythonはprint_listが定義されていないと言っていますか?ノードオブジェクトの印刷メソッドが動作しない

==== RESTART: /Desktop/Programming Career/Untitled.py ==== 

Traceback (most recent call last): 
    File "Users/Desktop/Programming Career/Untitled.py", line 24, in <module> 
print_list(node1) 
NameError: name 'print_list' is not defined 

私はこのようなprint_listを定義しようとした:ここで

class Node: 
    def __init__(self, cargo = None, next = None): 
     self.cargo = cargo 
     self.next = next 

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

    def print_list(node): 
     while node: 
      print node, 
      node = node.next 
     print 

は誤りである

def print_list(self): 
    for node in self: 
     print node, 
     node = node.next 
    print 

しかし、私は同じエラーを取得:あなたが定義されている NameError: name 'print_list' is not defined

+2

'print_list'を' Node'の定義から移動します。 – ForceBru

+2

コードのインデントに問題がありますので、修正してください。お手伝いできます! – Arman

+1

クラス 'Node'の一部ではない関数' print_list() 'のインデントを解除します。 –

答えて

1

をメソッドprint_list()あなたは楽しいものとしてそれを呼び出そうとしていますction。インデントをdef print_list(node):の前に削除すると、それが関数になります。その後、

class Node: 
    def __init__(self, cargo = None, next = None): 
     self.cargo = cargo 
     self.next = next 

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

def print_list(node): 
    while node: 
     print node, 
     node = node.next 
    print 

それとも方法作り、そのようにそれを呼び出す:

class Node: 
    def __init__(self, cargo = None, next = None): 
     self.cargo = cargo 
     self.next = next 

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

    def print_list(self): 
     node = self 
     while node: 
      print node, 
      node = node.next 
     print 
その後、

代わりのprint_list(node1)あなたはあなたが行う場合に、それは持っているだろう方法作ることnode1.print_list()

注意を呼び出すことができますあなたがそれを書いたように働いていましたが、最初の引数のためにコンベンションselfを使用する方がきれいに見えますが、再バインドできる間にはselfはそれほど明確ではありません。

+0

これはまさに私がやろうとしていたものです。ありがとうございました!!!! –

1

あなたは、print_listという関数をNodeクラスに属させたくないと思っています。この場合、print_list関数のインデントを削除するだけです。 Pythonでは、JavaやC++のような角括弧は使用しませんが、字下げを使用します。この場合、Pythonはprint_listをNodeクラスに属する関数として解釈します。

class Node: 
    def __init__(self, cargo = None, next = None): 
     self.cargo = cargo 
     self.next = next 

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

def print_list(node): 
    while node: 
     print node 
     node = node.next 
print 
+0

はい、まさに私がやろうとしていたことです。私はメソッドと関数を混同しています。どうもありがとうございます! –

関連する問題