摩斯转换

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

reverse_morse = dict()
for k, v in morse.items():
    reverse_morse[v] = k


def morse2line(line):
    new_line = ""

    for string in line.split('   '):
        for char in string.split(' '):
            new_line += reverse_morse.get(char, char)
        new_line += ' '

    return new_line


def line2morse(line):
    new_line = ""

    for char in line:
        new_line += morse.get(char, char)
        new_line += " "

    return new_line


def morse_translator():
    if len(sys.argv) < 3:
        print("please provides a line.")
        exit(1)
    opts, args = getopt.getopt(sys.argv[1:], "lm")

    translator = line2morse
    for opt, _ in opts:
        if opt == '-l':
            translator = line2morse
        elif opt == '-m':
            translator = morse2line
        else:
            print('invalid option %s' % opt)
            exit(1)

    line = args[0]
    return translator(line)


print(morse_translator())

使用示例:

[root@dev ~]# python test.py -l shihr
... .... .. .... .-. 
[root@dev ~]# python test.py -m -- '... .... .. .... .-.'
shihr