2013-04-28 84 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