我在为我的战舰游戏打印这个2d阵列时遇到问题。
class Battleship:
def __init__(self):
self.__init__()
def board(self, locate):
locate = []
for i in range(10):
locate.append([])
for j in range(10):
locate[i].append(0)
for i in range(10):
for j in range(10):
locate[i][j] = '%s,%s'%(i,j)
print(locate)
我在这里找到了如何初始化数组:如何在Python中初始化2D数组?在这里,我找到了在2d数组上迭代的代码示例,但它对我不起作用:在二维python列表上迭代
你能帮我一下吗?
您的字符串格式错误%s
用于字符串,i
和j
是整数,因此使用%d
所以使用:
locate[i][j]='%d%d'%(i,j)
此外,要以矩阵格式打印,完整的代码将是:
for i in range(10):
s=''
for j in range(10):
locate[i][j] = '%d,%d'%(i,j)
s+=locate[i][j]+' '
print s
for i in range(10):
for j in range(10):
print(locate[i][j])`
这应该会让它发挥作用。
您想如何打印它?请提供更多关于输出格式的信息。
假设您想要格式,即xOy坐标(x,y):
在这个for循环中:
for i in range(10):
locate.append([])
for j in range(10):
locate[i].append(0)
您的代码可能会因为以下行而失败:
locate[i].append(0)
这里的问题是,你的定位变量是一个2D数组,所以你可能想尝试这样的方法:
locate[i][j].append(0)
否则,如果我没有弄错,你将不得不附加一个完整的列表
此外,您的最后一条语句"print(locate)"应该在for循环之外,以便只打印矩阵一次
以下是我为生成乘法板而编写的一些代码,目的是演示如何打印未知大小的二维数组
l = [] # empty list
a,b = 10,10 # size of board aXb
for i in range(1,a+1): # generate board
temp = []
for j in range(1,b+1):
temp.append(i*j)
l.append(temp)
for i in l: # print the board
print i
输出是
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
[4, 8, 12, 16, 20, 24, 28, 32, 36, 40]
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
[6, 12, 18, 24, 30, 36, 42, 48, 54, 60]
[7, 14, 21, 28, 35, 42, 49, 56, 63, 70]
[8, 16, 24, 32, 40, 48, 56, 64, 72, 80]
[9, 18, 27, 36, 45, 54, 63, 72, 81, 90]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
这里有一种不同的打印的方法
for i in l: # print the board
for j in i:
print j,
print
输出
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
首先,让我们清理2D列表的创建:
locate = [[str(i)+","+str(j) for j in range(10)] for i in range(10)]
然后,迭代数组并打印每种情况下存储的值:
for locate_i in locate:
for locate_i_j in locate_i:
print locate_i_j
说明:当您在列表中使用a表示X时,X将具有列表中每个元素的值。因此,我们的locate_i
是给定i索引的每个子列表。当我们在这个列表上循环时,我们得到内容"%s,%s"%(i,j)
您有多种形式的打印
使用numpy
import numpy as np
print(np.matrix(matrix))
使用pprint
import pprint
pprint.pprint(matrix)
这是我用来很好地打印列表的最简单方法。
for row in board:
print(' '.join(row))