2010-06-28 2 views
4

연습을 위해 파이썬에서 몇 가지 작업을하려고합니다. 나는 간단한 행맨 게임을 만들기로 결심했다. 나는 GUI를 만들지 않는다. 게임은 간단한 입력()으로 시작합니다. 이제 숨겨진 단어를 지우려면 입력을 요청하는 다음 줄을 사용하고 싶습니다. \ b (백 스페이스 문자)를 사용해 보았지만 작동하지 않습니다. 같은 뭔가 :이미 파이썬으로 인쇄 중 삭제하기

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

이제, 반발 문자를 인쇄하는 것은 입력과 "말씀"을 삭제하도록되어 있지만, 그것은 아무것도 아니다. IDLE에서이 작업을 수행하면 사각형이 생기고 클릭하면 열립니다.

어떻게 수행하나요? 나는 내 질문에 너무 분명하지는 않았지만, 나는 당신이 내가 의미하는 바를 보길 바랍니다. :)

+1

질문과 관련없는 코멘트 : 파이썬 3을 사용하지 않는 한'input()'대신'raw_input()'을 사용하고 싶을 것입니다. –

+1

파이썬 3입니다. print가 함수라는 것을 알아 두십시오. 그러나 여기는 정말로 관련이 없습니다. 파이썬 3.x와 더 낮은 버전을 모두 알고 싶습니다만, 제가 배우는 것만으로 파이썬 3을 제 1 차 버전으로 사용하고 배우고 있습니다. 왜냐하면 그것이 미래이기 때문입니다. :) –

+0

내가 주석을 쓰고 나자, 나는 print의 괄호에 주목했다. 하지만 파이썬 2에서도 유효합니다. 그래서 여러분이 묻고있는 버전이 모호합니다. 나는 또한 당신이 괄호를'len' 표현식에 잘못 배치했다고 생각합니다. –

답변

2

나는 단어를 입력하는 플레이어가 그들이 올바르게 입력했으면 좋겠다고 생각하므로 입력하는 것처럼 단어를 표시하고 싶을 것입니다.

인쇄가 완료되면 화면에서 벗어나거나 화면 지우기 명령을 실행하기에 충분한 인쇄량은 어떻습니까? \n?

당신은 간단한 게임 이었으므로 간단한 해결책이라고 생각합니다.

[편집] 여기 (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

완벽하게 작동합니다.:) –

+0

...이 교수형 집행자 물건. 그래도 Getpass 입력은 좋은 것입니다. –

4

\b 커서 앞에있는 문자를 지우지 않고 단순히 커서를 한 열 왼쪽으로 옮깁니다. 문자를 반향하지 않고 텍스트 입력을 원한다면 getpass을보십시오.

+0

최상의 아이디어. @ Edol : 좀 더 정교하게,'from getpass import getpass; 단어 = getpass ('숨겨진 단어 입력 :') ' –

1

내가 문제의 일부 input가 종료 있음을 입력 반향되는 생각은 당신의 단어 입력. 당신의 백 스페이스는 다른 라인에 있으며 나는 이전 라인으로 돌아갈 것이라고 생각하지 않습니다. 나는 그것을 방지하는 방법에 관한 SO 질문을 회상하는 것 같지만 지금은 그것을 찾을 수 없습니다.

또한, 기본적으로 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'와 함께 저에게 적합합니다. 그것은 터미널에 의존적 일 수도 있습니다. –

+0

Eww. Windows에서는 작동하지 않습니다. 사실 그것은 ANSI 이스케이프 시퀀스를 지원하는 터미널에서만 작동합니다 –

+0

테스트 했습니까? ANSI 시퀀스가 ​​Windows에서 작동한다고 생각합니다 ... –