Coding for KidsCoding for Kids
창의적인 레벨도전 과제교사 가이드
기능 투표
고급 파이썬 개발 과정
챕터
>
레벨

문자열 및 시간 모듈
문자열 모듈

목표

string 모듈을 사용하여 지원서 데이터를 취합하고 응답 편지를 발송합니다.

이제 새 농장 건설 자재들이 확보되었으므로, 농장을 위한 새로운 인력에 주목할 차례입니다. 구직 신청서를 위한 여러 편지들을 발송해야 하는 상황인데, 당연히 글을 많이 작성해야겠지만, string 모듈을 활용하여 템플릿을 만들고 텍스트를 포맷팅하면 다량의 텍스트를 보다 쉽고 효과적으로 관리할 수 있습니다.

이번에는 string 모듈을 임포트 할 때 다른 모듈들과는 조금 다르게 클래스를 확장하는 방식으로 임포트하게 되며, 다음과 같이 실행됩니다:

import string from string import Template from string import Formatter

이를 통해 모듈 자체 뿐만 아니라 자체 함수를 포함한 템플릿 및 포맷팅 클래스로 접근할 수 있게 됩니다. 우리 목적을 위해 다음의 함수와 클래스를 사용할 것입니다:

  • string.capwords(): 이 함수는 문자열의 각 단어를 올바른 대문자 형태로 변환합니다. 단어의 첫 글자는 대문자로, 나머지 글자는 소문자로 변환하여 문자열이 어떻게 포맷팅되어 있든 상관없이 형태를 맞춰줍니다.
  • Template(): 이는 문자열 클래스입니다. 템플릿 객체를 생성하는 데 사용되며, $ 기호를 사용하여 데이터를 교체할 위치를 표시하고 substitute() 함수를 사용하여 문자열을 설정할 수 있게 해줍니다. 이를 통해 필요에 따라 사용할 수 있는 모듈형 문자열을 생성할 수 있습니다.
  • Formatter(): 이는 문자열 클래스입니다. 문자열을 포맷하거나 조합하는 데 사용되며, Template() 클래스와 유사하게 작동하지만 더 강력하여 긴 문자열 시퀀스에 적합합니다. {}를 사용하여 문자열 데이터를 삽입할 수 있는 format() 함수를 사용합니다.

먼저, 빛나는 X 표시 쪽으로 걸어가서 파일 캐비닛을 바라보며 read() 함수를 사용합니다. 이렇게 하면 여러 지원자의 이름이 포함된 폴더들에 접근할 수 있습니다. 이 폴더들은 각각 folder_a , folder_b 그리고 folder_c라는 세 (3) 개의 리스트 상수로 제공됩니다.

초록색 카펫 위의 어두운 X 표시 쪽으로 걸어가서 책상을 바라봅니다. 그 후 names_a , names_b, 그리고 names_c라는 세 (3) 개의 리스트를 생성하세요. 리스트 내포(list comprehension)와 string.capwords() 함수를 사용하여 이름들의 올바른 대문자 형태로 포맷팅합니다. 예를 들어, names_a의 경우 folder_a에 대해 string.capwords()를 사용하여 다음과 같이 작성합니다: names_a = [string.capwords(x) for x in folder_a] . 이 동일한 방식으로 names_bnames_c를 작성하세요.

all_names라는 리스트를 생성하고 세 (3) 개의 이름 리스트를 합산합니다, 예를 들어: all_names = names_a + names_b + names_c . 이는 모든 리스트를 하나의 큰 리스트로 결합해줍니다. 그 후, 파이썬의 join() 함수를 사용하여 리스트 내의 모든 항목을 문자열로 결합합니다. 예를 들어 각 리스트 아이템 사이에 쉼표와 공백을 넣고 싶다면 다음과 같이 작성합니다: all_names = ", ".join(all_templates) . 미리 작성된 write() 함수를 사용하여 올바른 대문자 형태로 표기된 모든 이름을 기록하세요.

다음으로, 금색 X 표시 쪽으로 걸어가서 책상을 바라봅니다. 여기에서는 템플릿을 설정할 것입니다. 미리 작성된 두 개의 템플릿 객체인 red_templatesblue_templates가 있습니다:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

각 템플릿은 독특한 메시지를 가지고 있지만 둘 다 한 가지 공통점을 가지고 있습니다. 바로 $name이라는 플레이스홀더인데, $ 기호는 교체될 수 있는 플레이스홀더를 나타내며 이 경우 제목에서 알 수 있듯이 이름을 의미합니다. 만약 값이 교체되지 않으면 템플릿은 문자열 내의 플레이스홀더를 그대로 사용합니다. 이와 더불어 all_templates라는 리스트를 생성하세요.

네 (4) 회의 사이클을 갖는 for 루프를 생성하여, 세 (3) 개의 이름 리스트 내의 이름들을 템플릿과 함께 교체합니다. 예를 들어, red_templatenames_a 리스트에 적용할 것입니다. Template() 클래스의 substitute() 함수를 사용하여 템플릿 내의 $name 플레이스홀더를 리스트 내의 이름으로 교체하세요.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

names_bnames_c도 동일하게 진행하세요. names_b의 경우에는 red_template을 사용하고, names_c의 경우에는 blue_template을 사용합니다.

모든 이름 리스트가 새로운 템플릿으로 채워지면, 이를 검토할 차례입니다. all_templates라는 새 리스트를 생성하고, 세 개의 이름 리스트를 합칩니다. 예를 들어: all_templates = names_a + names_b + names_c . 이전과 동일하게 join() 함수를 사용하여 모든 템플릿 처리된 이름들을 가독성 있는 형태로 결합합니다. 예를 들어: all_templates = "\n".join(all_templates) . 미리 작성된 write() 함수를 사용하여 다양한 이름들의 모든 헤더를 기록하세요.

다음으로, 빨간 카펫 위의 어두운 X 표시 쪽으로 걸어가서 책상을 바라봅니다. 여기에서는 첫 번째 편지 세트를 포맷팅하고 작성할 것입니다. 우선 red_1red_2라는 두 (2) 개의 Formatter 객체를 클래스 표기법을 사용하여 생성합니다: red_1 = Formatter() , red_2 = Formatter() . 편지를 구성하기 위해 red_letters라는 리스트를 생성하세요.

이전과 유사하게 네 (4) 회의 사이클을 갖는 for 루프를 생성합니다. 그러면 두 세트의 미리 작성된 문자열들이 format() 함수를 사용하여 포맷팅되고 이름 변수들이 추가됩니다. 이 포맷팅된 문자열들은 red_letters 리스트에 추가되어 발송될 편지들의 포괄적인 리스트를 형성합니다. 예를 들어, red_1 포맷 객체는 names_a 리스트와 함께 포맷팅된 후 red_letters 리스트에 추가됩니다.

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

red_2 포맷 객체를 사용하여 미리 작성된 문자열과 함께 names_b를 루프에 추가하는 방식도 동일하게 진행하세요. 이 설정이 완료되면, join() 함수를 사용하여 red_letters 리스트의 데이터를 하나의 파일로 결합합니다. 예를 들어: red_letters = "\n".join(red_letters) . 미리 작성된 write() 함수를 사용하여 발송될 모든 포맷팅된 편지들을 기록하세요.

마지막으로, 파란 카펫 위의 어두운 X 표시 쪽으로 걸어가서 책상을 바라봅니다. 여기에서는 마지막 편지 세트를 포맷팅하고 작성할 것입니다. 이전과 같이 클래스 표기법을 사용하여 blue_1blue_2라는 두 (2) 개의 Formatter 객체를 생성합니다: blue_1 = Formatter() , blue_2 = Formatter() . 모든 편지를 포맷팅하고 작성하기 위해 blue_letters 리스트를 생성하세요.

다시 네 (4) 회의 사이클을 갖는 for 루프를 생성하고 미리 작성된 문자열을 사용하여 이름 리스트들을 포맷팅한 후, format() 함수를 통해 blue_letters 리스트에 추가합니다. 이 경우, blue_1 포맷 객체는 names_c 리스트와 함께, blue_2 포맷 객체는 names_b 리스트와 함께 사용됩니다. 이는 빨간 카펫의 경우와 동일한 방식으로 진행되지만, 다른 값을 사용하여 포맷과 템플릿의 다양성을 보여줍니다. 설정이 완료되면, 미리 작성된 write() 함수를 사용하여 마지막 편지들을 기록하고 레벨을 완료하세요.

코드북