[Python]이거 숫자니? (isnumeric(), isdigit(), isdecimal())

차보경·2022년 8월 10일
1

TIL

목록 보기
13/37

여러 코드를 작성하다보면, input으로 정보를 받아와야하는 경우가 왕왕있다.

input은 int(input('~~~'))이 아닌 이상 str 형태로 받아오게되는데,
이때 유저가 숫자형태로 제대로 입력한건지 예외처리 하는 팁이 되겠다!

1. Try int(number) or float(number)

  • 변수를 int나 float로 변환 가능한지 try 문으로 예외처리하는 방법이다.
  • 가장 직관적으로 보기 좋은 형태인 것 같다
number = input('Enter a number:')
    try:
        number = float(number)
    except:
        print('Invalid input')
  • 나는 주로 아래처럼 사용한다.
try:
	number = int(input('Enter a number:'))
except:
	print('Invalid input')

2. number.isnumeric()

  • 최근에 알게된 방법으로 number이 숫자값이니? 라고 묻는 것.
  • isnumeric() 함수는 숫자값 표현에 해당하는 문자열까지 True로 반환한다.
    (제곱근, 분수, 거듭제곱 형태의 특수문자 → True)
number = input('Enter a number:')
if not(number.isnumeric()):
	print('Invalid input')
number = ['123', '-1', '0.5', '½', '3²', '50%']

for i in number:
    print(i, i.isnumeric())
> 123 True
  -1  False
  0.5 False
  ½   True
  3²  True
  50% False
  • 여러가지 시도해본 결과 음수값, %, float 형태는 Flase를 출력한다...!

3. number.isdigit()

  • 해당 문자열이 '숫자'로 이루어져 있는지 검사한다. ‘숫자처럼 생긴’ 모든 글자를 다 숫자로 치는 것
number = ['123', '-1', '0.5', '½', '3²', '50%']

for i in number:
    print(i, i.isdigit())
> 123 True
  -1  False
  0.5 False
  ½   False
  3²  True
  50% False
  • isnumeric()과 비교해봤을 때, '½'은 False를 출력하는 차이가 있다. 거듭제곱은 숫자로치고, 분수형태, 음수, float 형태는 False로 출력한다.

4. number.isdecimal()

  • 흔히 생각하는 ‘숫자’와 같은 개념. int로 반환되는 문자를 검사한다.
  • 따라서 int로 변환가능한지 보려면 isdecimal()를 사용하면 된다!
number = ['123', '-1', '0.5', '½', '3²', '50%']

for i in number:
    print(i, i.isdecimal())
    
> 123 True
  -1  False
  0.5 False
  ½   False
  3²  False
  50% False

참고 블로그

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글