-
반응형
초등학교 1학년생 딸아이의 국어 과제로 초성 낱말 찾기가 주어지는 경우가 있다.
매번 초성에 맞춰 눈빠지게 글자 찾기가 귀찮아서 초성 문자열이 주어지면 거기에 맞는 글자 조합을 출력하는 프로그램을 작성해 봤다.
- 주어지는 글자들을 초성별로 모은다.
- 초성으로만 구성된 문자열을 받아서 초성에 해당하는 문자들에 대해 production으로 초성 순서에 맞는 글자 조합들을 만들어 출력한다.
from itertools import product def get_char_set(ch_list): views = list() for cl in ch_list: for c in ch_list[cl]: views.append(c) views.sort() print('입력된 글자: ' + ', '.join(views)) initial_consonants = [ 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' ] f_c_num = 44032 # '가'에 해당하는 code code_n_ic = dict() for i in range(len(initial_consonants)): for code in range(f_c_num, f_c_num + 588): code_n_ic[code] = initial_consonants[i] f_c_num += 588 # {'ㄱ': ['가', '길', '긴'], ...} 형태로 저장. ch_list = dict() for i in range(len(initial_consonants)): ch_list[initial_consonants[i]] = list() print('초성 낱말 찾기에 사용될 글자들을 한 글자 씩 입력 후 엔터') print('입력 완료 시 0 입력 후 엔터') while True: print('>>', end='') ch = input() if len(ch) > 1: print('한 글자씩만 입력') continue if ch == '0': break try: ch_list[code_n_ic[ord(ch)]].append(ch) get_char_set(ch_list) except KeyError: pass # 초성 string을 입력 받는다. print('ㅅㄹㅎ 와 같은 형태의 자음으로만 이뤄진 문자열을 입력하고 엔터') print('종료 하려면 0입력 후 엔터') while True: ic_str = input() if ic_str == '0': break is_no_res = False word_list = list() for ch in ic_str: try: if len(ch_list[ch]) == 0: is_no_res = True word_list.append(ch_list[ch]) except KeyError: print('>> 결과 없음 <<') if is_no_res: print('>> 결과 없음 <<') else: for word in product(*word_list): print(''.join(word))
국어사전 DB가 있으면 사전에 등록된 단어인지 아닌지를 구분하여 알려주도록 개선해볼 수도 있겠다. ^^
'ETC' 카테고리의 다른 글
순열과 조합 (0) 2022.11.12 로지텍 MX KEYS MINI 사용기 (0) 2022.03.19 로지텍 keys to go 사용기 (0) 2021.06.27 IP주소 확인 (0) 2020.12.08 빌더 패턴 (0) 2020.10.12