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

Why isn't this ASCII art printing on multiple lines despite being a multiline string?

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

ascii_triangle ='''       /\
     /  \
    /    \
   /      \
  /        \
 /__________\ '''

然后我将其用作函数的参数,这样我就可以在函数中使用图片(以及其他一些 ASCII 艺术和其他参数)。该功能并不重要,但问题是当我尝试使用

打印它时
print(ascii_triangle)

在函数中,输出如下所示:

       /         /          /           /            /             /__________\ 

如何让它看起来像一个正三角形?

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

观察:

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

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

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

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

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

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

尝试在第一个示例中的反斜杠后添加一个 space,你会得到

SyntaxError: EOL while scanning string literal

表示 python 将需要字符串的多行引号。