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

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