一次打印一个字母

时间:2017-11-14 01:56:20

标签: python-3.x

好的,所以我试着让我的程序一次打印一个字母,让它看起来像它的打字,这是我写的代码:

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秒钟,并立刻打印出所有内容,我不确定为什么

2 个答案:

答案 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)