2011-09-16 30 views
0

私は循環配列クラスを作成するプロジェクトを持っており、使用する言語はPythonです。私はPythonでクラスに新しくなっていますが、書籍のいくつかのWebページや章を読んだ後、私は彼らの仕組みを理解していると思います。しかし、私は助けが必要なので、私はここで素晴らしい教師に来ると思った:Pythonの円形配列クラス

私たちのクラスはいくつかの操作を実装することができなければなりません。前に挿入、後ろに挿入、インデックスに挿入、前から削除、後ろから削除、インデックスから削除

私はコーディングを開始しましたが、いくつかの問題が発生しています。私の構文が正しいかどうかは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、機能のいくつかのテストを開始して停止しました。 c = circular()とc.addToBack(2)を使ってIDLEでテストしたところ、インデックスエラーが発生しました。これが唯一の問題ではなく、私が立ち往生して前進するための助けが必要な場所です。

私は助けが必要なので、ここに投稿しています。私は怠け者で、私の問題を研究しようとしていないからではありません。既にありがとう!あなたは

self.store[self.endIndex] = value 

を行うあなたはaddToBack

self.store = [] 

を設定__init__

+0

'a = []; a [1] = 3は同じエラーを生成します。存在しないインデックスに書き込むことはできません。あなたは何をしようとしていますか?これは円形(固定サイズ)*バッファーですか? –

+0

@yi_Hはいこれは、上記の操作を実行する固定循環バッファを書き込むプロジェクトです。私はインデックスの問題を修正して、今は私が呼び出す関数ごとにエラーを定義していないので、私は推測している私の構文で何かが間違っています。 – roboman

+0

'self.'を使用する必要があります –

答えて

1

これは円形配列の最初の操作であり、あなたがvalueとして2を渡すと、それが

に変身
[][0] = 2 

問題は明らかでなければならない - 空リストにはインデックスがない0があり、全くインデックスがない。

アイテムを別の方法でリストに追加する必要があります。

私はそれがあなたの宿題の一部であることを正確に説明するつもりはありません。

+0

ええ、私は問題が何かを知っていた。私は円形配列を説明した読書に基づいてこのコードをすべて書きました。私たちの先生は、各関数がどのように働いていたかを擬似コード化しました。私は追加する必要がありますか?またはself.store = [None]を設定する方が良いでしょうか、それとも同じものでしょうか?また、c.addToFront(2)のテスト時に、addToBackが定義されていないとのエラーが表示されます...なぜでしょうか?応答していただきありがとうございます。 – roboman

+0

@roboman - あなたの最初の質問: 'self.store = [None]'を設定すると、インデックスが0ではなくインデックスが1のときに問題が発生します。リストを拡張する必要があります - 'append'サウンド'addToBack'がそれを行うための良い方法です。'addToFront'では' addToBack'をローカル変数、囲む変数、グローバル変数、または組み込み変数として探しています。これらはどれもインスタンスメソッドではないので、インスタンス上で参照する必要があります。 '、' startindex'など。 – agf

+0

OKです。リストを大きくする唯一の問題は、これが固定サイズのバッファでなければならないことです。これは、容量が設定されているバッファです。私はこのリストの後に私の次のプロジェクトである動的なものにするリストを増やすように感じる。私は正しい? – roboman