谢谢你来到这里。
我正在尝试使用矢量打印“tic - tac - toe”电路板,就像这样
如果我的载体是
b = [0 0 1 0 2 0 0 1 0]
董事会将
[ | | x ]
[ | o | ]
[ | x | ]
另一个例子,如果我的载体是
b = [0 0 0 0 2 1 0 0 2]
董事会将
[ | | ]
[ | x | o ]
[ | | x ]
这意味着如果b [i] = 0,则位置i中的板将是空格,如果b [i] = 1,则位置i中的板将是“x”并且如果b [i] = 2,位置i的电路板将为“o”。
“基础”板是
[ 1 | 2 | 3 ]
[ 4 | 5 | 6 ]
[ 7 | 8 | 9 ]
我尝试过这段代码
def printboard(board):
a = " "
for i in range(0,8):
if board[i] == 0:
a = a + " "
elif board[i] == 1:
a = a + "x"
elif board[i] == 2:
a = a + "o"
print( a[1] + "|" + a[2] + "|" + a[3]
%"---+---|---"
%a[4] + "|" + a[5] + "|" + a[6]
%"---+---|---"
%a[7] + "|" + a[8] + "|" + a[9])
return 0
board=np.array([0 ,0 ,1 ,0 ,2 ,0 ,0 ,1 ,0])
printboard(board)
但它不起作用。
我认为我的问题在于“打印”,我不知道该怎么做,并且需要用“|”,“ - ”和“+”分隔的板的元素是必要的。就像我试过的那样。
我真的希望有人可以帮助我。非常感谢你(y)
答案 0 :(得分:1)
我想这就是你想要的
def printboard(board):
a = []
for i in range(0,9):
if board[i] == 0:
a = a + [" "]
elif board[i] == 1:
a = a + [" x "]
elif board[i] == 2:
a = a + [" o "]
print( a[0] + '|' + a[1] + '|' + a[2]
+'\n---|---|---'
+'\n'+a[3] + "|" + a[4] + '|' + a[5]
+"\n---|---|---"
+'\n'+a[6] + '|' + a[7] + '|' + a[8])
return 0
board=np.array([0 ,0 ,1 ,0 ,2 ,0 ,0 ,1 ,0])
printboard(board)
你错过了每一行的换行符。此外,a
字符串必须替换为数组
答案 1 :(得分:1)
这是另一种方法:
import more_itertools
def print_board(my_list):
for x in more_itertools.sliced([' ' if x == 0 else 'x' if x == 1 else 'o' for x in my_list], 3):
print('[ ' + ' | '.join(x) + ' ]')
>>> print_board([0,0,1,0,2,0,0,1,0])
[ | | x ]
[ | o | ]
[ | x | ]
@ 编辑:你喜欢更长的线路吗?当然,没问题:
print('\n'.join('[ ' + ' | '.join(x) + ' ]' for x in __import__('more_itertools').sliced([' ' if x == 0 else 'x' if x == 1 else 'o' for x in my_list], 3)))
答案 2 :(得分:0)
将数组拆分为3并通过将0,1和2替换为各自的字符来构造每个子数组的字符串:
def print_board(lst):
for i in range(0, len(lst), 3):
print('[ ' + ' | '.join([(' ', 'o', 'x')[x] for x in lst[i:i+3]]) + ' ]')
b = [0, 0, 0, 0, 2, 1, 0, 0, 2]
print_board(b)
[ | | ]
[ | x | o ]
[ | | x ]
答案 3 :(得分:0)
你的print
电话确实相当混乱。主要问题似乎是您使用%
在某些时间和其他时间随机使用+
。只有+
可用于连接字符串。 %
运算符可以与字符串一起使用,但它会执行不同类型的字符串格式化(这可能是此问题的一个选项,但不是到目前为止设置它的方式)。您还没有在打印的字符串中包含任何换行符,因此您可能希望添加这些换行符。
我认为如果您将此print
电话替换为此电话,则可以使用:
print(a[1] + "|" + a[2] + "|" + a[3]
+ "\n---+---+---\n"
+ a[4] + "|" + a[5] + "|" + a[6]
+ "\n---+---+---\n"
+ a[7] + "|" + a[8] + "|" + a[9])
您还可以使用print
函数的某些功能来处理输出的某些部分(例如换行符。而不是连接所有组件字符串以构建单个输出字符串,'' d将单独的部分作为单独的参数传递给print
,并在最后添加sep
关键字参数:
print(a[1] + "|" + a[2] + "|" + a[3],
"---+---+---",
a[4] + "|" + a[5] + "|" + a[6],
"---+---+---",
a[7] + "|" + a[8] + "|" + a[9],
sep="\n")
请注意,在这两个示例中,我修复了水平线以使用两个+
而不是一个+
和一个|
。
答案 4 :(得分:0)
我们可以使用dictionary
到map
符号来表示值,然后使用numpy
将列表转换为N x N matrix
,如下所示。
import numpy as np
keymap = {0 : '|' , 1 : 'x', 2: 'o'}
b = [0, 0, 1, 0, 2, 0, 0, 1, 0]
a = np.array([keymap[x] for x in b]).reshape((3,3,))
>>> for i in a:
print('[ ' + ' '.join(i) + ' ]')
[ | | x ]
[ | o | ]
[ | x | ]
答案 5 :(得分:0)
以下是使用zip和join的交互式演示。
>>> b = '0 0 1 0 2 0 0 1 0'.split(' ')
>>> c = [" xo"[int(e)] for e in b]
>>> d = ['[','|','|',']\n[','|','|',']\n[','|','|',']']
>>> print("".join(["".join(e) for e in zip(d, c+['\n'])]))
[ | |x]
[ |o| ]
[ |x| ]