goback

확인 요청

첨부한 코드를 제출할 경우,
아래와 같은 에러가 발생합니다.

실행 중 오류가 발생했습니다.
Traceback:
, in
, in no_continuous
IndexError: string index out of range

result.append(s[length-1])
이 부분이 문제인 것 같은데
Index out of range가 발생할 원인을 찾지 못하겠습니다.

작성중인 코드
def no_continuous(s):
    # 함수를 완성하세요
    length = len(s)
    result = [s[i] for i in range(length-1) if s[i]!=s[i+1] ]
    result.append(s[length-1])

    return result
2 개의 답변
정두식

문제가 발생하는 부분은 s[i]!=s[i+1]입니다.
제일 마지막 글자를 확인할때 그 다음 글자와 같은지 비교하게 되서 indexError가 발생하네요. 리스트 comprehension을 이용해서 문제를 잘 풀어주셨는데요. if문에서 마지막 글자인 경우에는 비교를 안하도록 해 주셔야 합니다.

tryhelloworld.co.kr/courses/파이썬-입문/lessons/논리연산-더-알아보기
에서 배운 내용을 이용해서 if의 조건을 구성해 보세요.

goback

length = len(s) 로 문자열 길이를 length에 대입한 후
result = [s[i] for i in range(length-1) if s[i]!=s[i+1] ] 에서
range(length-1) 로 마지막 문자 길이보다 +1 하지 않도록 했습니다.

no_continuous("123445566") 처럼
직접 데이터를 넣어서 실행하면 에러가 발생하지 않고
제출로 실행했을 때에만 에러가 발생하는게 이상하네요.

심지어 result = [s[i] for i in range(length-1) if s[i]!=s[i+1] ] 에서
if s[i]!=s[i+1] ] 를 삭제하고
result = [s[i] for i in range(length-1) 로 제출해도
인덱스 에러가 발생합니다만, 아직도 이해가 되지 않네요.

  • 정두식
    위의 코드에서 문제가 발생하는것이 아니라 ` result.append(s[length-1])`이 부분에서 인덱스 에러가 발생하네요. length가 0인경우도 있기 때문입니다. ― 정두식 2017.8.18 11:24
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.