这是我到目前为止的代码。一切都适用于测试用例。我编码非常糟糕,所以我不知道如何编写一个函数来打印指定图块中周围图块中的炸弹数量。我正在考虑找到炸弹瓦片,并在它周围的所有瓷砖上加1,备用已经炸弹的瓷砖。但我不知道如何写这个。
到目前为止的代码
def makemat(x):
for a in range(x):
list1=[]
b=0
while b<x:
list1.append(0)
b+=1
mat1.append(list1)
for c in range(x):
list2=[]
d=0
while d<x:
list2.append('-')
d+=1
mat2.append(list2)
makemat(8)
def printmat(mat):
for y in mat:
print(str(y)+"\t")
printmat(mat1)
print()
def addmines(z):
count=1
while count<=z:
p=randrange(len(mat1))
t=randrange(len(mat1))
if mat1[p][t]=="b":
count+=0
else:
mat1[p][t]="b"
count+=1
printmat(mat1)
addmines(10)
def addscores():
答案 0 :(得分:2)
让我们把它分解成碎片。
第二个和第三个,你已经知道该怎么做了,因为你在现有的代码中做了类似的事情。但第一个是几乎容易:
for neighbor_row in row-1, row, row+1:
for neighbor_col in col-1, col, col+1:
这个简单的代码存在两个问题:
(row, col)
计为其自己的邻居。 row
为0,则row-1
为-1,这是合法的,但不是您想要的;如果row
为7,row+1
为8,则会引发异常。在这种情况下,你可以忽略第一个问题 - 如果(row, col)
不是炸弹,它不会增加计数,如果它是炸弹,我们就不会这样做。关心伯爵。
第二个是棘手的,但我们可以使用range
而不是明确列出这三个值来解决它,并使用max
和min
来强制范围的结束在范围内:
for neighbor_row in range(max(row-1, 0), min(row+1, len(mat)-1)):
现在,你只需要完成那个双循环,添加炸弹检查并计算和存储结果,然后把整个东西放在另一个双循环中,遍历矩阵中的每一行和每一行,你就是&#39 ;完成。
您可能想要考虑抽象出来 - 您可以将此循环编写为itertools.product
的单个调用,将计数作为对sum
的调用,使用生成器表达式,然后整个函数只有4行,而且你有办法重用它的一部分。但是首先要使用简单的版本。