Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 주어진 문자열이 유효한 숫자인지 확인하는 방법

프로그래밍을 하다 보면 숫자와 소수점으로 구성된 문자열이 실제로 유효한 숫자를 나타내는지 판별해야 하는 경우가 자주 있습니다. 예를 들어 입력값이 "2.5"라면 결과는 True여야 하고, "xyz"처럼 숫자가 아닌 문자열이라면 False를 반환해야 합니다.

문제 해결 접근 방식

이 문제는 파이썬의 문자열 파싱(string parsing) 기법을 활용하면 간단하게 해결할 수 있습니다.

핵심 아이디어는 다음과 같습니다.

  • 문자열을 숫자 타입으로 변환을 시도합니다.
  • 변환 과정에서 예외(exception)가 발생하지 않으면 해당 문자열은 유효한 숫자입니다.
  • 예외가 발생하면 숫자가 아니라고 판단합니다.

파이썬에서는 내장 함수인 float()를 사용하여 문자열을 부동소수점 숫자로 변환할 수 있으며, 변환에 실패하면 ValueError가 발생하는 특징을 이용합니다. 또한 strip() 메서드로 문자열 앞뒤의 불필요한 공백을 제거하여 더 정확한 판별이 가능합니다.

구현 예제

다음 코드를 통해 실제 구현 방법을 살펴보겠습니다.

def isNumeric(s):
    s = s.strip()
    try:
        s = float(s)
        return True
    except:
        return False

print(isNumeric("0.2"))
print(isNumeric("xyz"))
print(isNumeric("Hello"))
print(isNumeric("-2.5"))
print(isNumeric("10"))

입력

"0.2"
"abc"
"Hello"
"-2.5"
"10"

출력

True
False
False
True
True

코드 설명

위 코드의 동작 원리를 단계별로 정리하면 다음과 같습니다.

  1. s.strip(): 문자열 양 끝의 공백을 제거합니다. 예를 들어 " 10 " 같은 입력도 올바르게 처리됩니다.
  2. float(s): 문자열을 실수로 변환을 시도합니다. 정수형 문자열 "10", 음수 "-2.5", 소수 "0.2" 모두 성공적으로 변환됩니다.
  3. try-except 블록: 변환이 성공하면 True를 반환하고, ValueError 등의 예외가 발생하면 False를 반환합니다.

실행 결과를 보면 "0.2", "-2.5", "10"은 유효한 숫자이므로 True가 출력되고, "xyz"와 "Hello"는 숫자로 변환할 수 없어 False가 출력되는 것을 확인할 수 있습니다.

참고 사항

이 방법은 간결하고 직관적이지만, float()는 "inf", "nan" 같은 특수 문자열도 숫자로 인식한다는 점을 유의해야 합니다. 더 엄격한 검증이 필요하다면 정규표현식(regular expression)을 사용하거나, 파이썬 3.12 이상에서 제공되는 str.isnumeric(), Decimal 타입 검증 등을 함께 고려할 수 있습니다.