見出し画像

[Python]77行で作るモールス信号変換器

1.モールス信号変換器

英字をモースル信号に変換するプログラムを作ります。また、モールス信号を逆に英字に変換して復号できる機能も作成します。今回は変換器を以下のクラスで表現してみました。

2.コード

from getpass import getpass

class MolsCodeConverter:
    def __init__(self):
        self.chara_map = {
                          "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": "--・・"
                          }
        self.code = ""
        self.message = ""

    def listen(self):
        message = getpass("Enter your message:")
        return message
    
    def context_to_list(self, context, type="msg"):
        if type == "msg":
            context_to_upper = context.upper()
            context_rm_space = context_to_upper.replace(" ", "")
            context_list = [con for con in context_rm_space]
        elif type == "code":
            context_list = context.split()
        return context_list

    def message_to_code(self, msg_list):
        for msg in msg_list:
            code = self.chara_map[msg]
            self.code += code + " "
        else:
            self.code.rstrip()
        
        return self.code
    
    def code_to_message(self, code_list):
        for code in code_list:
            chara = [k for k, v in self.chara_map.items() if v == code][0]
            self.message += chara + " "
        else:
            self.message + "."
        
        return self.message

if __name__ == "__main__":
    converter = MolsCodeConverter()
    en_type = int(input("1:MESSAGE=>CODE/2:CODE=>MESSAGE? "))
    context  = converter.listen()
    if en_type == 1:
        message_list = converter.context_to_list(context)
        message = converter.message_to_code(message_list)
        print(message)
    elif en_type == 2:
        code_list = converter.context_to_list(context, type="code")
        code = converter.code_to_message(code_list)
        print(code)

   

3.実行結果

1:MESSAGE=>CODE/2:CODE=>MESSAGE? 1
Enter your message:
・・ ・-・・ --- ・・・- ・ -・-- --- ・・- 

1:MESSAGE=>CODE/2:CODE=>MESSAGE? 2
Enter your message:
I L O V E Y O U 



この記事が気に入ったらサポートをしてみませんか?