【发布时间】:2013-11-01 01:56:33
【问题描述】:
我有一个不会中断的 while 循环。我添加了一个冗余条件以使其中断,但这也不起作用。它应该遍历一个二维数组,看看它是否可以在那个位置放置一个特定维度的块。 Block 是一个列表,而 box 是一个二维列表。这是整个程序。有问题的函数是fillBox
def makeBox(dim):
box = [[0 for x in range(0, dim)] for y in range(0, dim)]
return box
def printBox(lst):
for x in lst:
print(x)
print()
def isSpaceFree(box, row, col, block):
isFree = True
if block > 1:
if row+block-1 < len(box) and col+block-1 < len(box):
for x in range(row,row+block):
for y in range(col, col+block):
if box[x][y] != 0:
isFree = False
else:
isFree = False
elif block == 1:
if box[row][col] == 0:
isFree = True
else:
isFree = False
return isFree
def fillSpace(block, row, col, box):
if block > 1:
for x in range(row, row + block):
for y in range(col, col + block):
box[x][y] = block
if block == 1:
box[row][col] = block
printBox(box)
def fillBox(block, box):
row = 0
col = 0
while len(block) > 0:
if len(block) == 0:
break
if row == len(block):
col = 0
row = 0
block.pop(0)
if col == len(block):
col = 0
row += 1
if isSpaceFree(box, row, col, block[0]):
fillSpace(block[0], row, col, box)
block.pop(0)
row = 0
col = 0
continue
col += 1
def main():
dim = int(input("Enter box dimension: "))
file = open(input("Block File: "))
blocks = []
for x in file:
blocks = x.split()
for x in range(0,len(blocks)):
blocks[x] = int(blocks[x])
blocks.sort(reverse=True)
box = makeBox(dim)
fillBox(blocks, box)
printBox(box)
main()
【问题讨论】:
-
欢迎来到 Stack Overflow!你应该尝试缩小你的问题/问题并粘贴更少的代码
-
@CameronSparr 几分钟前他在另一个问题中做了。不知道他为什么删除它。
-
我被要求发布更多代码,但我不知道该放多少,所以我全部给了。这是一个循环问题,它不会中断。阻止列表为空并抛出索引越界异常。
-
如果您没有调试器来单步执行代码,请添加
print语句以了解循环进行时发生的情况。很明显,block永远不会变空(为什么这么明显?因为你的循环永远不会结束)。为什么你认为它必须变成空的?这就是你会发现错误的地方。 -
@TimPeters 我确实这样做了,但列表是空的。
标签: python list loops multidimensional-array