오늘 다뤄볼 내용.

최근 기묘한 이야기를 보던 와중 아이들이 모스부호로 소통하는것을 보았다. 예전에 벼랑위에포뇨라는 영화와 기생충이라는 영화에서도 자주 모스부호를 접할 수 있었는데, 사실 이 모스부호들을 외워서 사용하기가 너무 귀찮고 싫었다.

마침 이번 프로젝트에서 영문, 한글, 숫자를 모스부호로 해독해주면 어떨까 해서 만들게 되었다.

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. 한글 기능 추가하기

영문, 숫자로는 조금 아쉬워 한글 기능을 추가하였다.

한글은 꽤나 까다로웠다.

먼저 한글은 초성, 중성, 종성으로 이루어져있기 때문에 (안 : ㅇ-초성 + ㅏ-중성 + ㄴ-종성) 각각 한글자씩 분리해줘야했다.

먼저 초성과 중성, 종성의 리스트화를 시켜주었다.