如何在字母之间留出一点时间打印文字?(Python)

4
我在这里写的代码(假设)应该会在每个字母之间有一点时间打印出字母,就像有人在打字:
from sys import stdout
from time import sleep

def timedPrint(string, time):
    array = list(string)
    for x in array:
        stdout.write(x)
        sleep(time)

timedPrint("test")

但是不知道为什么,当我调用这个函数时,它会等待每个字符打印的时间,然后才打印整个字符串 ("test")。

有没有办法让它按照预期打印?

4个回答

1
尝试在循环中使用 sys.stdout.flush()

1
你需要做的是在每个字符写入后刷新stdout
for x in array:
    stdout.write(x)
    stdout.flush()  # <--
    sleep(time)

0
顺便提一下,你的代码会返回错误,因为你只给timedPrint提供了1个参数。应该是:
timedPrint("test",1)

每隔一秒打印一次。顺便说一下,如果您使用命令行运行此代码,没有问题。

python something.py

结果会恰好符合您的需求。但是可能会有这样的情况发生,如果您在某个IDE或编辑器下运行,则可能会出现您将sleep()函数运行在主线程下的情况。如果IDE还具有其自己的控制台渲染器,则可能会导致在您的IDE中运行在主线程下的sleep()函数也暂停了控制台渲染器。试着将其放在新线程下,无论使用的是哪个IDE或编辑器,都应该能够正常工作。


0
你可以这样做:
import time

def slowPrint(str, t):
  for l in str:
    print l,
    time.sleep(t)

或者这样:

import time
from sys import stdout
def slowPrint(str, t):
    for l in str:
        stdout.write(l)
        stdout.flush()
        time.wait(t)

这段代码未经测试,但如果您使用制表符而不是4个空格,它应该可以工作;)


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