我正在尝试制作一个扫雷游戏,但我仍然坚持在空白字段中添加一个界面。 为什么是这样?我无法识别问题,因为应该这样做的代码有效!添加输入语句
时,答案会发生变化import string
def add_markers(grid,alphabet):
top = [' ']
for count in range(len(grid[0])):
top.append(alphabet[count])
grid.insert(0,top)
for row_num in range(len(grid)):
if row_num != 0:
grid[row_num].insert(0,row_num)
return grid
blank = [['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#'],['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#']]
user_grid = add_markers(blank, list(string.ascii_lowercase + string.ascii_uppercase))
print(user_grid)
输出正确的网格[[' ', 'a', 'b', 'c', 'd', 'e'], [1, '#', '#', '#', '#', '#'], [2, '#', '#', '#', '#', '#'], [3, '#', '#', '#', '#', '#'], [4, '#', '#', '#', '#', '#'], [5, '#', '#', '#', '#', '#']]
import random, string
def add_markers(grid,alphabet):
top = [' ']
for count in range(len(grid[0])):
top.append(alphabet[count])
grid.insert(0,top)
for row_num in range(len(grid)):
if row_num != 0:
grid[row_num].insert(0,row_num)
return grid
alphabet = list(string.ascii_lowercase + string.ascii_uppercase)
length = int(input('length of field > '))
height = int(input('height of field > '))
bombs = int(input('number of bombs > '))
blank = [length * ['#']] * height
user_grid = add_markers(blank, alphabet)
print(user_grid)
输出:
[[' ', 'a', 'b', 'c', 'd', 'e'], [5, 4, 3, 2, 1, '#', '#', '#', '#', '#'], [5, 4, 3, 2, 1, '#', '#', '#', '#', '#'], [5, 4, 3, 2, 1, '#', '#', '#', '#', '#'], [5, 4, 3, 2, 1, '#', '#', '#', '#', '#'], [5, 4, 3, 2, 1, '#', '#', '#', '#', '#']]
答案 0 :(得分:1)
问题是你构造空白的方式。按照您当前使用的方式进行操作,您实际上创建了对同一列表的多个引用。
这是一个例子,说明当你按照现在的方式构建它时会发生什么:
in: blank[0].append(1)
in: blank
out: [['#', '#', '#', '#', '#', 1], ['#', '#', '#', '#', '#', 1], ['#', '#', '#', '#', '#', 1], ['#', '#', '#', '#', '#', 1], ['#', '#', '#', '#', '#', 1]]
由于空白中包含的所有列表实际上只是对同一列表的引用,因此对它们中的任何一个进行更改都会影响它们。
这是一个简单的解决方案,用这个替换你的空白构造函数:
for i in range(length):
blank.append([])
for j in range(height):
blank[i].append('#')
这样,您实际上将构建独立列表。
示例行为,符合您的需求:
in: blank[0].append(1)
in: blank
out: [['#', '#', '#', '#', '#', 1], ['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#'], ['#', '#', '#', '#', '#']]