심사문제 24.5 strip()을 사용할때의 착각
, 이 태현님이 작성답답했습니다.
제가 착각했더군요. strip()메서드는 중간 중간의 것들을 제거해주지 않습니다. 다만 입력된 문자열의 양 끝에서만 제거해 줍니다.
'asdf, asdf, adsf.'.strip(',.') 해봐야 중간의 ','들은 없어지지 않아요.
한번에 모두 제거하고 싶으시면,
strip()이 아닌 replace()를 사용하셔야 합니다.
당연한 문제를 혼자 고민한거 맞죠?
Re: 심사문제 24.5 strip()을 사용할때의 착각
, 도장_ 관리자님이 작성심사문제는 strip이나 replace, 어느 것을 사용해도 풀 수 있습니다.
그러나 문제의 의도는 strip을 사용하는 것일 뿐입니다.
단어를 처리하는 문제이기 때문에 공백을 기준으로 각각의 단어로 분해하는 것입니다.
단어의 앞뒤에 붙은 구두점은 strip으로 제거하는 것입니다.
replace는 단어로 분해하지 않고 문장 전체에서 문자열을 치환하는 것입니다. 이것으로도 구두점을 제거할 수는 있습니다.
심사문제의 해설을 보면 split을 사용하고, strip을 사용하라고 되어 있는 이유입니다.
문제를 해결하는 방법은 여러 가지가 있습니다.
UNIT 24까지 학습한 내용을 토대로는
strip, replace, translate를 사용한 방법이 가능합니다.
UNIT 43에서는 정규 표현식을 이용한 sub로 구두점을 제거할 수 있습니다.
오해는 누구나 할 수 있고, 시행착오는 배움의 과정입니다.
strip은 중간을 제거하지 않으니 먼저 단어로 분해해서 처리하는 것입니다.
replace라면 전체 문자열을 처리한 다음에 다시 단어로 분해해서 처리해야 겠지요.
That is why, at the, age of six,
테스트 케이스의 일부입니다.
>>> paragraphs = 'That is why, at the, age of six,'
>>> words = paragraphs.split()
>>> words
['That', 'is', 'why,', 'at', 'the,', 'age', 'of', 'six,']
>>> words = paragraphs.split()
>>> words
['That', 'is', 'why,', 'at', 'the,', 'age', 'of', 'six,']
>>> for word in words:
if word.strip(',.') == 'the':
count += 1
>>> count
1
>>>
if word.strip(',.') == 'the':
count += 1
>>> count
1
>>>
이해가 어려우면 반복문을 변형해서 출력해보면서 단계를 이해하면 됩니다.
>>> for word in words:
print(word)
That
is
why,
at
the,
age
of
six,
>>>
print(word)
That
is
why,
at
the,
age
of
six,
>>>
온라인 파이썬 시각화를 이용해서 시각화로 단계별로 실행하면 이해하기 쉽습니다.