-1

我在下面有这些函数,我将字母“b”放在矩阵内的某个位置。(我正在制作扫雷,这些“b”代表炸弹在矩阵中的位置)。我必须将“z”炸弹放入函数中,但放置炸弹的位置不能多次出现。我知道如何将它们放在函数中,但是我无法弄清楚它们是否在重复

from random import*

mat1 = []
mat2 = []
def makemat(x):
    for y in range(x):
        list1 = []
        list2 = []
        for z in range(x):
            list1.append(0)
            list2.append("-")
        mat1.append(list1)
        mat2.append(list2)
makemat(2)

def printmat(mat):
    for a in range(len(mat)):
        for b in range(len(mat)):
            print(str(mat[a][b]) + "\t",end="")  
        print("\t")

def addmines(z):
    for a in range(z):
        x = randrange(0,len(mat1))
        y = randrange(0,len(mat1))   
        mat1[y][x] = "b"            
addmines(4)                         

谢谢

4

2 回答 2

1

也许我不明白这个问题,但为什么不检查“b”是否已经存在呢?

def addmines(z):
for a in range(z):
    x = randrange(0,len(mat1))
    y = randrange(0,len(mat1))
    if mat1[y][x] == "b":
        addmines(1)
    else:
        mat1[y][x] = "b"
addmines(4)
于 2012-11-15T03:14:55.810 回答
0

您正在尝试做的是无需更换的样品。尝试使用random.sample

import random

...

def addmines(countMines):
    countRows = len(mat1)
    countCols = len(mat1[0])
    countCells = countRows * countCols

    indices = random.sample(range(countCells), countMines)

    rowColIndices = [(i // countRows, i % countRows) for i in indices]

    for rowIndex, colIndex in rowColIndices:
        mat1[rowIndex][colIndex] = 'b'
于 2012-11-15T03:30:04.090 回答