我想编写代码,允许我打印出一个单词,然后它就会消失并打印下一个单词。例如,如果我有“Hello World!”,程序应打印“Hello”,然后单词消失,然后“World!”打印然后消失。我也应该能够改变打印单词的速度。目前我能够弄清楚如何以一定的速度打印字符,但是如何逐个打印字?
import time
import sys
def print_char(s):
for c in s:
sys.stdout.write( '%s' % c )
sys.stdout.flush()
time.sleep(0.1)
print_char("hello world")
答案 0 :(得分:3)
试试这个:
#!/usr/bin/env python3
import sys
import time
data = "this is a sentence with some words".split()
max_len=max([len(w) for w in data])
pad = " "*max_len
for w in data:
sys.stdout.write('%s\r' % pad)
sys.stdout.write("%s\r" % w)
sys.stdout.flush()
time.sleep(0.4)
print
示例,只是为了它的乐趣
答案 1 :(得分:0)
如果words
是字符串列表:
def print_char(words):
for s in words:
for c in s:
sys.stdout.write('%s' %c)
sys.stdout.flush()
time.sleep(0.1)
# erase the word
sys.stdout.write('\b'*len(s)) # backspace the cursor
sys.stdout.write(' '*len(s)) # overwrite with spaces
sys.stdout.write('\b'*len(s)) # backspace again, to write the next word
答案 2 :(得分:0)
根据这个问题的答案:
remove last STDOUT line in Python
您可以这样做:
import time
import sys
CURSER_UP_ONE = '\x1b[1A'
ERASE_LINE = '\x1b[2K'
def delay_print(sentence, pause_between_words):
for s in sentence.split(" "):
sys.stdout.write( '%s' % s)
sys.stdout.flush()
time.sleep(pause_between_words)
print(ERASE_LINE + CURSER_UP_ONE)
delay_print("Hello World!", 0.5)
此代码将在终端中一次打印一个单词,删除最后一个单词并打印下一个单词。最后一个字将在终止前删除。这是你想要它的工作方式吗?别告诉我。
编辑:注意到您还希望在每个字符打印之间有延迟。已相应更新了我的代码。
编辑:根据您的评论,我通过字符打印删除了字符。
答案 3 :(得分:0)
这可能不是你想要的,它可能没有其他一些答案那么快,但你能做的就是:
import time, os
text = "This is a long sentence that has a lot of words in it.".split()
for i in range(len(text)):
os.system("clear")
print(text[i])
time.sleep(0.5)
os.system("clear")
其中text是您要键入的文本,time.sleep(XXX)是显示的单词之间的时间。