如何逐个字符打印字符串(就像有人在打字一样)


import time
a = """Hello my name is XYZ
How are you?
"""
b= list(a)
def conti(lst):
for alphabet in lst:
print(alphabet, end='')
time.sleep(0.01)

conti(b)

这样,在打印一行之后,而不是在每个字母之后,会有0.01秒的延迟。

您想要的单词是"字母";,而不是";字母表";。字母表指的是所有的字母(a-z(。

你的问题是你的打印被缓冲了。它在每个字母之后都会延迟,但直到程序结束你才能看到文本。毕竟,只有大约30个字母,所以整个过程在300毫秒内结束。

您需要在每个字母后刷新输出:

print(alphabet, end='', flush=True)

您可以使用sys.stout.write()一次写入一个字符:

import sys
import time
a = """Hello my name is XYZ
How are you?
"""

def conti(s):
for ch in s:
sys.stdout.write(ch)
time.sleep(0.1)

conti(a)

由于您的文本包含换行符,因此代码与您的代码几乎相同。无需将其转换为列表,您可以轻松地在字符串上循环。我把延迟增加了10倍,因为它太快了,看起来不像是在打字。

正如@TimRoberts明确指出的那样:根据您的终端,文本缓冲区的刷新速度可能不够快,无法看到效果。你可以像这样强制刷新,这样它在大多数情况下都能工作:

import sys
import time
a = """Hello my name is XYZ
How are you?
"""

def conti(s):
for ch in s:
sys.stdout.write(ch)
sys.stdout.flush()
time.sleep(0.1)

conti(a)

最新更新