如何在字符之间加入一点延迟来打印字符串?

3
“我希望文本显示出来的时候就像是正在打字一样。因此,我需要在每个字母后面加上一点延迟。”
“我尝试过这种方法:”
import time

text = "Hello, this is a test text to see if all works fine."
for char in text:
   print char,time.sleep(0.2),

它运行得很好,除了一个问题。在每个字符后面,我得到一个“None”。
这是输出:
H None e None l None l None o None , None   None t None h None i None s None   None i None s None   None a None   None t None e None s None t None   None t None e None x None t None   None t None o None   None s None e None e None   None i None f None   None a None l None l None   None w None o None r None k None s None   None f None i None n None e None . None

我不知道为什么会发生这种情况。我希望有人能帮助我。

你为什么要打印 time.sleep(0.2) 的值? - S.Lott
7个回答

20
>>> import time
>>> import sys
>>> blah = "This is written slowly\n"
>>> for l in blah:
...   sys.stdout.write(l)
...   sys.stdout.flush()
...   time.sleep(0.2)
...
This is written slowly

+1 用于 flush()。当然,如果你真的希望它看起来像是打字,那么暂停的时间应该是随机的;谁会以完美的规律节奏打字呢? - Wooble
1
取决于打字员。家庭键入式触摸打字员:同一个手指键之间的延迟会更大...而且交替使用双手的延迟可能最短。换挡需要更长时间。我开始编写一些代码,但后来决定回去工作 :) - MattH
@Wooble 这取决于情况。例如,我倾向于以相对稳定的速度打字,偶尔会有短暂的休息来思考接下来要输入什么内容。 - The Daleks stand with Ukraine

3
你正在打印time.sleep(0.2)的结果,它是None。请将它移到下一行。
text = "Hello, this is a test text to see if all works fine."
for char in text:
    print char,
    time.sleep(0.2)

当然,您仍然面临着每个字符之间有一个空格的问题,这可以通过将print语句替换为调用sys.stdout.write来解决。
text = "Hello, this is a test text to see if all works fine."
for char in text:
    sys.stdout.write(char)
    time.sleep(0.2)

1
对于Python 3,在第一个例子中使用print(char, end="", flush=True) - Gino Mempin

1
您正在打印 time.sleep(0.2) 的返回值,它是 None。请将其放在单独的一行中。在“print char”后面加逗号将防止打印新行,但会在每个字符后引入一个空格。

请尝试使用以下代码:

>>> import sys
>>> import time
>>> text = "Hello, this is a test text to see if all works fine."
>>> for char in text:
...     sys.stdout.write(char)
...     time.sleep(0.2)

MattH抢先一步并且正确地包含了flush()调用。 - Jeremy Brown

1
你的例子在每行上单独打印它们(至少在Windows上)。你可以使用打印到sys.stdout来解决这个问题。
import time, sys
for character in text:
    sys.stdout.write(character)
    time.sleep(0.2)

1

这行代码:

print char, time.sleep(0.2)

解码为“打印char的值,然后打印函数time.sleep()的返回值(即None)”。

您可以将它们分成单独的行,但print后跟逗号的默认行为会留下字符之间的空格,这可能不是您想要的。如果不是,请查找如何更改print的行为,或者执行以下操作:

>>> import sys
>>> import time
>>> for char in "test string\n":
...    sys.stdout.write(char)
...    time.sleep(0.2)
...
test string
>>>

1
谢谢大家的帮助,这是我的最终代码,我按照Wooble提到的方法给延迟设置了一个随机时间。
import time
import sys
from random import randrange

text = "This is the introduction text."

for c in text:
    sys.stdout.write(c)
    sys.stdout.flush()
    seconds = "0." + str(randrange(1, 4, 1))
    seconds = float(seconds)
    time.sleep(seconds)

1
time.sleep放在单独的一行中。使用逗号,您还可以打印其返回值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接