2017-02-11 57 views
0

我自學Python使用How to Think Like a Computer Scientist。我從文本中複製了這段代碼,但由於某些原因,我的代碼出現了錯誤。任何人都可以看到我失蹤的東西嗎?爲什麼Python說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 

以下是錯誤:

==== 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:

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

Unindent函數print_list()不是類Node的一部分。 –

回答

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

是的,那正是我想要做的。我在混合方法和功能。非常感謝! –