2016-01-09 215 views
0

編輯 - 我遇到的問題是我試圖使用的庫,colorama,我應該更具體。按字符打印一個字符串,包括控制字符

我希望能夠在每個字符之間以非常短暫的間隔打印一個逐字符的字符作爲效果,但是我的代碼忽略了控制字符並僅打印單個字符。不知道如何解決這個問題。

這裏是做它的部分代碼:

import time, sys  

def slowprint(message, speed):  
    for x in range(0, len(message)):  
     if x == len(message)-1: 
      print(message[x]) 
     else: 
      print(message[x], end="") 
      sys.stdout.flush() 
      time.sleep(speed) 

我對蟒蛇3.2。

+0

控制字符可能是錯誤的詞來使用...... – Shimshar

回答

0

也許這樣?

import time, sys 

def slowprint(message, speed): 
    i = iter(message) 
    # output first character before pausing 
    sys.stdout.write(next(i)) 
    sys.stdout.flush() 

    for letter in i: 
     time.sleep(speed) 
     sys.stdout.write(letter) 
     sys.stdout.flush() 

編輯:固定

0

我不能完全肯定明白你的問題,但我會假設你想打印控制字符,如「\ t」或「\ n」。

當你創建一個像「A \ tB」這樣的字符串時,它由三個字符組成,而不是四個。 '\ t'直接轉換爲單個字符。

所以當你遍歷字符時,你需要將這些控制字符映射回它們的字符串表示。爲此,您可以使用repr()(見this answer),你是好

>>> slowprint(repr("abs\tsd\n"), 0.1) 
+0

這將從下一個字符(時間延遲之後單獨打印反斜槓 - 但是這可能是可以接受的,另一種方法是在循環內部執行'repr(c)[1:-1]',這個切片會刪除引號,不過這很奇怪。 – pepr

相關問題