NIRVANA

[level 1] 문자열 다루기 본문

Coding test(Python3)/Programmers

[level 1] 문자열 다루기

녜잉 2023. 7. 15. 13:46

문제

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

 

문제 접근법1

1) 문자열의 길이를 확인 한 뒤, 조건에 맞지 않으면 False를 return한다. 

2) 알파벳 리스트를 만든 뒤, for문을 통해 알파벳이 문자열에 있는지 count 변수를 통해 확인한다. 

3) count가 -1보다 크면 문자열에 알파벳이 있는 것이므로 False를 return한다. 

import string

def solution(s):
    answer = True
    
    alpa = [i for i in string.ascii_letters ]
    
    if len(s) < 4 or len(s) > 6:
        answer = False
        
    for i in alpa:
        count = s.find(i)
        if count > -1:
            answer = False
            break
        
    return answer

왜 실패했지? 하고 문제를 다시 봤더니

문자열의 길이가 4에서 6이 아니라

4 혹은 6이었다..!

 

import string

def solution(s):
    answer = True
    
    alpa = [i for i in string.ascii_letters ]
        
    for i in alpa:
        count = s.find(i)
        if count > -1:
            answer = False
            break
    
    if len(s) != 4 and len(s) != 6:
        answer = False
        
    return answer

처음에는 조건문을 or로 했다가 틀렸다..

or로 할 거면 len(s) == 4 or len(s) == 6: answer = True가 맞는건디..

 

 

 


 

다른 분들 풀이

def alpha_string46(s):
    #함수를 완성하세요

    return s.isdigit() and len(s) in [4,6]


# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( alpha_string46("a234") )
print( alpha_string46("1234") )

헐...isdigit()함수의 존재를 몰랐다. 

isdigit()함수는 문자열이 '숫자'로만 이루어져 있는지 확인하는 함수라고 한다. 문자가 하나라도 있으면 Flase를 반환하고

아니면 Ture를 반환한다고 한다. 

 

사용법은

str.isdigit("판단하고자 하는 문자열") 

혹은

"판단하고자 하는 문자열".isdigit()

단, 소수를 뜻하는 . 이나 음수를 뜻하는 -는 숫자가 아닌 문자로 판단한다고 한다. 

즉, 0을 포함한 양의 정수로만 이루어진 문자열에서 isdigit()를 사용했을 때 true가 나온다고 한다. 

 

참고: https://blockdmask.tistory.com/556

 

[python] 파이썬 isdigit 숫자 판별

안녕하세요. BlockDMask 입니다. 오늘은 파이썬에서 문자열이 숫자로 이루어졌는지 확인하는 isdigit 에 대해서 이야기해보려합니다. 파이썬 isdigit 설명 1-1) isdigit 설명 isdigit은 string 클래스에 있는

blockdmask.tistory.com

 

len(s) in [4, 6]은 문자열 s의 길이가 리스트에 포함되어 있나? 를 확인하는 거라고 한다! 

 

def alpha_string46(s):
    try:
        int(s)
    except:
        return False
    return len(s) == 4 or len(s) == 6 

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( alpha_string46("a234") )
print( alpha_string46("1234") )

와 여기서 try-catch문을 사용한다고?

진짜 인상 깊은 코드였다. 

나도 다음 번에 try-catch문을 사용해볼 수 있으면 해봐야지!