2012-02-14 62 views
0

文件「C:\ Users \ Tom \ Desktop \ Tetris!\ tetris.py」,行206,typeSet Globals.blockArray [i] .x.append(7) IndexError:列表索引超出範圍列表索引超出範圍 - python數組錯誤

我得到的排版

四號線上面的錯誤在初始化:

def main(): 
    initialize() 

def initialize(): 
    Globals.running = True 
    addBlock() 

class Globals: 
    running = True 
    blockArray = [] 
    blockNum = 0 

再後來就:

def addBlock(): 
    Globals.blockArray.append(block()) 

class block: 
    def __init__(self): 
     self.id = Globals.blockNum 
     Globals.blockNum += 1 
     self.x = [] 
     self.y = [] 
     self.landed = False 
     self.blockType = 1#random.randint(1,6) 
     self.typeSet() 


    def typeSet(self): 
     i = self.id 
     if self.blockType == 1: 
      #square(i) 
      Globals.blockArray[i].x.append(7) 
      Globals.blockArray[i].y.append(0) 
      Globals.blockArray[i].x.append(7) 
      Globals.blockArray[i].y.append(1) 
      Globals.blockArray[i].x.append(8) 
      Globals.blockArray[i].y.append(0) 
      Globals.blockArray[i].x.append(8) 
      Globals.blockArray[i].y.append(1) 

編輯:添加更多的代碼,並切換這麼ID應該在0錯誤代碼開始並沒有改變

+2

似乎非常清楚:任何'Globals.blockArray' 。是,它並沒有'i'成員 – 2012-02-14 22:13:14

+0

這似乎無法在它的第一次通過,雖然在初始化:blockArray = [],然後的blocknum = 0 再後來就 高清addBlock(): 全局.blockArray.append(block()) – 2012-02-14 22:16:19

+2

'i'從來沒有0,你首先將它增加到1.'blockArray [1]'不存在。 – 2012-02-14 22:18:22

回答

1

代碼不足。該錯誤告訴你確切的問題。 Globals.blockArray沒有會員位於i。這就是爲什麼當你避免使用全局變量時你不應該使用全局變量,因爲確保你的全局變量具有期望的值是很困難的。

0

雖然沒有立即想到你的代碼上面看,我想嘗試的第一件事將是打印Globals.blockArrayGlobals.blockArray[i]的內容。

0

我不知道,但也許你想要做

Globals.blockArray.append(self) 

在init函數,並增加Globals.blockNum 轉讓後,self.id.

0

每次創建的block實例時,Globals.blockNum遞增1和self.id被設置爲電流值的Globals.blockNum

後來(在typeSetself.id用於索引到Globals.blockArray

Globals.blockArray中沒有至少self.id + 1項目時,會發生此錯誤。 。

如果Globals.blockNum不斷增加和使用它的值(間接)索引Globals.blockArray,這有可能會導致錯誤(除非有導致Globals.blockArray保持增長過於