如何在Python中编写一个函数,用于计算方块周围地雷的数量并将该数字打印在该方块中(扫雷游戏)

2024-04-19 08:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我到目前为止的代码。一切都与测试用例一起工作。我只是很不擅长编码,所以我不知道如何编写一个函数,在指定的图块中打印周围图块中的炸弹数量。我在想找到炸弹瓦片,在它周围的所有瓦片上加上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():

Tags: 代码infordefcount炸弹瓦片append
1条回答
网友
1楼 · 发布于 2024-04-19 08:32:42

让我们把它分成几部分。你知道吗

  1. 给定一个矩阵、行索引和列索引,你如何找到它们的邻居?你知道吗
  2. 考虑到邻居,你怎么计算炸弹的数量?你知道吗
  3. 如何遍历矩阵的每一行索引和每一列索引?你知道吗

第二和第三,你已经知道怎么做了,因为你在现有的代码中也做了类似的事情。但第一个几乎很简单:

for neighbor_row in row-1, row, row+1:
    for neighbor_col in col-1, col, col+1:

这个琐碎的代码有两个问题:

  1. 它将(row, col)作为自己的邻居。你知道吗
  2. 它会在矩阵的边缘断裂。如果row是0,row-1是-1,这是合法的,但不是您想要的;如果row是7,row+1是8,这将引发异常。你知道吗

在本例中,您可以忽略第一个问题,如果(row, col)不是炸弹,它不会添加到计数中,如果是炸弹,我们不关心计数。你知道吗

第二个问题很棘手,但是我们可以通过使用range来解决它,而不是显式地列出这三个值,并使用maxmin强制范围的末端在边界内:

for neighbor_row in range(max(row-1, 0), min(row+1, len(mat)-1)):

现在,你只需要完成这个双循环,加上炸弹检查,计数和存储结果,然后把整个过程放到另一个双循环中,遍历矩阵中的每一行和每一列,你就完成了。你知道吗

您可能需要考虑将内容抽象出来—您可以将此循环编写为对itertools.product的单个调用,使用生成器表达式将计数编写为对sum的调用,然后整个函数只有4行,另外您还可以重用部分函数。但是先让简单的版本工作。你知道吗

相关问题 更多 >