2017-02-11 4 views
0

How to Think Like a Computer Scientist을 사용하여 파이썬을 가르칩니다. 이 코드를 텍스트에서 복사했지만 내 이유가 무엇인지 오류가 발생했습니다. 아무도 내가 누락 된 것을 볼 수 있습니까? 왜 파이썬은 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

'node'의 정의에서'print_list'를 이동하십시오. – ForceBru

+2

코드 들여 쓰기에 문제가 있습니다. 고칠 수 있도록 도와주세요. – Arman

+1

'Node' 클래스의 일부가 아닌'print_list()'함수의 인 덴트를 해제하십시오. –

답변

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 

또는 같은 호출 한 후 그것을하는 방법을 만들어 : 대신 print_list(node1) 당신은 당신이 할 경우이 방법이있을 것입니다 만드는 것이 node1.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(self): 
     node = self 
     while node: 
      print node, 
      node = node.next 
     print 

을 다음 당신이 그것을 작성한 것처럼 작동하지만, 첫 번째 인수에 대해서는 컨텍스트 self을 사용하는 것이 더 깨끗한 것처럼 보입니다. 다시 바인딩 할 수있는 동안 self은 그렇지 않을 수도 있습니다.

+0

정확히 내가하려는 일입니다. 고맙습니다!!!! –

1

나는 print_list 함수를 Node 클래스에 속하지 않기를 원한다고 생각한다. 이 경우 print_list 함수의 들여 쓰기를 제거하면됩니다. 파이썬은 자바 나 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

네, 그게 정확히 제가하려는 일입니다. 메소드와 함수가 섞여 있습니다. 정말 고맙습니다! –