Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Как продублировать ASCII изображение несколько раз в один ряд?

#python #python_3x


n = int(input())
peng =( \
      """
   _~_    
  (o o)   
 /  V  \  
/(  _  )\ 
  ^^ ^^

      """)

if n == 1:
    print(str(peng))
elif n == 2:
    print(peng*2)
elif n == 3:
    print(peng*3)
elif n == 4:
    print(peng * 4)
elif n == 5:
    print(peng*5)
elif n == 6:
    print(peng * 6)
elif n == 7:
    print(peng * 7)
elif n == 8:
    print(peng * 8)
elif n == 9:
    print(peng * 9)


Как сделать так, чтобы картинки выводились в одну строку, а не переносились? И да,
я в курсе, что тоже самое можно написать лучше через for_ in.
    


Ответы

Ответ 1



Алгоритм такой: разбиваем "картинку" на отдельные строки, дублируем каждую строку необходимое количество раз, потом обратно собираем строки в целую картинку. peng =( r""" _~_ (o o) / V \ /( _ )\ ^^ ^^ """) def mul_image(img, n): return '\n'.join(line * n for line in img.splitlines()) print(mul_image(peng, 3)) Вывод: _~_ _~_ _~_ (o o) (o o) (o o) / V \ / V \ / V \ /( _ )\ /( _ )\ /( _ )\ ^^ ^^ ^^ ^^ ^^ ^^ Чтобы все вывелось красиво, все строки картинки (где есть печатные символы) должны быть одинаковой длины (т.е. пробелы в конце строк имеют значение). В картинке в вопросе нет дополнительных пробелов после "лапок", и если выводить через функцию выше, то получится вот что: _~_ _~_ _~_ (o o) (o o) (o o) / V \ / V \ / V \ /( _ )\ /( _ )\ /( _ )\ ^^ ^^ ^^ ^^ ^^ ^^ В принципе, функцию можно доработать так, чтобы все строки добивались пробелами до длины самой длинной из строк, тогда о конечных пробелах можно будет не заботиться: def mul_image(img, n): lines = img.splitlines() max_len = max(len(line) for line in lines) return '\n'.join(line.ljust(max_len, ' ') * n for line in lines)

Ответ 2



Можно воспользоваться регулярными выражениями (RegEx): In [24]: import re In [25]: n = 5 In [26]: print(re.sub(r'([^\n]*)(\n)', ''.join([r'\1']*n) + r'\2', peng)) Результат: _~_ _~_ _~_ _~_ _~_ (o o) (o o) (o o) (o o) (o o) / V \ / V \ / V \ / V \ / V \ /( _ )\ /( _ )\ /( _ )\ /( _ )\ /( _ )\ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^

Комментариев нет:

Отправить комментарий