2011-09-16 12 views
0

원형 배열 클래스를 만드는 프로젝트가 있고, 사용할 언어는 파이썬입니다. 나는 파이썬으로 수업을 처음 접했지만 책의 일부 웹 페이지와 챕터를 읽은 후에 어떻게 작동하는지 이해하고 있다고 생각한다. 그러나 나는 도움이 필요하다. 그래서 나는 여기에서 훌륭한 선생님 들께와 줄 것이라고 생각했다. :)원형 배열 클래스 (파이썬에서)

우리의 학급은 여러 가지 작업을 수행 할 수 있어야합니다. 앞에서 삽입, 뒤로 삽입, 색인에서 삽입, 앞에서 제거, 뒤에서 제거, 색인에서 제거.

필자는 코딩 작업을 시작했지만 몇 가지 문제를 겪고 있으며 구문이 옳다면 100 % 확실하지 않습니다. 여기

는 내가 지금까지 무엇을 가지고 :

class circular: 

    def __init__(self): 
     self.store = [] 
     self.capacity = len(self.store) 
     self.size = 0 
     self.startIndex = 0 
     self.endIndex = 0 

    def decrementIndex(self): 
     index = index - 1 
     if index < 0: 
      self.store = self.store + self.capacity 

    def incrementIndex(self): 
     index = index + 1 
     if index == self.capacity: 
      index = index - self.capacity 

    def addToBack(self, value): 
     self.store[self.endIndex] = value 
     self.endIndex = incrementIndex(self.endIndex) 
     self.size += 1 

    def addToFront(self, value): 
     if self.size == 0: 
      addToBack(self, value) 
     else: 
      self.startIndex = decrementIndex(self.startIndex) 
      self.store[self.startIndex] = value 
      self.size += 1 

나는 그가 addTofront 및 addToback 주로 T, 일부 기능을 테스트 시작이 중단되었습니다. IDLE에서 c = circular() 및 c.addToBack (2)를 사용하여 테스트했을 때 인덱스 오류가 발생했으며 이유는 확실하지 않습니다. 그게 유일한 문제는 아니며, 내가 붙어서 앞으로 나아갈 수 있도록 도움을 필요로하는 곳입니다.

나는 게으름을 피우고 내 문제를 연구하지 않았기 때문에 도움이 필요하며 배우고 싶어하기 때문에 여기에 게시하고 있습니다. 이미 감사합니다!

+0

'a = []; a [1] = 3'은 같은 오류를 생성합니다. 존재하지 않는 색인에 쓸 수 없습니다. 당신이하려고하는 것은 원형 (고정 크기) * 버퍼 *입니까? –

+0

@yi_H 예 위의 작업을 수행하는 고정 순환 버퍼를 작성하는 프로젝트입니다. 색인 문제를 해결하고 내가 호출하는 각 함수에 대해 정의 된 오류를 얻지 못하고 있습니다. 그래서 뭔가 내 구문이 잘못되었다고 추측합니다. – roboman

+0

당신은'self.'를 사용해야합니다. –

답변

1

__init__에서는이 원형 배열의 제 1 동작 인 경우

self.store[self.endIndex] = value 

addToBack에서

self.store = [] 

을 설정하고, 그 다음

으로 회전하는 상기 value2 합격
[][0] = 2 

문제는 분명해야합니다. 빈 목록에는 0의 색인이 없으며 색인이 전혀 없습니다.

다른 방법으로 목록에 항목을 추가해야합니다.

정확히 어떻게 숙제의 일부인지 알 수는 없습니다.

+0

그래, 문제가 뭔지 알았어. 나는 원형 배열을 설명하는 독서에 기초하여이 모든 코드를 작성했으며 교사는 각 기능이 어떻게 작동하는지 의사 코드로 작성했습니다. 추가해야합니까? 또는 self.store = [None]을 설정하는 것이 더 좋을까요, 아니면 같은 것이겠습니까? 또한 c.addToFront (2)를 테스트 할 때 addToBack이 정의되지 않았다는 오류가 발생합니다 ... 왜 그렇게 될까요? 응답 해 주셔서 감사합니다. – roboman

+0

@roboman - 첫 번째 질문 :'self.store = [None]'으로 설정하면 인덱스가 0이 아닌 1 일 때 문제가 발생합니다. 목록을 확장해야합니다 .-'append' 사운드 그것을하기위한'addToBack'을위한 좋은 방법처럼.'addToFront'에 대해서는'addToBack'을 지역 변수, 둘러싸 기 변수, 전역 변수, 내장 변수로 찾고 있습니다 - 그것들 중 아무 것도 아니기 때문에 인스턴스 메소드이기 때문에'size와 같이 인스턴스에서 참조 할 필요가 있습니다 ','startindex' 등 – agf

+0

좋습니다. 목록이 커지는 유일한 문제는 고정 용량 버퍼 여야하며 용량이 설정된 고정 버퍼 여야합니다. 나는이 목록을 역동적으로 만들 것이라고 생각합니다. 이것은 다음 프로젝트입니다. 내가 맞습니까? – roboman