莫尔斯电码到字母数字(python)

时间:2015-04-12 08:50:00

标签: python morse-code

我需要编写一个可以使用莫尔斯代码对消息进行编码/解码的程序。

要对消息进行编码,程序需要读取包含字母数字字符的输入文件,然后输出相应的莫尔斯编码消息。

要解码消息,程序将使用摩尔斯电码读取文件,然后输出字母数字字符。

这是我到目前为止所做的,但我无法正确解码:

import string

def to_from(text, dict_in):
    for i in text:
        if i.upper() in dict_in:
            print "%6s" % (dict_in[i]),
        else:
            print i, "not in dictionary"
    print

letters = {'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': '--**',
        '0': '-----',  '1': '*----',  '2': '**---',
        '3': '***--',  '4': '****-',  '5': '*****',
        '6': '-****',  '7': '--***',  '8': '---**',
        '9': '----*' 
        }

frommorse = dict((b,a) for a,b in letters.items())
text = raw_input('What is the translation you need?\n')
text=text.strip()

if text[0] in string.letters:
    to_from(text, letters)
else:
    to_from(text, frommorse)

当我尝试解码* - 时,会打印“E T”而不是A.我做错了什么?

1 个答案:

答案 0 :(得分:1)

要将字符串编码为莫尔斯代码,请尝试使用

 APNU = {'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': '--..',
        '0': '-----',  '1': '.----',  '2': '..---',
        '3': '...--',  '4': '....-',  '5': '.....',
        '6': '-....',  '7': '--...',  '8': '---..',
        '9': '----.' 
        }


string = 'yourstring'
for char in string:
    print APNU[char.upper()]

[APNU[char.upper()] for char in string]