• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Делаем цветной появляющийся текст бегущей строкой

Всем привет!

В один прекрасный вечер мне загорелось сделать большой цветной появляющийся текст бегущей строкой. Нырнул в интернет посмотреть примеры и....
Оказалось, что примеров не оказалось :ROFLMAO:

Немного пошевелил мозгами и состряпал прямо сейчас такой скриптик. Строка побежала....

exp1.png

Python:
import time
import sys
from colorama import init
init()


class Bcolors:
    GN = '\033[32m'  # green


for i in ['.########', '.##.....##', '.########.', '.##.......', '..#######.', '.########.', '.########', '.########.']:
    print(Bcolors.GN + i, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for x in ['.##......', '..##...##.', '.##.....##', '.##.......', '.##.....##', '.##.....##', '.##......', '.##.....##']:
    print(x, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in ['.##......', '...##.##..', '.##.....##', '.##.......', '.##.....##', '.##.....##', '.##......', '.##.....##']:
    print(i, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in ['.######..', '....###...', '.########.', '.##.......', '.##.....##', '.########.', '.######..', '.########.']:
    print(i, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in ['.##......', '...##.##..', '.##.......', '.##.......', '.##.....##', '.##...##..', '.##......', '.##...##..']:
    print(i, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for x in ['.##......', '..##...##.', '.##.......', '.##.......', '.##.....##', '.##....##.', '.##......', '.##....##.']:
    print(x, end='')
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in ['.########', '.##.....##', '.##......', '..########.', '..#######.', '.##.....##', '.########', '.##.....##']:
    print(i, end='')
    sys.stdout.flush()
    time.sleep(0.2)

input()

В процессе выполнения кода, строки появляются частями, вызывая эффект печати в реальном времени. На скриншоте конечно этого не увидите, так что копируйте код и запускайте.
У кого не стоит модуль colorama, предварительно установите pip install colorama

И вот она прибежала до конца :)

exp.png


P.S. Добавлю видос для наглядности, звук тоже есть, если его включить.

 
Последнее редактирование:

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Форум же для программистов, все тут про питон, руби, C# , а про css не хто не говорит

Для вэб есть ветка а форум здесь не для программистов, а для всех. Кто-то кодить умеет, кто-то нет, здесь это не важно, хотя это очень нужное умение.

А вот мою замануху с видео никто так и не заметил :)
Ролик выложен от Антонио, на первых секундах я оставил не отрезанным имя пользователя Dima. Теперь любители подудосить себе мозги могут применить дедуктивный метод Холмса и отгадать как меня зовут - Антонио? Антон? Дима? Или никто из них :LOL:
 

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Добавил вертикальный вариант появляющейся надписи.

cod.png



Python:
import time
import sys
from colorama import init
init()


class Bcolors:
    GN = '\033[32m'  # green


for i in ['  .o88b. ', ' d8   Y8', ' 8P     ', ' 8b     ', ' Y8   d8', '  `Y88P ']:
    print(Bcolors.GN + i)
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for x in ['  .d88b. ',' .8P  Y8. ', ' 88    88', ' 88    88', ' `8b  d8 ', '  `Y88P  ' ]:
    print(x)
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in [' d8888b.', ' 88  `8D', ' 88  `8D', ' 88   88', ' 88  .8D', ' Y8888D' ]:
    print(i)
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in [' d88888b', ' 88     ', ' 88ooooo', ' 88     ', ' 88.    ', ' Y88888P']:
    print(i)
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for i in [' d8888b.', ' 88  `8D', ' 88oooY ', ' 88   b.', ' 88   8D', ' Y8888P']:
    print(i)
    sys.stdout.flush()
    time.sleep(0.2)
print('\t')
for x in [' db    db', ' `8b  d8 ', '  `8bd8  ', '    88   ', '    88   ', '    YP    ']:
    print(x)
    sys.stdout.flush()
    time.sleep(0.2)

input()
 

Rand0m_M

Green Team
16.04.2018
33
28
BIT
0
Немного укоротил код этой бегущей строки, вот что получилось:
Python:
import time
import sys
from colorama import init
init()


class Bcolors:
    GN = '\033[32m'  # green


tupl = (('  .o88b. ', ' d8   Y8', ' 8P     ', ' 8b     ', ' Y8   d8', '  `Y88P\n'),
        ('  .d88b. ',' .8P  Y8. ', ' 88    88', ' 88    88', ' `8b  d8 ', '  `Y88P\n'),
        (' d8888b.', ' 88  `8D', ' 88  `8D', ' 88   88', ' 88  .8D', ' Y8888D\n'),
        (' d88888b', ' 88     ', ' 88ooooo', ' 88     ', ' 88.    ', ' Y88888P\n'),
        (' d8888b.', ' 88  `8D', ' 88oooY ', ' 88   b.', ' 88   8D', ' Y8888P\n'),
        (' db    db', ' `8b  d8 ', '  `8bd8  ', '    88   ', '    88   ', '    YP    \n'))


for i in tupl:
    for x in i:
        print(Bcolors.GN+x)
        sys.stdout.flush()
        time.sleep(0.2)

        
input()

Кстати, sys.stdout.flush() в моем варианте можно убрать, и без него работает как надо. Использовал кортеж вместо списка, во первых этот масив добавлятся\изменятся динамически не будет, во вторых кортеж занимает меньше места в памяти и соответственно быстрее работает, такая себе оптимизация маленькая :)
 
  • Нравится
Реакции: ALF и explorer

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Сделал ещё вариант вертикальной строки, когда буквы выводятся не построчно, а целиком

Python:
import time
import sys
from colorama import init
init()

class Bcolors:
    GN = '\033[32m'  # green
    
for i in ['''   

..######.
.##....##
.##......
.##......
.##......
.##....##
..######.
 
''',
'''
 
..#######.
.##.....##
.##.....##
.##.....##
.##.....##
.##.....##
..#######.

''',
'''
 
.########.
.##.....##
.##.....##
.##.....##
.##.....##
.##.....##
.########.
 
''',
'''
 
.########
.##......
.##......
.######..
.##......
.##......
.########


''',
'''
 
.########.
.##.....##
.##.....##
.########.
.##.....##
.##.....##
.########.

''',
'''
 
.##....##.
..##..##..
...####...
....##....
....##....
....##....
....##....

''',]:
 
    print(Bcolors.GN + i, end='')
    sys.stdout.flush()
    time.sleep(0.5)
input()
 
  • Нравится
Реакции: Сергей Попов

Rand0m_M

Green Team
16.04.2018
33
28
BIT
0
Разобрался зачем нужен sys.stdout.flush(), для вывода печати в консоль реалтайм, то есть, в зависимости от настроек буферизации, путон может отпечатать вывод в буфер со всеми слипами а потом при завершении скрипта выдать одномоментно на экран. А с sys.stdout.flush() всё будет выводится на экран консоли по мере выполнения скрипта, то есть со всеми слипами и т.д. Это поведение буферизации наверное как то в самом python где то настраиваится, у меня в линуксе что с флуш, что без флуш в консоль именно в реалтайме печатается, но думаю полезно таки указывать, мало ли где как буферизация будет в питоне накручена. Поправте если где то ошибаюсь.
Кстати, в python3 можно использовать flush и в самой функции print, вот таким образом :
Python:
print(Bcolors.GN + i, end='',flush=True)
В таком случае не нужно мипортировать лишний модуль sys, да и код короче на две строки без потери функциональности.

ПыСы: Но разницу в поведении скрипта я так и не увидел ..
 

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
sys.stdout.flush(), для вывода печати в консоль реалтайм
На самом деле, есть и другие интересности, например попробуйте запустить этот код :)

Python:
import sys
bb = '123'
str(sys.stdout.write(bb))

Вот ещё чёрно-белый вариант, без использования print (только как разделитель используется, но не для вывода). Здесь строки будут появляться целиком )
Python:
import time
import sys


for i in ['.########', '.##.....##', '.########.', '.##.......', '..#######.', '.########.', '.########', '.########.']:

    str(sys.stdout.write(i))
    time.sleep(0.2)
print('\t')
for i in ['.##......', '..##...##.', '.##.....##', '.##.......', '.##.....##', '.##.....##', '.##......', '.##.....##']:

    str(sys.stdout.write(i))
    time.sleep(0.2)
print('\t')
for i in ['.##......', '...##.##..', '.##.....##', '.##.......', '.##.....##', '.##.....##', '.##......', '.##.....##']:

    str(sys.stdout.write(i))
    time.sleep(0.2)
print('\t')
for i in ['.######..', '....###...', '.########.', '.##.......', '.##.....##', '.########.', '.######..', '.########.']:

    str(sys.stdout.write(i))
    time.sleep(0.2)
print('\t')
for i in ['.##......', '...##.##..', '.##.......', '.##.......', '.##.....##', '.##...##..', '.##......', '.##...##..']:

    str(sys.stdout.write(i))
    time.sleep(0.2)
print('\t')
for x in ['.##......', '..##...##.', '.##.......', '.##.......', '.##.....##', '.##....##.', '.##......', '.##....##.']:

    str(sys.stdout.write(x))
    time.sleep(0.2)
print('\t')
for i in ['.########', '.##.....##', '.##......', '..########.', '..#######.', '.##.....##', '.########', '.##.....##']:

    str(sys.stdout.write(i))
    time.sleep(0.2)

input()
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!