0

次のようなエラーが表示されて困っています。

Traceback (most recent call last):
  File "/Users/joelwilliams/Desktop/delete me", line 30, in <module>
    v.writef( '======================', 10, 10 )
  File "/Users/joelwilliams/Desktop/delete me", line 24, in writef
    self.write( word )
  File "/Users/joelwilliams/Desktop/delete me", line 15, in write
    self.l[ self.y ] [ self.x : ( self.x + len( word ) ) ] = word
IndexError: list index out of range

メインコードは次のとおりです。

class board():
    def __init__( self ):
        self.x, self.y = 0, 0
        self.l = []
        self.screenWidth, self.screenHeight = 0, 0

    def createBoard( self ):
        listBig = [ ['`'] * self.screenWidth for _ in range( self.screenHeight ) ]

    def setup( self, sw, sh ):
        self.screenWidth = sw - 1
        self.screenHeight = sh - 1

    def write( self, word ):
        self.l[ self.y ] [ self.x : ( self.x + len( word ) ) ] = word

    def draw( self ):
        for v in self.l:
            print(''.join(v))

    def writef( self, word, y, x ):
        self.cursorPosX = x - 1
        self.cursorPosY = y - 1
        self.write( word )

v = board()
v.setup( 75, 20 )
v.createBoard()

v.writef( '======================', 10, 10 )
v.writef( '=                    =', 11, 10 )
v.writef( '=   Pls Work.        =', 12, 10 )
v.writef( '=                    =', 13, 10 )
v.writef( '======================', 14, 10 )

v.draw()

望ましい結果は、コンソールに次のように表示されることです。

           ======================
           =                    =
           =   Pls Work.        =
           =                    =
           ======================

上記のコードを作成するためのガイドとしてこれを使用しました。

4

2 に答える 2

1

あなたのコード

  • ボードを作成します (現在self.l == [])
  • 2 つの関数呼び出しでボードを設定します。そのうちの 1 つは関数ローカル変数を設定しますbigList。多分あなたは設定するつもりself.lだった(しかしそれでもself.l == []
  • 他では参照されない2 つのインスタンス変数cursorPosXを設定します。and (and still )cursorPosYを設定するつもりだったと仮定します。xyself.l == []
  • self.l(while self.l == [])の要素の要素を取得しようとします

実際にself.lどこかで初期化すると役立ちます。とを 1 つにまとめ.__init__()、と も同様にローリングすることをお勧めします。このようなもの::.setup().createBoard().write().writef()

class Board():
  def __init__(self, width, height):
    self.l = [['`'] * (width - 1) for _ in range(height - 1)]

  def write(self, text, x, y):
    dx = x + len(text)
    self.l[y][x:dx] = text

  def draw(self):
    for row in self.l:
      print(''.join(row))

不要なメンバー変数screenWidthscreenHeightxycursorPosX、およびcursorPosYがすべて削除されていることに注意してください。

この新しいコードを使用するには:

board = Board(75, 20)
board.write('======================', 10, 10)
board.write('=                    =', 11, 10)
board.write('=   Pls Work.        =', 12, 10)
board.write('=                    =', 13, 10)
board.write('======================', 14, 10)
board.draw()
于 2013-04-28T06:48:15.460 に答える
1

あなたのcreateBoard()方法では:

def createBoard( self ):
    listBig = [ ['`'] * self.screenWidth for _ in range( self.screenHeight ) ]

適切な長さと高さのリストを作成していますが、それを に割り当てることはありませんself.lself.l長さ 0 のリストも同様です。

また、あなたのwrite()方法で:

def write( self, word ):
    self.l[ self.y ] [ self.x : ( self.x + len( word ) ) ] = word

andself.cursorPosXの代わりに (および Y) が必要だったようです。self.xself.y

これら 2 つの変更を行うと、プログラムは目的の動作を実行するはずです。

于 2013-04-28T06:43:15.687 に答える