【问题标题】:How to print a "complex" tring on Python 3.6如何在 Python 3.6 上打印“复杂”字符串
【发布时间】:2017-10-03 04:53:44
【问题描述】:

感谢您来到这里。

我正在尝试使用类似这样的矢量打印“井字游戏”板

如果我的向量是

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)

【问题讨论】:

  • “tring”是什么意思?
  • 什么是向量?

标签: python arrays string


【解决方案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 字符串必须替换为数组

【讨论】:

    【解决方案2】:

    这是另一种方法:

    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)))
    

    【讨论】:

    • 哇,more_itertools 包!肯定会检查一下,一直想要更多的 itertools 功能:P 为此,值得一票!
    • @abccd:看看,绝对值得:)
    【解决方案3】:

    将数组拆分为 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 ]
    

    【讨论】:

      【解决方案4】:

      您的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")
      

      请注意,在这两个示例中,我将水平线固定为使用两个+s,而不是一个+ 和一个|

      【讨论】:

        【解决方案5】:

        这是一个使用 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| ]
        

        Try it online!

        【讨论】:

          【解决方案6】:

          我们可以使用dictionarymap 符号到值,然后使用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  | ]
          

          【讨论】:

            猜你喜欢
            • 2012-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-09
            • 2011-10-17
            • 2018-06-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多