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

C. *_*suo 3 python ascii-art python-3.x

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

ascii_triangle ='''       /\
     /  \
    /    \
   /      \
  /        \
 /__________\ '''
Run Code Online (Sandbox Code Playgroud)

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

print(ascii_triangle)
Run Code Online (Sandbox Code Playgroud)

在函数内,输出如下:

       /         /          /           /            /             /__________\ 
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它看起来像一个合适的三角形?

cs9*_*s95 5

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

注意:

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

In [119]: x
Out[119]: 'foo bar baz'
Run Code Online (Sandbox Code Playgroud)

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

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

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

In [124]: print(ascii_triangle)
      /\ 
     /  \ 
    /    \ 
   /      \ 
  /        \ 
 /__________\ 
Run Code Online (Sandbox Code Playgroud)

尝试在第一个示例中的反斜杠后添加一个空格,然后就可以了

SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)

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