프로그래밍/파이썬(Python)

코드카데미 파이썬(Codecademy Python) 강좌 – 문자열 검열(censor)

&+&& 2015. 11. 30. 00:05

  오늘은 코드카데미 파이썬(Codecademy Python) 강좌 해설 9번째 시간입니다. 이번 문제는 반복문 챕터의 [연습이 최고를 만든다]에 9번째 문제 [문자열검열(censor)] 입니다. 뭔가 제목만 봐서는 한글명칭, 영어명칭 둘 다 무엇을 하라는 얘기인지 잘 모르겠습니다.

  함수 censor을 작성하고, 두 개의 문자열, text와 word를 입력값으로 받아 text 안의 word 부분을 별표로 바꿔서 출력하도록 구현하는 되는 문제입니다. 단, 이 문제는 한글 버전의 결과 테스트가 잘못된 것으로 보이며, 해당 내용은 아래 코드 설명 부분에 따로 적어 놓았습니다.


  일단 완성된 코드를 보시면 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
def censor(text, word):             # censor을 선언
    lt = text.split()               # text입력값을 split한 후 lt에 할당
    for i in range(0len(lt)):     # 반복문을 lt의 길이만큼 선언합니다.
        if lt[i] == word:           # lt[i]가 word와 같다면
            lt[i] = "*" * len(word) # lt[i]를 별표로 치환합니다.
    return " ".join(lt)      # 연산이 끝난 lt를 조인한 후 반환
 
text=raw_input("Enter Text")        # 사용자로부터 text 문자열을 입력
word=raw_input("Enter word")        # 사용자로부터 word 문자열을 입력
print censor(text,word)             # censor을 호출하고 결과값을 출력합니다.
cs


  - 1열 : text, word를 입력값으로 하는 함수 censor를 선언합니다. 여태까지 인자값이 2개인 함수는 별로 없었죠?

  - 2열 : 문자열 text를 split하여 lt에 할당합니다. 이 부분은 힌트를 보시면 split과 join으로 구현하는 방법에 대한 내용이 있습니다.

  - 3열 : i가 0부터 lt의 길이일 때까지 반복하도록 설정합니다.

  - 4-5열 : lt[i]가 word와 같다면 해당 문자 부분을 별표(*)로 치환합니다.

  - 6열 : 반복문이 종료된 후 완성된 join연산 과정을 걸쳐 결과값을 반환합니다. 영문 버전의 경우 for 반복문이 모두 종료된 후 return을 해야 하고 한글버전은 한 번만 계산한 후 바로 return해야 합니다.(즉, if문의 참조건이 실행되면 바로 return합니다.) 이 부분은 한글 버전의 결과 체크 부분에 오류가 있는 것으로 보입니다.

  - 9-10열 : text와 word를 사용자로부터 입력받고 censor을 호출한 후 결과값을 출력합니다.



  완성된 문제를 실행해 보면 위와 같은 결과값이 출력됩니다.

  위 결과 화면은 영문 버전이구요. 한글버전은 결과값이 [this **** is wack hack]이라고 나와야 통과가 됩니다.