![見出し画像](https://assets.st-note.com/production/uploads/images/10256672/rectangle_large_type_2_11db086acd461abeddc3747ae6650d1d.jpeg?width=800)
Photo by
ura_310
[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
この記事が気に入ったらサポートをしてみませんか?