在Python中删除已打印内容

4 投票
4 回答
9481 浏览
提问于 2025-04-16 00:32

为了练习,我在尝试用Python做一些事情。我决定做一个简单的猜单词游戏——我不打算做图形界面。游戏开始时会有一个简单的输入框。现在,我想在下一行除了询问输入外,还想删除隐藏的单词。我试过使用\b(退格符),但没有成功。就像这样:

word = input("Your word: ")
for i in range(len(word) + 12):
    print("\b")

现在,打印这个退格符应该能删除输入和“你的单词”,但它没有任何效果。如果我在IDLE中这样做,我会看到方块,如果我直接点击打开,就什么都没有。

我该怎么做呢?我担心我没有把问题说清楚,但我希望你能明白我的意思。:)

4 个回答

2
word = raw_input("Your word: ")
import sys
sys.stdout.write("\x1b[1A" + 25*" " + "\n")

这段代码会用25个空格替换掉最后一行打印的内容。

4

\b 并不会删除光标前面的字符,它只是把光标向左移动了一格。如果你想输入文本但不想显示输入的字符,可以看看 getpass 这个工具。

2

我想玩家在输入单词的时候,肯定希望确认自己输入的是否正确,所以你可能想在他们输入的时候显示出这个单词,对吧?

那你可以在他们输入完成后,打印足够的\n来把它移出屏幕,或者发出一个清屏的命令?

你提到这是一个简单的游戏,所以一个简单的解决方案似乎很合适。

[编辑] 这里有一个简单的代码,可以在几乎所有平台上清除控制台(来自这里):

def clearscreen(numlines=100):
    """Clear the console.
    numlines is an optional argument used only as a fall-back.
    """
    import os
    if os.name == "posix":
        # Unix/Linux/MacOS/BSD/etc
        os.system('clear')
    elif os.name in ("nt", "dos", "ce"):
        # DOS/Windows
        os.system('CLS')
    else:
        # Fallback for other operating systems.
        print '\n' * numlines

撰写回答