반응형
문제 :
주민번호에서 맨 뒷자리 4개만 *로 수정한다.
기본 코드
def mask_security_number(security_number):
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
시행 착오 1 : 별표 변환이 이상하다.
무엇이 문제일까?
def mask_security_number(security_number):
security_number = list(security_number)
for i in range(len(security_number)-1,9,-1) : # 역순
security_number[i] = "*" # 맨 뒤
i -= 1
return security_number
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
실행결과에서 하이픈이 있는 경우에만 4자리가 *로 수정되고 하이픈이 없으면 3자리만 *로 수정된다.
시행 착오2 : 리스트에서 문자열로 변환하기
무엇이 문제일까?
def mask_security_number(security_number):
security_number = list(security_number)
# 역순 반복
# 시작 인덱스가 제일 끝부분, 엔딩 인덱스는 끝에서 4번째
for i in range(len(security_number)-1,len(security_number)-5,-1) :
security_number[i] = "*" # 맨 뒤
i -= 1
# 리스트 -> 문자열 변환
security_number = str(security_number)
return security_number
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
문제 해결
def mask_security_number(security_number):
# 파라미터 str 타입 > list 타입 변환
security_number = list(security_number)
# 역순 반복
# 시작 인덱스가 제일 끝부분, 엔딩 인덱스는 끝에서 4번째
for i in range(len(security_number)-1,len(security_number)-5,-1) :
security_number[i] = "*" # 맨 뒤
i -= 1
# 리스트 -> 문자열 변환
security_number = "".join(security_number)
return security_number
내가 푼 문제2
def mask_security_number(security_number):
# 파라미터는 str타입
new_list = []
# str을 수정하기 위해 리스트로 변환1
new_list = list(security_number)
'''
# str을 수정하기 위해 리스트로 변환2
for index in range(len(security_number)) :
new_list.append(security_number[index])
'''
# -4번째 인덱스 ~ -1 인덱스까지 *로 변환
for index in range(-4,0) :
new_list[index] = "*"
new_list = "".join(new_list)
return new_list
모범 답안1
def mask_security_number(security_number):
# security_number를 리스트로 변환
num_list = list(security_number)
# 마지막 네 값을 *로 대체
for i in range(len(num_list) - 4, len(num_list)):
num_list[i] = "*"
# 리스트를 문자열로 복구
total_str = ""
for i in range(len(num_list)):
total_str += num_list[i]
return total_str
모범 답안2
def mask_security_number(security_number):
num_list = list(security_number)
# 마지막 네 값을 *로 대체
for i in range(len(num_list) - 4, len(num_list)):
num_list[i] = '*'
# 리스트를 문자열로 복구하여 반환
return ''.join(num_list)
모범 답안3 : 문자열을 리스트로 변경하지 않아도 문자열을 변경할 수 있구나.
def mask_security_number(security_number):
return security_number[:-4] + '****'
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
반응형
'● 알고리즘, 자료구조 > 2021 알고리즘' 카테고리의 다른 글
알고리즘, datetime 모듈 (0) | 2021.06.01 |
---|---|
펠린드롬 | 함수, 리스트, 문자열 (0) | 2021.05.31 |
피타고라스 | for 반복문 (0) | 2021.05.31 |
자릿수 합 구하기 | 함수, 반복문, 리스트와 스트링 타입의 특징 활용 (0) | 2021.05.31 |
투표 집계하기 : 사전, 리스트 (0) | 2021.05.31 |