ETC
초성 낱말 찾기
낙타선생
2021. 12. 3. 19:11
반응형
초등학교 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가 있으면 사전에 등록된 단어인지 아닌지를 구분하여 알려주도록 개선해볼 수도 있겠다. ^^