好的,所以我试着让我的程序一次打印一个字母,让它看起来像它的打字,这是我写的代码:
import time
def type(text, delay):
i = 0
amount = len(text)
while amount > i:
beep = text[i]
print(beep, end='')
i += 1
time.sleep(delay)
type("Hey what is your name", 0.05)
response = input("")
type("{} is a very nice name!".format(response), 0.05)
但由于某种原因它等了5秒钟,并立刻打印出所有内容,我不确定为什么
答案 0 :(得分:1)
会发生什么情况是打印需要结束以刷新缓冲区,但由于您没有提供它,那么您必须手动执行它,如下所示:
import time
import sys
def type(text, delay):
for beep in text:
print(beep, end = "")
sys.stdout.flush()
time.sleep(delay)
type("Hey what is your name", 0.05)
response = input("")
type("{} is a very nice name!".format(response), 0.05)
答案 1 :(得分:1)
这是一个缓冲问题。为了提高性能,解释器会将任何输出缓冲到几乎任何输出流,直到明确刷新换行符或缓冲区为止。也就是说,你的输出 每0.05秒进入一次输出缓冲区,但是它一直排队等待,直到它一下子全部冲到你的控制台上。
修复?刷新标准输出。同时,建议使用sys.stdout
而不是print
执行此任务:
import sys
import time
def type(text, delay):
i = 0
amount = len(text)
while amount < i:
sys.stdout.write( text[ i ])
sys.stdout.flush()
i += 1
time.sleep(delay)
type("Hey what is your name", 0.05)
response = input("")
type("{} is a very nice name!".format(response), 0.05)