2017-02-11 8 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

Отменить функцию 'print_list()', которая не является частью класса 'Node'. –

ответ

1

Вы определили метод print_list(), но вы пытаетесь назвать это забавой фикция. Удалите отступ до 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

Да, это именно то, что я пытался сделать. Я смешиваю методы и функции. Спасибо огромное! –

Смежные вопросы