isalpha & isdigit in python

Min-Ho Lee·2020년 11월 16일
0

Mon_Nov_16
.
.
.
알고리즘 공부를 하다 기가맥힌 함수를 하나 발견했다.

isalpha() & isdigit()

바로 어떠한 문자열에 대해서 그 문자열이 문자인지 숫자인지 True False로 리턴해주는 함수 isalpha()isdigit()이다.

예를 들어 다음과 같은 문제가 있다고 가정해보자.

문자열 s에 대해서 크기가 4 또는 6이어야 하고, 문자열이 모두 숫자라면 True, 아니면 False를 리턴하는 메소드를 구현하면 된다.

나는 다음과 같이 풀었다.

def solution(s):
    try:
        length = len(s)
        if length == 4 or length == 6:
            int(s)
            return True
        return False
    except:
        return False

먼저 길이를 가져온 후 길이가 4인지 6인지 판단 후 True 면 타입을 바꾸고 에러가 안 났으면 모두 숫자이므로 True를 리턴해주었고 타입을 변환 시 에러가 나면 숫자만 들어있는 게 아니므로 False를 리턴해 주었다.

그런데 기가 막힌 풀이를 하나 보았다.

def solution(s):
    return s.isdigit() and len(s) in (4, 6)

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이렇게 한줄로 끝났다.

일단 and 뒤의 내용은 이해가 갔다.
문제는 isdigit()이라는 메소드였다.

문자열 a에 대해서 a가 모두 숫자일 때 isdigit이라는 함수를 사용하면 True이고 하나라도 문자가 들어있다면 False를 반환한다.

나는 사소한 것 하나하나에 궁금함이 많기 때문에 확인을 위해 테스트를 해보았다.

a = '111'
b = 'aaa'
c = '1a1'
d = 123

print(a.isdigit())
print(b.isdigit())
print(c.isdigit())
print(d.isdigit())

코드는 이러하고 이 test.py를 실행해 보았다.

True
False
False
Traceback (most recent call last):
  File "test.py", line 76, in <module>
    print(d.isdigit())
AttributeError: 'int' object has no attribute 'isdigit'

이렇게 출력이 되었다.

111은 숫자만 들어있기 때문에 True
aaa는 모두 문자이기에 False
1a1은 a 하나 때문에 False(isdigit은 모두 숫자여야 True를 반환한다.)

그리고 여기서 중요한건, 정말 문자열에 대해서만 적용하는지 궁금했다.
그래서 int형인 d라는 변수에 isdigit을 호출했더니 int형에 대해서는 사용할 수 없다고 에러가 났다.

끝!

profile
🐇 Rabbit can take a rest, but 🐢 turtle can't

0개의 댓글