본문 바로가기

Python/기초 실습

문자열 | 알고리즘 코드 카타 36번 - 문자열 다루기 기본(range)

문제 설명

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

 

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

입출력 예

s return
"a234" false
"1234" true

 

▶️ 내 코드

def solution(s='1234'):
    answer = True
    rg = ['0' , '1', '2', '3', '4', '5', '6', '7', '8', '9']
    print(type(rg))
    if (len(s) == 4) or (len(s) == 6):
        for num in s:
            print(num)
            if num in rg:
                answer
            else: 
                answer = False
    else:
        answer = False
    return answer

 

❗️어려웠던 점

처음에 rg 변수를 range(10)으로 할당했는데 type(rg)가 <class ‘range’>로 출력됨.

‘if num in rg:’ 여기서 num(int)과 s(str)의 타입이 맞지 않아 오류 발생

rg를 리스트로 일일이 작성해야 했음

⇒ ‘0123456789’인 문자열로 작성하면 문자열이 길어질 시 한계는 있지만 이 문제에선 더 간편함.

 

def solution(s='1234'):
    answer = True
    rg = range(10)
    print(type(rg))
    if (len(s) == 4) or (len(s) == 6):
        for num in str(rg):
            print(num)
            if num in s:
                answer
            else: 
                answer = False
    else:
        answer = False
    return answer

solution('1234')

range(10)은 리스트형 타입이므로 이를 string화 했을 때

['0' , '1', '2', '3', '4', '5', '6', '7', '8', '9'] 같은 출력을 예상.

→ range(10) 자체가 문자열화 되어 한 문자씩 출력됨.

 

왜???????????

 

🫠

<class ‘range’>인 것도 알겠으나, 결국 리스트형 타입 아닌가…???

보론: 파이썬에서 list와 range의 관계

 

보론: 파이썬에서 list와 range의 관계

[BY 안국이] range는 list를 만드는 함수가 아니다위 코드를 다음의 코드와 비교하여 봅시다.이것만 보...

m.post.naver.com

 

 

👁️👁️참고할만한 코드

#1. try - except 개념 공부하기

#1번
def solution(s):
    l = len(s)
    try:
        a = int(s)
        if l == 4 or l == 6:
            return True
        else:
            return False
    except:
        return False
        
 #2번       
 def alpha_string46(s):
    try:
        int(s)
    except:
        return False
    return len(s) == 4 or len(s) == 6 

 

#2. isdigit() 함수

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