1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| # by https://findneo.github.io/
import re
def morse(s):
morseChart = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.',
'....', '..', '.---', '-.-', '.-..', '--', '-.',
'---', '.--.', '--.-', '.-.', '...', '-', '..-',
'...-', '.--', '-..-', '-.--', '--..', '-----', '.----',
'..---', '...--', '....-', '.....', '-....', '--...', '---..',
'----.', '.-.-.-', '--..--', '..--..', '-....-', '.----.', '---...',
'.-..-.', '-..-.', '.--.-.', '-.-.-.', '-...-', '-.-.--', '..--.-',
'-.--.', '-.--.-', '...-..-', '.-...', '.-.-.', ' ', '*'
]
alphaChart = ['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', '.', ',', '?', '-', "'", ':',
'"', '/', '@', ';', '=', '!', '_',
'(', ')', '$', '&', '+', ' ', '#'
]
# or as a dict -> {c[1][i]: c[0][i] for i in xrange(len(c[0]))}
c = [morseChart, alphaChart]
s = s.lower()
# replace characters not in alphaChart with '#' ,which shall be '*' in
# encoded string
s = re.sub('[^a-z0-9.,?\-\':"/@;=!_()$&+ ]', '#', s)
# for convenience sake, I choose not to deal with space in morse.
s = re.sub('\s+', ' ', s)
m = 1 # default to decode
# if mot mismatch that condition,we are to encode.
if not re.match('[^-._ ]', s):
# occasionally we meet [ ._]+ instead of [ .-]+
s = s.replace('_', '-')
s = re.split(' ', s)
m = 0 # we are to encode by morse
r = []
# list().extend(foo) returns None so we use 'or r'
return (m * ' ').join(r.extend([c[1 - m][c[m].index(i)] for i in s]) or r)
# test
print morse('Hello word,2017!')
print morse('.... . .-.. .-.. --- .-- --- .-. -.. --..-- ..--- ----- .---- --... -.-.--')
|