我必须创建一个为扫雷创建游戏板的功能(我对编码也很新)。
我打算让董事会最初从覆盖的每个空间开始,并且我的免费,由字符串"C "
表示。
然后我需要将地雷分配到我的2D列表中的随机空间,将"C*"
的实例替换为# create board function
def createBoard (rows, cols, mines):
board = []
#set the range to the number of rows and columns provided +1
#for every row, create a row and a column
for r in range (0,rows+1):
board.append([])
for c in range (0,cols+1):
board[r].append("C ")
#set # of mines to 0
num_mines=0
while num_mines < mines :
x = random.choice(board)
y = random.choice(x)
if y == "C ":
x[y]= "C*"
num_mines = num_mines+1
SML
我的问题是我不知道如何实际替换字符串。
答案 0 :(得分:0)
当您选择随机项时,最终会引用它。由于您正在获取字符串,因此您可以引用字符串。当你想改变它时......你不能这样做,因为字符串是不可变的。不是获取对字符串的引用,而是在list
中获取对其位置的引用。然后,您可以替换该元素。
x = random.choice(board)
y = random.randint(0, len(x)-1)
if x[y] == "C ":
x[y] = "C*"
不使用random.choice
,而是使用random.randint
在两个参数之间选择一个随机整数(包括,所以我们必须从该子列表的长度中减去1)。它被用作该子列表的索引,以便我们可以更改相应的元素。
答案 1 :(得分:0)
首先注意你的电路板有一个额外的列和行。 (只需使用range(rows)
和range(cols)
)
然后随机选择&#39;坐标&#39;:
x = random.randrange(rows)
y = random.randrange(cols)
然后很自然:
if board[x][y] == "C ":
board[x][y] = "C*"