如何在一行上一次打印一个单词?

时间:2013-12-02 20:37:37

标签: python time sys

我想编写代码,允许我打印出一个单词,然后它就会消失并打印下一个单词。例如,如果我有“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")

4 个答案:

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

示例,只是为了它的乐趣

enter image description here

答案 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)是显示的单词之间的时间。