2013-03-13 147 views
3

我正在寫一個涉及數據庫的Python應用程序。對於它的地獄,我包括一個復活節彩蛋。如果用戶決定覈實他的數據庫,所有這些來自終端,他會被提示用簡單的(y/n)進行確認。但是如果他改爲輸入DLG2209TVX,那麼WarGames的這一行將會打印出來。懷疑有人會發現它,除非他們通過我的來源看,但沒關係。在Python中逐字逐字打印終端打印?

問題是,簡單地打印線條播放場景的方式太快,真的只是毀了它。我在每個角色的線條之間實施了一個計時器來減慢速度,這樣會更好,但它看起來還不自然。是否有一種標準化的方式來逐一打印每個單詞或字符,而不是一次一行地進行打印?或者我應該開始在單詞之間添加計時器?

+1

您是否嘗試過'time.sleep()'? '睡眠(秒):延遲執行給定的秒數。參數可能是 是亞秒級精度的浮點數.' – 2013-03-13 01:23:51

+1

他們不必讀取源代碼,他們只需要遇到這個stackoverflow問題! :-) – Celada 2013-03-13 01:27:00

+0

相關:['curl -L cueup.com/jobs'](http://tech.cueup.com/blog/2013/03/06/how-our-terminal-friendly-jobs-page-works /)(展示慢速打印) – jfs 2013-03-13 03:30:21

回答

3

標準化?從來沒聽說過。不過,試試這個:

import random 
import sys 
import time 

def slowprint(s): 
    for c in s + '\n': 
     sys.stdout.write(c) 
     sys.stdout.flush() # defeat buffering 
     time.sleep(random.random() * 0.1) 

slowprint('Hello, world.') 

調整0.1改變字符之間的最大延遲和線之間增加冗長time.sleep() s到添加更多戲劇性的效果。

+0

你真棒。謝謝 – 2013-03-13 01:33:29

1
import sys 
import time 
for c in gettysburg_address: 
    sys.stdout.write(c) 
    sys.stdout.flush() 
    # 110 baud: 
    time.sleep(8./110) 
    # 300 baud: 
    # time.sleep(8./300) 
+0

muchas gracias,作品像魅力 – 2013-03-13 01:39:47

1

您也可以嘗試curses.delay_output()

In [48]: import curses 

In [49]: for x in "foo bar": 
    sys.stdout.write(x)  #prints each char with a delay of 100ms 
    curses.delay_output(100) 
    ....:  
foo bar 
+1

aha,這就是我的意思是標準化。謝謝 – 2013-03-13 02:00:37