Почему это изображение ASCII не печатается в несколько строк, несмотря на то, что это многострочная строка?

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

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

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

print(ascii_triangle)

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

       /         /          /           /            /             /__________\ 

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


person C. R. Yasuo    schedule 16.07.2017    source источник
comment
Посмотрите, как предоставить минимально воспроизводимый пример.   -  person cs95    schedule 16.07.2017
comment
Вам нужно а) использовать необработанные строки (r''') или б) экранировать \ с другим \ -› \\   -  person Antti Haapala    schedule 16.07.2017


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

person cs95    schedule 16.07.2017