트랙
/
Python
Python
/
연습 문제
/
여동생의 에세이
여동생의 에세이

여동생의 에세이

학습 연습 문제

소개

str 클래스는 문자열을 다루고 조합하는 데 쓸 수 있는 다양한 유용한 메서드를 제공해요. 여기에는 검색, 정리, 분할, 변환, 번역을 비롯한 여러 가지 기법이 포함돼요.

문자열은 유니코드 코드 포인트의 시퀀스예요. 개별 "문자", 즉 코드 포인트(길이가 1인 문자열)는 왼쪽에서부터 0-based index 번호로, 또는 오른쪽에서부터 -1-based index 번호로 참조할 수 있어요. 문자열은 공통 시퀀스 연산을 모두 지원해요.

for item in <str> 또는 for index, item in enumerate(<str>) 구문으로 반복할 수 있어요. <str> + <other str> 또는 <str>.join(<iterable>)로 이어 붙일 수도 있어요.

문자열은 _불변_이라서, 메모리에 있는 str 객체의 값은 바뀔 수 없어요. str에 작용하는 함수나 메서드(지금 배우고 있는 것들처럼)는 원래 str을 수정하는 대신 그 str 객체의 새로운 instance를 반환해요.

다음은 Python 문자열 메서드 중 일부예요. 전체 목록은 Python 문서의 str 클래스를 참고해요.

<str>.title()는 문자열을 분석해서 찾은 각 "단어"의 첫 "문자"를 대문자로 만들어요. Python에서는 이것이 사용된 언어 코덱에 따라, 그리고 해당 언어가 단어와 문자를 표현하는 방식에 따라 크게 달라져요. 언어나 문자 집합에 따라 로케일 규칙이 적용될 수도 있어요.

man_in_hat_th = 'ผู้ชายใส่หมวก'
man_in_hat_ru = 'мужчина в шляпе'
man_in_hat_ko = '모자를 쓴 남자'
man_in_hat_en = 'the man in the hat.'

>>> man_in_hat_th.title()
'ผู้ชายใส่หมวก'

>>> man_in_hat_ru.title()
'Мужчина В Шляпе'

>>> man_in_hat_ko.title()
'모자를 쓴 남자'

>> man_in_hat_en.title()
'The Man In The Hat.'

<str>.endswith(<suffix>)는 문자열이 <suffix>로 끝나면 True를, 그렇지 않으면 False를 반환해요.

>>> 'My heart breaks. 💔'.endswith('💔')
True

>>> 'cheerfulness'.endswith('ness')
True

# Punctuation is part of the string, so needs to be included in any endswith match.
>>> 'Do you want to 💃?'.endswith('💃')
False

>> 'The quick brown fox jumped over the lazy dog.'.endswith('dog')
False

<str>.strip(<chars>)는 str의 앞뒤에 있는 <chars>를 제거한 복사본을 반환해요. <chars>에 지정된 코드 포인트는 접두사나 접미사가 아니에요. 코드 포인트의 모든 조합이 문자열의 양쪽 끝에서부터 제거돼요. <chars>에 아무것도 지정하지 않으면, 공백 코드 포인트의 모든 조합이 제거돼요.

# This will remove "https://", because it can be formed from "/stph:". 
>>> 'https://unicode.org/emoji/'.strip('/stph:')
'unicode.org/emoji'

# Removal of all whitespace from both ends of the str.
>>> '   🐪🐪🐪🌟🐪🐪🐪   '.strip()
'🐪🐪🐪🌟🐪🐪🐪'

>>> justification = 'оправдание'
>>> justification.strip('еина')
'оправд'

# Prefix and suffix in one step.
>>> 'unaddressed'.strip('dnue')
'address'

>>> '  unaddressed  '.strip('dnue ')
'address'

<str>.replace(<substring>, <replacement substring>)는 문자열에서 <substring>이 나타나는 모든 부분을 <replacement substring>으로 바꾼 복사본을 반환해요.

아래에 쓰인 인용구는 Lewis Carroll의 The Hunting of the Snark에서 가져왔어요.

# The Hunting of the Snark, by Lewis Carroll
>>> quote = '''
"Just the place for a Snark!" the Bellman cried,
   As he landed his crew with care;
Supporting each man on the top of the tide
   By a finger entwined in his hair.

"Just the place for a Snark! I have said it twice:
   That alone should encourage the crew.
Just the place for a Snark! I have said it thrice:
   What I tell you three times is true."
'''

>>> quote.replace('Snark', '🐲')
...
'\n"Just the place for a 🐲!" the Bellman cried,\n   As he landed his crew with care;\nSupporting each man on the top of the tide\n   By a finger entwined in his hair.\n\n"Just the place for a 🐲! I have said it twice:\n   That alone should encourage the crew.\nJust the place for a 🐲! I have said it thrice:\n   What I tell you three times is true."\n'

>>> 'bookkeeper'.replace('kk', 'k k')
'book keeper'

지침

이 연습 문제에서는 여동생이 학교에 낼 글을 다듬는 일을 도와줘요. 선생님은 올바른 문장 부호와 문법, 그리고 훌륭한 단어 선택을 기대해요.

문자열을 다듬고 수정하는 네 가지 작업이 있어요.

1. 글 제목의 첫 글자를 대문자로 만들기

좋은 글에는 제대로 된 형식의 제목이 필요해요. capitalize_title(<title>) 함수를 구현해요. 이 함수는 제목 str을 매개변수로 받아 각 단어의 첫 글자를 대문자로 만들어요. 이 함수는 제목 형식의 str을 반환해야 해요.

>>> capitalize_title("my hobbies")
"My Hobbies"

2. 각 문장이 마침표로 끝나는지 확인하기

글의 문장 부호가 완벽한지 확인하고 싶어요. check_sentence_ending() 함수를 구현해요. 이 함수는 sentence를 매개변수로 받아요. bool을 반환해야 해요.

>>> check_sentence_ending("I like to hike, bake, and read.")
True

3. 불필요한 공백 정리하기

글이 전문적으로 보이게 하려면 불필요한 공백을 없애야 해요. clean_up_spacing() 함수를 구현해요. 이 함수는 sentence를 매개변수로 받아요. 이 함수는 문장의 앞과 뒤에 있는 여분의 공백을 제거하고, 다듬어진 새로운 문장 str을 반환해야 해요.

>>> clean_up_spacing(" I like to go on hikes with my dog.  ")
"I like to go on hikes with my dog."

4. 단어를 동의어로 바꾸기

글을 더욱 좋게 만들려면 일부 형용사를 동의어로 바꿀 수 있어요. replace_word_choice() 함수를 작성해요. 이 함수는 sentence, old_word, new_word를 매개변수로 받아요. 이 함수는 old_word를 모두 new_word로 바꾸고, 수정된 문장이 담긴 새로운 str을 반환해야 해요.

>>> replace_word_choice("I bake good cakes.", "good", "amazing")
"I bake amazing cakes."
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

여동생의 에세이 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.