我对Python比较陌生,我有一个问题。我试图选择一个描述我问题的名字,但可能会有更好的名字。现在,这是家庭作业,所以我不想直接回答,而是帮助我自己到达那里。我正在编写一个解决电路板着色问题的程序。我们的想法是填充板,以满足行和列约束。一个例子:
0 1 3
1[. . x]
2[. x x]
1[. . x]
我写了一个有效的函数,但它没有处理两次查看相同空间([row] [col])的可能性。我知道我应该这么做,所以它只看一次每个空间,但我不知道该怎么做。我确信这是一个简单的解决方案,但我很丢失!
这是我原来的功能。我们的想法是,它将查看每次迭代时具有最大值的列。它可以工作,但它会在同一个空间看两次,在某些情况下导致失败:
def zoomin(rows,cols):
board = []
for x in range(len(rows)):
lyst = []
for y in range(len(cols)):
lyst.append(".")
board.append(lyst)
for x in range(len(rows)):
while rows[x] > 0:
largestColIndex = cols.index(max(cols))
print("Current largest Index: ",largestColIndex)
if cols[largestColIndex] > 0:
board[x][largestColIndex] = "x"
rows[x] -= 1
cols[largestColIndex] -= 1
if all([x == 0 for x in rows]) and all([y == 0 for y in cols]):
return True
else:
print("Not Solved")
所以,我试图重写它来迭代从最大值到最小值的列,但现在它根本不起作用:
def zoomin(rows,cols):
board = []
for x in range(len(rows)):
lyst = []
for y in range(len(cols)):
lyst.append(".")
board.append(lyst)
for x in range(len(rows)):
while rows[x] > 0:
sortedIndexes = [i[0] for i in sorted(enumerate(cols), key=lambda x:x[1])]
for y in reversed(sortedIndexes):
if cols[y] > 0:
board[x][y] = "x"
rows[x] -= 1
cols[y] -= 1
if all([x == 0 for x in rows]) and all([y == 0 for y in cols]):
return True
else:
return False
我希望这是有道理的。任何意见,将不胜感激!如果您需要更多说明,请告诉我。