2010-06-28 457 views
4

爲了實踐,我想在Python中做一些東西。我決定做一個簡單的hang子手遊戲 - 我沒有製作一個GUI。遊戲將從一個簡單的輸入()開始。現在,我希望下一行除了要求輸入外,還要刪除隱藏的單詞。我試過使用\ b(退格字符),但它不起作用。例如:刪除已經打印在Python

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

現在,打印間隙字符應該刪除輸入和「你的單詞」,但它沒有做任何事情。如果我在IDLE中這樣做,我會得到正方形,如果通過單擊打開它,我什麼也得不到。

如何做到這一點?恐怕我對我的問題不太清楚,但我希望你能明白我的意思。 :)

+1

與您的問題無關的評論:除非您使用Python 3,否則您可能希望使用'raw_input()'而不是'input()'。 – 2010-06-28 21:21:05

+1

它是Python 3,請注意print是一個函數。但這在這裏真的無關緊要。 我想知道Python 3.x和更低版本,但正如我剛剛所瞭解的,我正在學習/使用Python 3作爲我的主版本,因爲這是未來。 :) – 2010-06-28 21:30:12

+0

在我評論後,我注意到'print'上的圓括號。但是這也是有效的Python 2,所以你在問什麼版本是不明確的。我也認爲你的圓括號放在'len'表達式上。 – 2010-06-28 21:39:54

回答

2

我假設玩家輸入的單詞想要確定他們輸入的是正確的,所以你可能想顯示單詞,因爲他們正在輸入正確的?

如果打印足夠多的\n s完成後將其從屏幕上移開或發出清晰屏幕命令?

你提到這是一個簡單的遊戲,所以一個簡單的解決方案似乎適合。

[編輯]這裏有一個簡單的程序來清除幾乎任何平臺上的控制檯(從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 
+0

完美地工作。:) – 2010-06-29 08:36:20

+0

...這個hang子手的事情。儘管如此,繞過輸入也是一件好事。 – 2010-06-29 11:57:22

4

\b不擦除光標前的字符,它只是將光標左移一列。如果你想輸入文字而不回顯字符,那麼看看getpass

+0

的好主意。 @Edol:再詳細一點,使用'from getpass import getpass; word = getpass('輸入隱藏的單詞:')' – 2010-06-29 03:15:36

1

我覺得你的問題的一部分是input是呼應輸入終止你的單詞條目。你的退格位於另一行,我認爲他們不會退回到前一行。我似乎回想起如何防止這個問題,但我現在找不到它。

此外,我相信print,默認情況下,將在每次調用時輸出一個換行符,所以每個退格符將在自己的行上。您可以通過使用end=''參數來更改此設置。

編輯:我發現了我在想的問題,但它看起來並沒有任何幫助。你可以看一下,如果你喜歡:Python input that ends without showing a newline

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

這將取代印有25位的最後一行。

+1

這適用於'print'以及'sys.stdout.write'。不過,它可能依賴於終端。 – 2010-06-28 22:07:25

+0

Eww。這在Windows上不起作用。實際上它只能在支持ANSI轉義序列的終端上工作 – 2010-06-29 03:12:51

+0

您是否測試了它?我認爲ANSI序列在Windows上工作... – 2010-07-03 18:34:58