为什么这个多行字符串的ASCII艺术没有打印在多行上?

3

我创建了一个常量,其中包含一些三角形的ASCII艺术,就像这样:

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

然后我将这个作为函数的参数使用,这样我就可以在函数中使用这张图片(以及其他ASCII艺术和参数)。函数并不重要,但问题是当我尝试使用print打印它时

print(ascii_triangle)

在函数内部,输出如下:

       /         /          /           /            /             /__________\ 

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

1
请看如何提供一个 [mcve]。 - cs95
1
你需要使用原始字符串(r''')或者用另一个反斜杠来转义 \ -> \ - Antti Haapala -- Слава Україні
1个回答

5
你发布的ASCII艺术在每个换行符之前都有一个尾随反斜杠。如果这个反斜杠后面除了换行符之外没有任何东西,它将被视为行继续字符
观察:
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将需要多行引用字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接