Почему эта ASCII-печать не выполняется в несколько строк, несмотря на то, что она многострочная?

Я создал константу, которая содержит искусство треугольника ASCII, например:

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

Затем я использую это в качестве аргумента для функции, поэтому я могу использовать изображение внутри функции (наряду с некоторыми другими ASCII-артами и другими аргументами). Функция не важна, но проблема в том, что когда я пытаюсь распечатать ее, используя

print(ascii_triangle)

внутри функции вывод выглядит так:

       /         /          /           /            /             /__________\ 

Как я могу сделать так, чтобы он выглядел как правильный треугольник?

1 ответ

Решение

Отправленный вами ascii-art имеет косую черту перед каждой новой строкой. Эта обратная косая черта, если за ней не следует ничего, кроме новой строки, рассматривается как символ продолжения строки.

Заметим:

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 потребуется многострочная кавычка для строки.

Другие вопросы по тегам