0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでモールス符号

Last updated at Posted at 2021-02-21

#はじめに
モールス符号に関するPythonを検索しても、日本語対応のものはあまりなかったため、日本語対応のものを作成しようと考えた。
日本語の辞書作成部分については、別途執筆する予定である。ソースコードはGitHubに載せてある。
また、音を実際に出しているものもなかったため、音も出してみた。周波数や間隔などはお好みで調整してほしい。

#基本方針
モールス符号の辞書に従い、符号化する。
日本語に対応するために、濁点の分離やひらがなをカタカナに統一する(日本語の辞書はカタカナで作成したため)機構を用意した。

#コード抜粋

def morse_encode(msg, morse_dict) -> list:
    encoded_lst = []
    for i in msg.upper():
        if i in morse_dict:
            encoded_lst.append(morse_dict.get(i))
        else:
            encoded_lst.append('[ERROR]')
            print('ERROR: ', i, 'is not in the dictionary.')
    return ' '.join(encoded_lst)

def morse_decode(msg, morse_dict) -> str:
    decoded_msg = ''
    reverse_morse_dict = dict((v,k) for (k,v) in morse_dict.items())
    for i in msg.split(' '):
        if i in reverse_morse_dict:
            decoded_msg += reverse_morse_dict.get(i)
        else:
            decoded_msg += '[ERROR]'
            print('ERROR: ', i, 'is not in the dictionary.')
    return decoded_msg

def dakuten_separator(msg):
    bytes_text = unicodedata.normalize('NFD', msg).encode()
    bytes_text = re.sub(b'\xe3\x82\x99', b"\xe3\x82\x9b", bytes_text)
    bytes_text = re.sub(b"\xe3\x82\x9a", b'\xe3\x82\x9c', bytes_text)
    return bytes_text.decode()

def morse_sound(morse):
    for i in morse:
        if i == '-':
            Beep(300, 75*3)
        elif i == '.':
            Beep(300, 75)
        else:
            sleep(0.075)

#ソースコード
GitHub: morse.py
GitHub: make_morse_dict.py

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?