파이썬 관련 질문입니다. (문자열 압축하기)

조회수 705회

책 보면서 공부하고 있는데 이리저리 코드를 뜯어서 고쳐봐도 왜 실행이 안되는지 모르겠습니다 ㅠㅜ 고수님들 좀 도와주세요.

문자열을 입력받아서 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시합니다.
입력예시: aaabbcccccca
출력예시: a3b2c6a1

테스트를 편하게 하려고 직접 입력 대신에 코드 안에 박아뒀습니다. 문자가 반복된 횟수 만큼 표시하고자 하는데 재귀함수를 이용해보려고 합니다.

lttr = []
lttr = "aaabbcccccca"
cnt = 0

def listing():
    if cnt < len(lttr):
        if lttr[cnt] == lttr[cnt + 1]:
            cnt = +1
            if lttr[cnt] != lttr[cnt + 1]:
                print(lttr[cnt] % (d + 1) % cnt)
            listing(cnt)
        else:
            print(lttr[cnt] + "1")
            cnt = +1
            listing(cnt)

기존 코드에서 return 값이 필요없도록 조금 수정했습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 무슨 의도입니까? nowp 2019.9.18 18:59
  • 이대로 실행하시면 당연히 아무런 결과값도 나오지않습니다. 함수를 정의만하셨어요 listing()을 실행해주세요. 알 수 없는 사용자 2019.9.19 10:15

1 답변

  • 일단, 재귀함수를 잘못 만들었습니다.

    def listing(cnt):
        if cnt < len(lttr):
            if lttr[cnt] == lttr[cnt + 1]:
                cnt = +1
                return cnt
                if lttr[cnt] != lttr[cnt + 1]:
                    print(lttr[cnt] % (d + 1) % cnt)
                listing(cnt)
    

    질문 코드 중에 일부입니다. 여기서 return cnt 이후 listing(cnt) 까지는 절대 수행될 수 없습니다. return cnt 에서 함수는 값을 반환하고 나가기 때문입니다.

    • 말씀하신대로 return 값이 필요 없도록 코드를 수정한다면 다음 문제는 뭐가 될까요 ㅠ 알 수 없는 사용자 2019.9.18 20:35
    • @윤 return 값이 필요없다고 하지 않았습니다. 사실 코드가 너무 엉망이라 어떻게 고쳐야할지... 뭔가 의도가 있어서 (짐작이 안갑니다.) 고쳐봤다고 생각합니다. 자기 생각을 좀 더 잘 정리해서, (한국어로 가짜코드(수도코드)를 써본 다음에, 실제 파이썬으로 바꾸어 보시기 바랍니다.) nowp 2019.9.18 20:48
    • 말씀 감사합니다. 다시 정리해봐야겠네요~ 알 수 없는 사용자 2019.9.18 20:59

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)