def solution(new_id):
rec_id = []
for i in range(len(new_id)):
word = new_id[i].lower()
if word in ['-', '_', '.'] or word.encode().isalpha() or word.isdigit():
rec_id.append(word)
i = 0
while i < len(rec_id):
try:
if rec_id[i] == '.' and rec_id[i+1] == '.': # 개인적으로 고민이 많았던 부분 : 연속된 문자열 하나로 줄이기
rec_id[i:i+2] = ['.'] # whie에서 index=0으로 초기화 시키는 것이 필요
i = 0 # 필연적으로 발생하는 indexerror에 대한 예외 처리 필요
else:
i += 1
except IndexError:
i += 1 # 문제 발생 지점 : 변화식 처리하지 않음
if rec_id != []: # 문제 발생 지점 : 값이 존재할 때와 존재할 때를 나눠서 처리하지 않음
if rec_id[0] == '.':
rec_id.pop(0)
if rec_id != []: # 문제 발생 지점 : 바로 위 if문에 의해 빈 리스트가 생성될 수 있기 때문에 다시 한 번 흐름 처리 필요
if rec_id[-1] == '.':
rec_id.pop()
else: # 문제 발생 지점 : 값이 존재하지 않는 경우에 대한 흐름 처리 필요
rec_id.append('a')
else:
rec_id.append('a')
if len(rec_id) >= 16:
rec_id[15:] = []
if rec_id[-1] == '.':
rec_id.pop()
if len(rec_id) <= 2:
while len(rec_id) < 3:
rec_id.append(rec_id[-1])
answer = ''.join(rec_id)
return answer
print(solution("z-+.^."))
문제점
연속된 문자열을 하나의 문자열로 줄일 때 고려해야하는 점: 1. 인덱스 초기화 2. index error 예외처리
if iterable객체[i] == '.' and iterable객체[i+1] == '.':와 같은 코드를 실행시키면(i값 1씩 증가), 필연적으로 index값이 iterable객체의 범위를 초과하는 index error가 발생하기 때문에 예외처리가 반드시 필요하다.except절 내부에도 i값의 변화식을 입력해야 한다.리스트 객체의 요소를 pop(), remove() 등으로 삭제하는 경우, 해당 객체의 길이가 줄어들고, 경우에 따라서 빈 리스트(list())가 될 수 있기 때문에, 주의해야 한다.
'문자열'.encode().isalpha(): 문자열이 알파뱃이면 True 반환'문자열'.isdigit(): 문자열이 숫자면 True 반환'구분자'.join(iterable객체): iterable객체의 요소들을 '구분자'로 구분하여 문자열 형태로 출력