用python实现三维数组

用python实现三维数组,python,arrays,Python,Arrays,我正在尝试制造战列舰,我假设我错过了一些非常明显的东西,但我看不到。。。该计划是非常早,目前只是假设创建一个表,您可以编辑的内容。。。但无论如何,到目前为止。。。请发布更正,因为所选列的整个x轴都得到了输入 a_user = [' ',' ',' ',' ',' ',' ',' ',' '] b_user = a_user c_user = a_user d_user = a_user e_user = a_user f_user = a_user g_user = a_user h_user

我正在尝试制造战列舰,我假设我错过了一些非常明显的东西,但我看不到。。。该计划是非常早,目前只是假设创建一个表,您可以编辑的内容。。。但无论如何,到目前为止。。。请发布更正,因为所选列的整个x轴都得到了输入

a_user = [' ',' ',' ',' ',' ',' ',' ',' ']
b_user = a_user
c_user = a_user
d_user = a_user
e_user = a_user
f_user = a_user
g_user = a_user
h_user = a_user
y_arr = [a_user,b_user,c_user,d_user,e_user,f_user,g_user,h_user]
def draw_Table():
    print('    1   2   3   4   5   6   7   8')
    print('  +---+---+---+---+---+---+---+---+')
    print('1 |',a_user[0],'|',a_user[1],'|',a_user[2],'|',a_user[3],'|',a_user[4],'|',a_user[5],'|',a_user[6],'|',a_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('2 |',b_user[0],'|',b_user[1],'|',b_user[2],'|',b_user[3],'|',b_user[4],'|',b_user[5],'|',b_user[6],'|',b_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('3 |',c_user[0],'|',c_user[1],'|',c_user[2],'|',c_user[3],'|',c_user[4],'|',c_user[5],'|',c_user[6],'|',c_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('4 |',d_user[0],'|',d_user[1],'|',d_user[2],'|',d_user[3],'|',d_user[4],'|',d_user[5],'|',d_user[6],'|',d_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('5 |',e_user[0],'|',e_user[1],'|',e_user[2],'|',e_user[3],'|',e_user[4],'|',e_user[5],'|',e_user[6],'|',e_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('6 |',f_user[0],'|',f_user[1],'|',f_user[2],'|',f_user[3],'|',f_user[4],'|',f_user[5],'|',f_user[6],'|',f_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('7 |',g_user[0],'|',g_user[1],'|',g_user[2],'|',g_user[3],'|',g_user[4],'|',g_user[5],'|',g_user[6],'|',g_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
    print('8 |',h_user[0],'|',h_user[1],'|',h_user[2],'|',h_user[3],'|',h_user[4],'|',h_user[5],'|',h_user[6],'|',h_user[7],'|')
    print('  +---+---+---+---+---+---+---+---+')
while 1:
    draw_Table()
    x_axis = int(input('Enter a x coord\n')) - 1
    y_axis = int(input('Enter a y coord\n')) - 1
    y_arr[y_axis][x_axis] = 'o'
你不应该这样做

b_user = a_user
c_user = a_user
d_user = a_user
e_user = a_user
f_user = a_user
g_user = a_user
h_user = a_user
它不会复制这些列表的内容,而是复制对列表本身的引用。所以所有的*_用户都是对同一列表的引用。如果您在用户中更改项目,则每个用户的项目都会更改

你可以做的是

a_user = [' '] * 8
也许你也可以这样列出
用户

users = []
user[0] = [' '] * 8
user[1] = [' '] * 8
...
然后可以缩短为:

users = [[' '] * 8 for k in range(8)]

如果你喜欢给你的用户写信,你可以把它变成一本字典。

你正在用对同一个列表的多个引用来填充列表
y\u arr

任务:

b_user = a_user
创建
a_用户
的副本并称之为
b_用户
,它使名称
b_用户
引用的对象与名称
a_用户
引用的对象完全相同

您可以使用演示,其中相同的值表示相同的对象:

>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
53575512
>>> id(b)
53575512 # exactly the same object
相反,您需要创建单独的列表。最简单的解决方法是将每个变量作为列表的副本,例如:

b_user = a_user[:]
对于这个简单的例子,它给出了:

>>> b = a[:]
>>> id(a)
53575512 # still the same
>>> id(b)
53770480 # separate object
但是,这通常是通过一个非常整洁的

y_arr = [[" " for _ in range(8)] for _ in range(8)]
此外,您还可以使用和使打印更加整洁


在python中,列表是通过引用传递和分配的。@mniip与其他内容一样。:-)或者从另一个角度来看:每个变量都引用某个对象,并且对象永远不会在赋值时复制assignmentAssignments不会复制列表。请转告我。
for index, row in enumerate(y_arr, 1):
    print("{0} |{1}|".format(index, "|".join(row)))