Этот вопрос закрыт для ответов, так как повторяет вопрос [Python] Как сделать бегущую строку с удалением?
@FlakeSunrise

[Python] Как сделать передвижение строки?

Приветствую, необходимо улучшить код, а именно сделать так чтобы строка которая будет задана двигалась вправо( как в бегущей строке), а в конце с правой стороны символы медленно по одному исчезли.
import time

stroka = input("")

for slovo in stroka:
    print(slovo,end="  ", flush=True)
    time.sleep(1) # Время в мс
  • Вопрос задан
  • 2793 просмотра
Решения вопроса 1
@o5a
Не совсем понятно, как предполагается двигать вправо, обычно бегущая строка двигается влево. Но при желании можешь изменить отображение, если действительно нужно в обратную сторону.

import time

stroka = input("")

num_chars = 5 # размер окна символов

for i in range(len(stroka)-num_chars+1):
    print(stroka[i:i+num_chars],end="\r", flush=True)
    time.sleep(1) # Время в мс
Ответ написан
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Могу предложить для ясности вот такое решение:
import sys 
from time import sleep 

def cut_frame(s: str, start_pos: int = 0, frame_size: int = None) -> str: 
    frame_size = frame_size or len(s)
    left_space = ' ' * min(start_pos, frame_size) 
    if start_pos < 0: 
        s = s[-start_pos:] 
    return f'{(left_space + s)[:frame_size]:{frame_size}}' 


def scroll(s: str, frame_size: int = None, timeout: float = 0.1, template: str = '[{}]', file=sys.stdout): 
    frame_size = frame_size or min(len(s), 80) 
    for i in range(-len(s), frame_size + 1)[::-1]: 
        substring = template.format(cut_frame(s, i, frame_size)) 
        print(substring, end='\033[0G', flush=True, file=file) 
        sleep(timeout)

В виндовом терминале не пробовал, но если ANSI-последовательности поддерживаются, то должно скроллиться как положено.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы