2014-09-05 65 views
0

我正在Python 3.4.1中制作一个Tic Tac Toe程序。 我的代码如下:(Python 3.x)如何在打印函数中的第一个变量之前添加一个空格?

def boardDraw(): 
    board = 0,0,0,\ 
      0,0,0,\ 
      0,0,0 
    print(board[0] , "|" , board[1] , "|" , board[2], \ 
    "\n----------\n" , \ 
    board[3] , "|" , board[4] , "|" , board[5], \ 
    "\n----------\n" , \ 
    board[6] , "|" , board[7] , "|" , board[8]) 

boardDraw() 

输出:

0 | 0 | 0 
---------- 
0 | 0 | 0 
---------- 
0 | 0 | 0 

所需的输出:

0 | 0 | 0 
---------- 
0 | 0 | 0 
---------- 
0 | 0 | 0 

是拥有我希望的输出的唯一方法是将以下内容:

print(end =“”)

在董事会和我目前的印刷声明之间?如果可能的话,我希望在一个印刷品中使用它。

+0

几分钟阅读[格式函数](https://docs.python.org/3.3/library/functions.html#format)将帮助很多 – wnnmaw 2014-09-05 20:38:40

+0

从[文档](https:/ /docs.python.org/3/library/functions.html#print):“所有非关键字参数都会转换为像str()那样的字符串并写入流中,并由sep分隔,然后以end结尾。”尝试[str.format()](https://docs.python.org/2/library/string.html#format-string-syntax)。 – Celeo 2014-09-05 20:39:50

+4

作弊:'print(“,board [0],..)'。但如果不依靠此分隔符自动插入,会更好(稍后更容易处理)。 – user2864740 2014-09-05 20:42:22

回答

5

为什么不使用.format

print ('{0:^3}|{1:^3}|{2:^3}'.format(*board)) 

在这里,说明符:^3手段,使宽度为3的字段并且如果可能的话将文本居中。

3

user2864740提供的快速和肮脏的方法将解决问题。这是我第一个想到的,当我看到的代码,因为它是:

print(board[0] , "|" , board[1] , "|" , board[2], \ 

到:

print("", board[0] , "|" , board[1] , "|" , board[2], \ 

我真的不建议格式化它变得非常难以阅读的这种方式。这可以更容易阅读和维护。您可以使用Python的格式,然后使用%作为参数提供数据。

所以我使用类似:

boardsep = "-" * 10 
boardline = "%s | %s | %s\n%s" 
print(boardline % (board[0], board[1], board[2], boardsep)) 
print(boardline % (board[3], board[4], board[5], boardsep)) 
print(boardline % (board[6], board[7], board[8], boardsep)) 

boardsep是采取什么是串并复制它多次(在这种情况下的10倍)只是一个方便的方法。由于您打印boardline的方式与每行相同,我将它分配给一个变量,以便可以重复使用。您可以阅读这些print formatting docs以更好地了解参数和格式字符串如何协同工作。

mgilson也提出了一个很好的解决方案(我upvoted它),并让我再次看看OP的问题。对于Python3来说,你可以做些事情,例如字符串,切片和扩展的新格式方法。

boardsep = '-' * 10 
boardline = '{0:^3}|{1:^3}|{2:^3}\n{sep}'' 
print (boardline.format(*board[0:3], sep=boardsep)) 
print (boardline.format(*board[3:6], sep=boardsep)) 
print (boardline.format(*board[6:9], sep=boardsep)) 

但是,你可以进一步,并将其减少到一个复杂的线。如果你的基础知识的透彻理解,上面一个可以试试这个:

print ((('{:^3}|{:^3}|{:^3}\n'+('-'*10)+'\n') * 3).format(*board)) 

如果你要打印出生成板看起来会像这样展开的格式说明:

{:^3} | {:^ 3} | {:^ 3} \ n ---------- \ N {:^ 3} | {:^ 3} | {:^ 3} \ N-- -------- \ n {:^ 3} | {:^ 3} \ n ---------- \ n

由于OP没有注意到输出中的问题,我将提供最后一次编辑代码,这些代码更具动态性,可以放入扩展的f中联合来生成电路板。

linesepchar = '-' 
colsepchar = '|' 
numrows = 3 
numcols = 3 
fieldwidth = 3 
linesep = '\n{linesepchar:{linesepchar}^{linewidth}}\n' 
fieldspec = '{:^{fieldwidth}}' 
lineformat = (fieldspec+'{colsepchar}')*(numcols-1)+fieldspec 
boardstr = (((lineformat+linesep)*(numrows-1)+lineformat).format(\ 
        *board,linesepchar=linesepchar, colsepchar=colsepchar, \ 
        fieldwidth=fieldwidth, linewidth=((fieldwidth+1)*numcols-1))) 
+0

只有你的结尾选择有问题,它会导致第一行有两个空格,并有一组额外的' - '。感谢您的回答,我会做大量的格式化工作。 – xdflames 2014-09-05 23:36:26

+1

是的,你很正确。它确实增加了一条额外的线。我将停止编辑,因为它提供了一个大概的想法。然而,既然您指出了这种差异,我确实有一些我之前写过的代码几乎产生了几乎相似(但不完全)的输出。在某种程度上,我认为这种差异是一个小小的代码改进。我将添加该代码作为我最后的编辑。它也让你指定行和列,字段和列说明符等。 – 2014-09-05 23:58:47

相关问题