문제 설명
문자열 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’>인 것도 알겠으나, 결국 리스트형 타입 아닌가…???
👁️👁️참고할만한 코드
#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]
'Python > 기초 실습' 카테고리의 다른 글
반복문 | 알고리즘 코드 카타 37번 - 행렬의 덧셈(들여쓰기) (0) | 2024.05.07 |
---|---|
map | 알고리즘 코드 카타 38번 - 직사각형 별찍기 (0) | 2024.05.07 |
반복문 | 위키독스 185번 - 리스트와 행렬 (0) | 2024.05.07 |
위키독스 복습 1 - 120번대 (0) | 2024.05.02 |
반복문 | Dictionary 활용 (0) | 2024.04.30 |