Для практики я пытаюсь сделать кое-что в Python. Я решил сделать простую игру палача - я не делаю GUI. Игра начнется с простого ввода (). Теперь я хотел бы, чтобы рядом со строкой запроса, кроме запроса ввода, было удалено скрытое слово. Я пытался использовать \ b (символ возврата), но он не работает. Что-то вроде:

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

Теперь печать символа обратной реакции должна удалять ввод и «Твое слово», но это ничего не делает. Если я делаю это в режиме IDLE, я получаю квадраты и ничего не получаю, если открываю его, нажимая.

Как это сделать? Боюсь, я не слишком ясно понял свой вопрос, но надеюсь, вы поймете, что я имел в виду. :)

4
Bane Bojanić 29 Июн 2010 в 01:18

4 ответа

Лучший ответ

Я предполагаю, что игрок, вводящий слово, хочет быть уверенным, что он вписал его правильно, поэтому вы, вероятно, хотите отобразить слово, когда оно печатает правильно?

Как насчет печати достаточно \n s, чтобы убрать его с экрана, когда они закончили или выполнить команду очистки экрана?

Вы упомянули, что это простая игра, поэтому простое решение кажется подходящим.

[Edit] Вот простая процедура очистки консоли практически на любой платформе (взято из здесь):

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
2
Jon Cage 28 Июн 2010 в 21:47

\b не стирает символ перед курсором, он просто перемещает курсор влево на один столбец. Если вы хотите ввести текст без повторения символов, посмотрите getpass.

4
Ignacio Vazquez-Abrams 28 Июн 2010 в 21:33
word = raw_input("Your word: ")
import sys
sys.stdout.write("\x1b[1A" + 25*" " + "\n")

Это заменит последнюю напечатанную строку с 25 пробелами.

2
Forrest Voight 28 Июн 2010 в 21:50

Я думаю, что частью вашей проблемы является то, что input повторяет ввод, который завершает ввод вашего слова. Ваши backspace находятся на другой линии, и я не думаю, что они вернутся к предыдущей строке. Кажется, я вспоминаю вопрос о том, как это предотвратить, но сейчас не могу его найти.

Кроме того, я считаю, что print по умолчанию будет выводить новую строку при каждом вызове, поэтому каждый возврат будет в отдельной строке. Вы можете изменить это, используя аргумент end=''.

Редактировать: я нашел вопрос, о котором я думал, но, похоже, там нет никакой помощи. Вы можете посмотреть его, если хотите: Ввод Python, который не отображается символ новой строки

1
Community 23 Май 2017 в 10:27