如何显示“打字机效果”动画?

2024-09-30 22:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有代码来生成运行文本:

from time import sleep
import os

def run(text):
    for i in text:
        print (i, end="", flush=True)
        sleep(0.07)

teks = " Hello\n"
teks2 = " world"
run(teks)

run(teks2)

和输出

hello
world

我想在youtube视频TypeWriter Effect In ReactJS Tutorial中显示结果

你能帮我吗


Tags: run代码textinfrom文本importfor
3条回答

给你:

编辑:

from time import sleep


def run(word):
    for letter in word:
        print(letter, end="", flush=True)
        sleep(0.5)

    print("\r", end="")

run("Hello")
run("world !")

您使用不同的参数调用函数两次,因此循环也会运行两次。接下来,字符串中有换行符(我的意思是“\n”),这将分割行,因此end=""在代码中没有效果

以下是解决方案:

def run(text):
    for i in text:
        print(i, flush=True, end='')
        sleep(0.07)
    print('\r', end='')

我认为这与视频中的内容基本相同:

from time import sleep
CPS = 3  # Update speed in Characters Per Second.

def run(text, width=60, delay=1/CPS):
    text = text.replace('\n', '')  # Removed any newlines.
    for i in range(len(text)+1):
        print('\r' + text[:i].center(width), end="", flush=True)
        sleep(delay)

    for i in range(len(text)+1, -1, -1):
        print('\r' + text[:i].center(width), end="", flush=True)
        sleep(delay)

run("Hello\n")
run("world")

通过应用软件开发的DRY(不要重复)原则,可以稍微简化上面的代码:

from itertools import chain
from time import sleep
CPS = 3  # Update speed in Characters Per Second.

def run(text, width=50, delay=1/CPS):
    for line in text.splitlines():
        interval = len(line) + 1
        for i in chain(range(interval), range(interval, -1, -1)):
            print('\r' + line[:i].center(width), end="", flush=True)
            sleep(delay)

run("Hello\nworld")

相关问题 更多 >