我使用How to Think Like a Computer Scientist
教自己Python。我从文本中复制了这段代码,但我的某些原因引发了错误。任何人都能看到我失踪的东西吗?为什么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
答案 0 :(得分: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
它是可能更清楚,不要。
答案 1 :(得分: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