오늘 다뤄볼 내용.
최근 기묘한 이야기를 보던 와중 아이들이 모스부호로 소통하는것을 보았다. 예전에 벼랑위에포뇨라는 영화와 기생충이라는 영화에서도 자주 모스부호를 접할 수 있었는데, 사실 이 모스부호들을 외워서 사용하기가 너무 귀찮고 싫었다.
마침 이번 프로젝트에서 영문, 한글, 숫자를 모스부호로 해독해주면 어떨까 해서 만들게 되었다.
1. 한글, 영문, 숫자에 매칭되는 모스부호 딕셔너리 하드코딩하기
이 부분이 너무 지루하고 힘들었다.
morse_kr = {'ㄱ':'.-..','ㄴ':'..-.','ㄷ':'-...','ㄹ':'...-','ㅁ':'--','ㅂ':'.--','ㅅ':'--.','ㅇ':'-.-','ㅈ':'.--.','ㅊ':'-.-.','ㅋ':'-..-','ㅌ':'--..',
'ㅍ':'---','ㅎ':'.---','ㅏ':'.','ㅑ':'..','ㅓ':'-','ㅕ':'...','ㅗ':'.-','ㅛ':'-.','ㅜ':'....','ㅠ':'.-.','ㅡ':'-..','ㅣ':'..-', '#':'','ㅐ':'-.--','ㅔ':'--.-'}
morse_en = {'A' : '.-' , 'B' : '-...' , 'C' : '-.-.' , 'D' : '-..' , 'E':'.' , 'F':'..-.' , 'G':'--.' , 'H':'....' , 'I':'..' , 'J':'.---' ,
'K':'-.-' , 'L':'.-..' , 'M':'--' ,'N': '-.' ,'O': '---' , 'P': '.--.' , 'Q' : '--.-' , 'R': '.-.' ,'S': '...' ,'T' : '-' ,"U" : '..-' ,
'V': '...-' ,'W' :'.--' ,'X': '-..-' ,'Y': '-.--' ,'Z': '--..'}
morse_num = {'0':'-----','1':'.----','2':'..---','3':'...--','4':'....-','5':'.....','6':'-....','7':'--...','8':'---..','9':'----.'}
2. 영문 숫자 모스부호로 변환하기
사용자의 input을 통해 eng_to_morse / num_to_mores에 전달하도록 작성했다. 텍스트들을 for 구문으로 각각 morse_en이라는 위에서 하드코딩한 딕셔너리에 참조하도록 하여 변환할 수 있다.
def eng_to_mores(text):
en_to_morse = []
for n in text :
n = n.upper()
en_to_morse.append(morse_en[n])
return print(f"{text}은(는) 모스부호로 : {en_to_morse} 입니다.")
def num_to_mores(text):
n_to_morse = []
for n in text :
n_to_morse.append(morse_num[n])
return print(f"{text}은(는) 모스부호로 : {n_to_morse} 입니다.")
language에서 영어 혹은 숫자를 선택할 수 있다.
원하는 텍스트 입력 시 모스 부호로 변환해주는 함수에 통과시켜준다.
try 구문에는 영어, 숫자로 입력 시 진행되며, 다른 단어를 입력 시 다시 입력하도록 유도한다.
except 구문에는 KeyError가 발생 시 language에 맞는 단어가 아니기 때문에 다시 text를 입력하도록 한다.
finally 구문에는 계속 진행할지 종료할지 선택지가 있다.
print("모스부호 변환기가 작동합니다.")
power_on = True
while power_on :
language = input("모스 부호로 변환할 언어를 선택해주세요. (En / Num)\\n > ")
text = input("모스 부호로 변환할 텍스트를 입력해 주세요.\\n > ").replace(" ","")
try :
elif language == 'En' :
eng_to_mores(text)
elif language == 'Num' :
num_to_mores(text)
else :
print("(En / Kr / Num / Mark) 중 선택해주세요.")
except KeyError :
print(f"{language}에 맞는 텍스트를 작성해주세요.")
finally:
con = input("계속해서 다른 텍스트를 모스부호로 변환할까요? (Y / N)\\n > ")
if con == "N" :
print("모스부호 변환기를 종료합니다.")
power_on = False
3. 한글 기능 추가하기
영문, 숫자로는 조금 아쉬워 한글 기능을 추가하였다.
한글은 꽤나 까다로웠다.
먼저 한글은 초성, 중성, 종성으로 이루어져있기 때문에 (안 : ㅇ-초성 + ㅏ-중성 + ㄴ-종성) 각각 한글자씩 분리해줘야했다.
먼저 초성과 중성, 종성의 리스트화를 시켜주었다.