2010-06-29 2 views
3

파이썬에서 숫자 만 받아들이는 방법이 있습니까? 예를 들어 raw_input()을 사용하고 싶습니까?숫자를 파이썬에서 입력으로 받아들이 기

나는 항상 입력을 받아서 ValueError 예외를 잡을 수는 있지만, 어쨌든 내가 다른 입력에 대해서만 숫자를 허용하고 멈추도록 할 수있는 어딘가에 있는지 알고 싶어했다.

+0

왜 그렇게하고 싶습니까? –

+0

마크를 입력으로 받아들이는 작은 스크립트를 만들고 있습니다. – user225312

+0

당신은 아마도 그렇게하는 고유 한 클래스를 작성할 수 있습니다. 그런 내장 기능이 있다고는 생각하지 않습니다. – FrustratedWithFormsDesigner

답변

2

: 나는 한 번에 하나의 키를 얻는 방법을

?

유닉스 변종의 경우 : 솔루션이 여러 개 있습니다. curses를 사용하여이 작업을하는 것이 간단하지만 curses는 꽤 큰 모듈입니다. 이 작업을해야하지만 내가, 리눅스에서 그것을 시도 만 한

import termios, fcntl, sys, os 
fd = sys.stdin.fileno() 

oldterm = termios.tcgetattr(fd) 
newattr = termios.tcgetattr(fd) 
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO 
termios.tcsetattr(fd, termios.TCSANOW, newattr) 

oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) 
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) 

try: 
    while 1: 
     try: 
      c = sys.stdin.read(1) 
      print "Got character", `c` 
     except IOError: pass 
finally: 
    termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) 
    fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) 

당신은 termios의 작업이 어떤 용은 fcntl 모듈이 필요하고, : 여기에 저주가없는 솔루션입니다 다른 곳에서. 이 코드에서 문자는 시간당 에 읽혀 인쇄됩니다.

termios.tcsetattr()은 stdin의 을 반향 및 비활 성화합니다. fcntl.fnctl()을 사용하여 stdin의 파일 설명자 플래그 을 얻고 을 비 차단 모드로 수정합니다. 비어있을 때 stdin을 읽으면 이 IOError가되고이 오류는 입니다.

이것을 사용하면 문자를 가져 와서 숫자인지 확인한 다음 표시 할 수 있습니다. 나는 그것을 직접 시도하지 않았다.

+0

분명히 우리는 같은 줄을 따라 생각하고있었습니다 ;-) 코드에는 +1이있었습니다. 방금 시도해 보았지만 약간의 사소한 변화가 있었기 때문에 원하는대로 정확하게 작동하는 것 같습니다. –

0

내가 아는 한, 아니오. 필자는 터미널이나 파이썬 또는 다른 언어로 이런 일이 가능하다는 소식을 듣지 못했습니다.

내가 가짜로 생각할 수있는 가장 가까운 방법은 터미널을 자동 모드 (입력 문자가 에코되지 않도록) 및 버퍼링되지 않은 모드로 설정하는 것입니다 (입력하지 않아도 입력 된대로 각 문자를 입력 할 수 있습니다. 행의 끝), 각 입력 문자를 하나씩 읽습니다. 그것이 숫자라면 인쇄하여 문자열에 추가하십시오. 그렇지 않으면 삭제하십시오. 하지만 터미널이 당신에게 그렇게 할 수있을 지 확신하지 못합니다. docs에서

관련 문제