파이썬 코드카타 36번 : isdecimal

2024. 3. 4. 01:44전처리/PYTHON

 

36번 문자열 다루기 기본💡


def solution(s):
    answer = []
    if s.isdecimal():
        if len(s) == 4 or len(s) ==6:
            return True
        else:
            return False
    else:
        return False

 

주말에 풀다가 막혔는데 isdecimal을 알게 되어서 간단하게 풀었다. 다른 사람은 어떻게 풀었을까?

 

def solution(s):
    answer = s.isdecimal()
    if len(s) == 4 or len(s) == 6:
        return answer
    else:
        return False

 

애초에 판별을 해주는 메서드니까 이렇게 쓰는 게 좋겠다.

 

def solution(s):
    if len(s) == 4 or len(s) == 6:
        return s.isdigit()
    else:
        return False

 

isdigit() 메서드는 문자열이 모두 숫자로 이루어져 있는지를 판별하는 메서드이다.

 

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

 

판별해주는 코드는 이렇게 쓸 수 있다.

 

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

 

if isinstance(int(s), int):는 주어진 문자열 s가 정수로 변환할 수 있는지를 확인한다. (내가 적고 싶었지만 안되던 것)

int(s)는 문자열 s를 정수로 변환한다. 이 때, 변환할 수 없는 경우에는 try로 인해 ValueError가 발생한다.

isinstance(A, B) 함수는 특정 객체가 특정 클래스의 인스턴스인지를 확인한다. 첫 번째 인자로는 확인할 객체를, 두 번째 인자로는 클래스를 받는다. (= B가 A에 속하는지)

따라서 if isinstance(int(s), int):는 문자열 s를 정수로 변환했을 때 변환이 성공하면 (즉, int(s)가 정수형 인스턴스인 경우) 조건문이 참이 되어 해당 블록의 코드가 실행된다. 만약 변환에 실패하면 (즉, int(s)가 정수형 인스턴스가 아닌 경우) 조건문이 거짓이 되어 해당 블록의 코드가 실행되지 않는다.

 

try구문을 쓰고 싶으면 이렇게 쓰면 된다! 좋은 코드를 배웠다.

 

def solution(s):
    answer = True
    
    if not (len(s) ==4 or len(s) == 6):
        return False
    
    for w in s:
        if not (ord(w) >= ord('0') and ord(w) <= ord('9')):
            return False

    return answer

 

ord() 함수는 주어진 문자의 유니코드 코드 포인트를 나타내는 정수를 반환한다. 즉, 문자를 해당하는 유니코드 코드 포인트의 정수 값으로 변환한다.

 

if not (ord(w) >= ord('0') and ord(w) <= ord('9')): return False: 문자열 s의 각 문자가 숫자로 이루어져 있지 않은 경우, 즉, 문자가 '0'부터 '9' 사이의 숫자가 아니면 함수는 즉시 False를 반환하고 종료된다.

 

ord('0')은 48이고 숫자형 문자열이 하나씩 커질수록 '+=1'된다. 이걸 이용할 수 있구나. 배웠다.