Python列表索引超出范围错误
我正在做一个Python的俄罗斯方块游戏,这是我教授布置的编程概念课的期末项目。到目前为止,我已经完成了他想让我做的几乎所有内容,但在某个部分遇到了一点小问题。每当我开始左右移动方块时,总是出现“索引超出范围”的错误。这种情况只在方块碰到其他方块时发生。以下是让我头疼的代码部分。
def clearRight(block=None):
global board, activeBlock, stackedBlocks
isClear = True
if(block == None):
block = activeBlock
if(block != None):
for square in block['squares']:
row = square[1]
col = square[0]+1
if(col >= 0 and stackedBlocks[row][col] !=None):
isClear=False
return isClear
def clearLeft(block=None):
global board, activeBlock, stackedBlocks
isClear = True
if(block == None):
block = activeBlock
if(block != None):
for square in block['squares']:
row = square[1]
col = square[0]-1
if(col >= 0 and stackedBlocks[row][col] !=None):
isClear=False
return isClear
我并不是想让别人帮我解决这个问题,我只是想要一些自己解决的建议。提前感谢任何提供的帮助。
2 个回答
0
看看在出现异常时有什么不同的地方。试着打印出程序的状态信息,这样可以帮助你更快找到问题。你只有一个地方是用变量索引来访问数组的,所以可以稍微缩小一下搜索范围。
另外一个建议是:做一个通用的 clear
函数,根据参数来决定你想要清除的方向。
我强烈推荐一本书 《调试规则》!,它会帮助你找到并正确解决问题。:D
2
在第一种方法中,有一个拼写错误会导致这个问题。
当你检查向右移动一个格子的每个单元格时,你没有检查它们是否超出了边界。
if (col >= 0 and ...)
可能应该是
if (col < num_cols and ...)
我也同意CrazyDrummer的看法,应该做一个通用的清除函数。
剧透...
def clear(x_offset, block=None):
if not block:
block = activeBlock
if not block: return True
for x,y in block:
x += x_offset
if not (0 <= x < num_cols) or stackedBlocks[x, y]:
return False
return True