【问题标题】:Deleting already printed in Python删除已在 Python 中打印的
【发布时间】:2011-03-09 08:23:58
【问题描述】:

为了练习,我正在尝试用 Python 做一些事情。我决定制作一个简单的刽子手游戏——我不是在制作 GUI。游戏将从一个简单的 input() 开始。现在,除了要求输入之外,我想在下一行删除隐藏的单词。我试过使用 \b (退格字符),但它不起作用。比如:

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

现在,打印反斜杠字符应该删除输入和“你的话”,但它没有做任何事情。如果我在 IDLE 中执行此操作,我会得到方块,如果通过单击打开它,我什么也得不到。

如何做到这一点?恐怕我的问题不太清楚,但我希望你能明白我的意思。 :)

【问题讨论】:

  • 与您的问题无关的评论:您可能希望使用raw_input() 而不是input(),除非您使用的是 Python 3。
  • 是 Python 3,注意 print 是一个函数。但这在这里真的无关紧要。我想知道 Python 3.x 和更低版本,但由于我刚刚学习,我正在学习/使用 Python 3 作为我的主要版本,因为那是未来。 :)
  • 在我评论之后,我注意到print 上的括号。但这也是有效的 Python 2,所以你问的是哪个版本是模棱两可的。我还认为您在 len 表达式上放错了括号。
  • 我知道它是有效的,但很少使用,尤其是只打印一个字符串。是的,你对 len() 的看法是正确的,我已修复它。

标签: python printing python-3.x


【解决方案1】:

\b 不会删除光标之前的字符,它只是将光标向左移动一列。如果您想输入文本而不回显字符,请查看getpass

【讨论】:

  • 最好的主意。 @Edol:更详细一点,使用from getpass import getpass; word = getpass('Enter hidden word:')
【解决方案2】:

我假设输入单词的玩家希望确保他们输入正确,因此您可能希望在他们输入正确的单词时显示该单词?

打印足够的\ns 以在完成后将其移出屏幕或发出清屏命令怎么样?

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

[编辑]这是一个简单的例程,可以在几乎任何平台上清除控制台(取自 here):

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

【讨论】:

  • ...对于这个刽子手的事情。不过,Getpass 输入也是一件好事。
【解决方案3】:
word = raw_input("Your word: ")
import sys
sys.stdout.write("\x1b[1A" + 25*" " + "\n")

这将替换用 25 个空格打印的最后一行。

【讨论】:

  • 这适用于print 以及sys.stdout.write。不过,它可能取决于终端。
  • Eww。这在 Windows 上不起作用。事实上,它只适用于支持 ANSI 转义序列的终端
【解决方案4】:

我认为您的部分问题是input 正在回显终止您的单词输入的 Enter。您的退格键在另一行,我认为它们不会备份到上一行。我似乎记得一个关于如何防止这种情况的问题,但我现在找不到它。

另外,我相信print,默认情况下会在每次调用时输出一个换行符,所以每个退格键都会在自己的行上。您可以使用 end='' 参数来更改此设置。

编辑:我找到了我正在考虑的问题,但看起来没有任何帮助。喜欢的可以看看:Python input that ends without showing a newline

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多