如何打印一个“";复杂的;尝试使用Python 3.6
谢谢你来这里 我试着用向量打印一个“tic-tac-toe”板,类似这样的东西 如果我的向量是如何打印一个“";复杂的;尝试使用Python 3.6,python,arrays,string,Python,Arrays,String,谢谢你来这里 我试着用向量打印一个“tic-tac-toe”板,类似这样的东西 如果我的向量是 b = [0 0 1 0 2 0 0 1 0] b = [0 0 0 0 2 1 0 0 2] 董事会将 [ | | x ] [ | o | ] [ | x | ] [ | | ] [ | x | o ] [ | | x ] 另一个例子,如果我的向量是 b = [0 0 1 0 2 0 0 1 0] b = [0 0 0 0 2 1 0 0 2
b = [0 0 1 0 2 0 0 1 0]
b = [0 0 0 0 2 1 0 0 2]
董事会将
[ | | x ]
[ | o | ]
[ | x | ]
[ | | ]
[ | x | o ]
[ | | x ]
另一个例子,如果我的向量是
b = [0 0 1 0 2 0 0 1 0]
b = [0 0 0 0 2 1 0 0 2]
董事会将
[ | | x ]
[ | o | ]
[ | x | ]
[ | | ]
[ | x | o ]
[ | | x ]
这意味着如果b[i]=0,位置i的板将是一个空格,如果b[i]=1,位置i的板将是“x”,如果b[i]=2,位置i的板将是“o”
“基本”板是
我试过使用这个代码
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)将数组拆分为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)
我想这就是你想要的
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
字符串必须替换为array您的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
函数的一些功能来处理输出的某些部分(例如换行符。您不需要将所有组件字符串串联起来以构建单个输出字符串,而是将单独的片段作为单独的参数传递给print
,并在末尾添加sep
关键字参数:
print(a[1] + "|" + a[2] + "|" + a[3],
"---+---+---",
a[4] + "|" + a[5] + "|" + a[6],
"---+---+---",
a[7] + "|" + a[8] + "|" + a[9],
sep="\n")
请注意,在这两个示例中,我固定了水平线以使用两个
+
而不是一个+
和一个我们可以使用字典将符号映射到值,然后使用numpy
将列表转换为nxn矩阵,如下所示
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 | ]
下面是一个使用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| ]
这里有另一种方法:
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('\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)))
“tring”是什么意思?矢量是什么?哇,这个more\u itertools
软件包!肯定会去看看,一直想要更多的itertools函数:P因此,值得投票!@abccd:去看看,绝对值得:)