로그인 바로가기 하위 메뉴 바로가기 본문 바로가기

데이터 구조 및 분석: Linear Structure and Dynamic Programming

임시 이미지 KAIST 산업및시스템공학과 문일철
http://kooc.kaist.ac.kr/datastructure-2019s/forum/33110
좋아요 1779 수강생 3367

안녕하세요 실습4에 대해서 질문있습니다.


실습 4의 ProductionList.py 코드에서

특정 node가 head 혹은 tail인지 확인하는 구문으로써

"while node.getNextNode().strSerialNumber!='tail':"

과 같이 이용하도록 강의에서 교수님이 설명해 주셨는데요,

저는 아래와 같이 짰습니다.

"while node.getNextNode() != self.nodeTail:"

이렇게 실행하면 오류가나더군요

~/HW/practice/week4/ProductionList.py in getSize(self)
     76         node = self.nodeHead
     77         cnt = 0
---> 78         while node.getNextNode() != self.nodeTail: #node.getNextNode().strSerialNumber!='tail':
     79             node = node.getNextNode()
     80             cnt+=1

~/HW/practice/week4/PlanNode.py in getNextNode(self)
      9 
     10     def getNextNode(self):
---> 11         node = self.nextNode
     12         return node
     13 

AttributeError: 'PlanNode' object has no attribute 'nextNode'

-----

아마도 while구문에서 특정 node가 tail인지 인식하지 못하여 tail 에는 nextNode method 가 없기에
오류가 난 것 같습니다.

왜 저처럼 "while node.getNextNode() != self.nodeTail:" 이렇게 짜면 tail인지 인식하지 못하나요?
좌변, 우변 모두 self.nodeTail을 reference 하는것은 맞다고 생각하는데요..

또, 실습3의 ProductionList.py에도
while node.getNextNode()!=self.nodeTail:
# print(1)
node = node.getNextNode()
allStartDate.append(node.dateStart)
allModel.append(node.strModel)
self.BREAK+=1

if self.BREAK>10000:
print('error occured')
break
else:
print(self.BREAK)

doubly linked list에서 size를 구하기 위해 루프를 돌릴 때 비슷한 구문을 사용하지만 여기에선
정상적으로 작동합니다.

아마도 제 코드를 이용하려면 __eq__ method로 정의해주면 되는것 같긴한데 저런 오류가 발생하는
이유가 궁금합니다.

긴 글 읽어주셔서 감사합니다.