2012-04-11 7 views
0

私は、スタッククラスを利用した接頭辞プログラムのために取り組んでいます。しかし、私が例外ハンドラを持っていても、リストではなく整数そのものを参照していても、push()メソッドは整数を呼び出すたびにIndexErrorを発生させています。IndexErrorから整数を呼び出す

stack.py:

class stack(): 
    def __init__(self,n): 
     self.n = n 
     self.top = -1 
     self.stack = [""] * n 

    #... 

    def push(self,c): 
     try: 
      print(self.top) 
      self.top += 1 
      self.stack[self.top] = c 
     except IndexError: 
      print("Stack is full.") 

pip.py:

def toPrefix(input): 
    instack = stack(15) 
    prefix = "" 

    for i in range(0,len(input)): 
     for c in range(0,len(input[i])): 
      if(input[i][c].isalpha()): 
       instack.push(input[i][c]) 

エラー:

Traceback (most recent call last): 
    File "<string>", line 247, in run_nodebug 
    File "P:\Scripts\Python\ascl-pip.py", line 42, in <module> 
    toPrefix(infix) 
    File "P:\Scripts\Python\ascl-pip.py", line 37, in toPrefix 
    instack.push(input[i][c]) 
    File "P:\Scripts\Python\stack.py", line 36, in push 
    print(self.top) 
IndexError: list assignment index out of range 
+1

常に、表示されるエラーメッセージの完全なトレースバックを含めてください。 –

+0

スタックを実装する必要はありません。標準のPythonリストには 'append()'と 'pop()'メソッドがあります。 –

+0

@SvenMarnachそれは私自身のスタッククラスを書く必要があるクラスのためです。 – Ganye

答えて

0

あなたのトレースバックが矛盾しています。これは、ライン

print(self.top) 

IndexErrorの理由ですが、print()は、このようなエラーが発生することはありませんと主張しています。

これが起こる唯一の方法は、インタープリタインスタンスにまだロードされている古いバージョンのモジュールを使用していることです。インタプリタを再起動します。

あなたが本当にあなた自身のスタッククラスを実装する必要がある場合、あなたはこのような愚かな何かを行くことができる:このスタックは無制限の大きさを持つことになります

class Stack(list): 
    push = list.append 

+2

'push = list.append'がシステムを倒そうとしているだけです。割り当てをマークしている人はあまり感銘しないと思います。 –

+1

@KshitijMehta:私の態度はばかばかしい課題がばかばかしい解決策を得なければならないということです。あなたがCでスタックを実装することになっているなら、それは問題ありません。しかし、Pythonのスタックは必然的にリストに基づいているため、スタック実装の上にスタック実装を書き込むことになっています。私の提案された実装は、この点を強調するだけです。 –

関連する問題