2013-04-28 77 views
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.  = 
      =     = 
      ====================== 

我用this作爲引導至c reate上面的代碼 在此先感謝!

+0

我發誓,這是今天的最後一個問題:) – 2013-04-28 06:29:39

回答

1

在你createBoard()方法:

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

你創造合適的長度和高度的名單,但你永遠不將其分配給self.l。所以self.l仍然是長度的列表0

此外,在您的write()方法:

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

它看起來像你想self.cursorPosX(和Y)的存在,而不是self.xself.y

做出這兩個改變,你的程序應該做你想做的事情。

+0

我固定2個錯誤,像變魔術一樣工作!謝謝! – 2013-04-28 07:20:42

1

您的代碼

  • 創建一個板(現在self.l == []
  • 樹立板通過兩個函數調用,其中一個設置一個函數局部變量bigList;也許你的意思是設置self.l(但仍self.l == []
  • 設置兩個實例變量cursorPosXcursorPosY哪些不在其他地方引用;我假設你的意思是設置xy(現在仍然self.l == []
  • 嘗試檢索的self.l(而self.l == []

,如果你真的初始化self.l某處這將有助於元素的元素。我建議將.__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)) 

需要注意的是無用的成員變量screenWidthscreenHeightxycursorPosXcursorPosY已經全部被淘汰。

要使用這個新代碼:

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() 
+0

我沒有注意到所有這些錯誤..感謝您的幫助,並展示了製作我的程序的更好方法! – 2013-04-28 07:20:19