2014-01-08 36 views
0

我试图做一个简单的函数,将输入一个字母的字符串,如在游戏中,文本滚动。Python:time.sleep函数意外?

这里是我的代码如下所示:

import time 

def ScrollingText(s): 
    s=str(s) 
    for letter in s: 
      print(letter, end="") 
      time.sleep(.05) 
    print("") # newline at the end 
if __name__=='__main__': 
    ScrollingText("Hello World!") 

然而,当我运行,等待,然后转储出整个字符串一次。我是python(也是这个论坛)的新手,所以如果任何人都可以指出我正确的方向,并告诉我我在这里错过了什么。我会很感激。谢谢!

+2

Offtopic:你不必被Python中的';'完成每一行。删除它们更麻烦。 –

+4

让我更清楚地说一句:用';'结束这些行是废话。 – Matthias

+1

@ Maxime,Matthias我首先学习了Java,这就是那种习惯的来源。 – qwersjc

回答

2

由于您的字符串中没有换行符,python会缓存它。你必须明确地刷新每个字符这样后的输出:

import sys 
import time 

def ScrollingText(s): 
    s=str(s) 
    for letter in s: 
      print(letter, end="") 
      sys.stdout.flush() 
      time.sleep(.05) 
    print("")  # newline at the end 

为了获得更好的性能,I/O通常缓冲,也就是说,蟒蛇将收集您打印数据,直到它可以把它作为一个大块(这也适用于文件I/O)。通过在sys.stdout上调用flush()(这是默认打印写入的文件对象),您可以强制python将数据发送到操作系统(并将其发送到您的终端)。

+0

打印通常不需要冲洗。 50毫秒延迟太小 – volcano

+0

@volcano:[Manual says](http://docs.python.org/2/library/functions.html#print)输出缓冲由文件(这是sys.stdout这里)。我不知道在python中的任何文件实现基于超时的缓冲区。 –

+0

你正在写。当字符串没有被\ n终止时,打印行为会有所不同\ n – volcano