尽管是多行字符串,为什么这条ASCII艺术打印不是多行?

时间:2017-07-16 11:13:52

标签: python python-3.x ascii-art

我创建了一个常量,其中包含一些三角形的ASCII艺术,如下所示:

ascii_triangle ='''       /\
     /  \
    /    \
   /      \
  /        \
 /__________\ '''
然后我用它作为函数的参数,所以我可以在函数中使用图片(以及其他一些ASCII艺术和其他参数)。该功能并不重要,但问题是当我尝试使用

进行打印时
print(ascii_triangle)

在函数中,输出如下:

       /         /          /           /            /             /__________\ 

如何让它看起来像一个合适的三角形?

1 个答案:

答案 0 :(得分:5)

您发布的ascii-art在每个换行符之前都有一个反斜杠 。如果除了换行符之外没有任何内容后面的反斜杠被视为line continuation character

观察:

In [118]: x = 'foo \
     ...: bar \
     ...: baz'

In [119]: x
Out[119]: 'foo bar baz'

在上面的示例中,在尾部反斜杠之后没有,因此python认为它是一个没有任何换行符的单个字符串。即使您有字符串的多行引用,也会给出相同的处理。

您需要在反斜杠后添加空格,并使您的字符串成为原始文字。

In [123]: ascii_triangle =r'''      /\ 
     ...:      /  \ 
     ...:     /    \ 
     ...:    /      \ 
     ...:   /        \ 
     ...:  /__________\ '''

In [124]: print(ascii_triangle)
      /\ 
     /  \ 
    /    \ 
   /      \ 
  /        \ 
 /__________\ 

尝试在第一个示例中的反斜杠后面添加一个空格,然后你就得到了

SyntaxError: EOL while scanning string literal

指示python将需要字符串的多行引用。