如何打印一个“";复杂的;尝试使用Python 3.6

如何打印一个“";复杂的;尝试使用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

谢谢你来这里

我试着用向量打印一个“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]
董事会将

[   |   | 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:去看看,绝对值得:)