我正在尝试制作一个5x5的网格,将播放器放置在一个随机的位置。
def board():
grid0 = []
grid1 = []
a = 0
b = 0
while a < 5:
grid0.append("0")
a += 1
while b < 5:
grid1.append(grid0)
b += 1
x = list(grid1)
x[0][0] = "x"
for row in grid1:
print(row)
我希望结果看起来像这样:
['X', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
但是我得到了:
['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']
答案 0 :(得分:0)
如果您希望将'0'
放在一个随机位置的'x'
的5x5网格中,则可以执行以下操作:
from random import randint
grid = [['0' for x in xrange(5)] for y in xrange(5)]
grid[randint(0,4)][randint(0,4)] = 'x'
答案 1 :(得分:0)
这是具有相同可变列表的多个引用的经典python gotchya。您要创建取消排队列表:
from pprint import pprint
x = []
for _ in range(5):
x.append(['0']*5)
x[0][0] = 'x'
pprint(x)
给出输出:
[['x', '0', '0', '0', '0'],
['0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0']]
答案 2 :(得分:0)
原因是构建网格的方式。您的列表“ x”列表是对“ grid0”的5个引用的列表。当通过调用x [0] [0] ='x'覆盖列表'x'的zeroeth元素的zeroeth元素时,您将覆盖'grid0'的zeroeth元素,后者代表'grid1'和因此在您的清单“ x”中。 您将需要找到另一种构建网格的方法,并研究如何对单个实例进行整理(例如,通过使用copy())
答案 3 :(得分:0)
代码的问题在于,您要将相同的grid0副本附加到grid1列表中。这意味着您对grid1 [0]中的grid0所做的任何更改都会影响您的grid0 [1:4](因为它们都是相同的grid0)。
您可以通过将grid0的副本附加到grid1来轻松解决此问题:
while b < 5:
grid1.append(grid0.copy())
b += 1