描述
摩斯密码(morse code),又称摩斯电码、摩尔斯电码(莫尔斯电码),是一种时通时断的信号代码,通过不同的信号排列顺序来表达不同的英文字母、数字和标点符号;通信时,将英文字母等内容翻译成摩斯电码(摩尔斯电码)进行传输,收到摩斯密码(莫尔斯电码)后,对电码进行反翻译,得到通信的实际内容,达到加密通信内容的目的。
本摩斯密码(摩尔斯电码)翻译器,只对字符,数字,标点进行翻译,不区分大小写,其它内容自动忽略;摩斯密码解密时,可接受空格分隔、“/”分隔的摩斯密码,其它字符也自动忽略。
摩斯密码表_摩斯密码对照表:
字母
字符 | 电码符号 | 字符 | 电码符号 | 字符 | 电码符号 | 字符 | 电码符号 |
---|---|---|---|---|---|---|---|
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 | ━ ━ ━ ━ . |
标点符号
字符 | 电码符号 | 字符 | 电码符号 | 字符 | 电码符号 | 字符 | 电码符号 |
---|---|---|---|---|---|---|---|
. | .━ .━ .━ | : | ━ ━ ━ ... | , | ━ ━ ..━ ━ | ; | ━ .━ .━ . |
? | ..━ ━ .. | = | ━ ...━ | ‘ | .━ ━ ━ ━ . | / | ━ ..━ . |
! | ━ .━ .━ ━ | ━ | ━ ....━ | _ | ..━ ━ .━ | “ | .━ ..━ . |
( | ━ .━ ━ . | ) | ━ .━ ━ .━ | $ | ...━ ..━ | & | .━ ... |
@ | .━ ━ .━ . |
输入
morse = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]
digit = ['-----', '.----','..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.']
punctuation = {'.': '.-.-.-', ':': '---...', ',': '--..--', ';': '-.-.-.', '?': '..- -..', '=': '-...-',
"'": '.----.', '/': '-..-.', '!': '-.-.--', '-': '-....-', '_': '..--.-', '"': '.-..-.',
'(': '-.--.', ')': '-.--.-', '$': '...-..-', '&': '·-···', '@': '.--.-.', ' ': ''}
编写程序:
- 将输入的英文句子转换成摩尔斯电码并输出,除字母、数字和符号外的空格原样输出,每个摩斯码之间及与符号之间用一个空格分隔。
- 将输入的一组用空格分隔的摩斯电码密文,对其进行解码输出,字母输出为小写,标点符号原样输出。
例如 :
Python is a programming language that lets you work more quickly and integrate your systems more effectively.
.--. -.-- - .... --- -. .. ... .- .--. .-. --- --. .-. .- -- -- .. -. --. .-.. .- -. --. ..- .- --. . - .... .- - .-.. . - ... -.-- --- ..- .-- --- .-. -.- -- --- .-. . --.- ..- .. -.-. -.- .-.. -.-- .- -. -.. .. -. - . --. .-. .- - . -.-- --- ..- .-. ... -.-- ... - . -- ... -- --- .-. . . ..-. ..-. . -.-. - .. ...- . .-.. -.-- .-.-.-
.--. -.-- - .... --- -. .. ... .- .--. .-. --- --. .-. .- -- -- .. -. --. .-.. .- -. --. ..- .- --. . - .... .- - .-.. . - ... -.-- --- ..- .-- --- .-. -.- -- --- .-. . --.- ..- .. -.-. -.- .-.. -.-- .- -. -.. .. -. - . --. .-. .- - . -.-- --- ..- .-. ... -.-- ... - . -- ... -- --- .-. . . ..-. ..-. . -.-. - .. ...- . .-.. -.-- .-.-.-
python is a programming language that lets you work more quickly and integrate your systems more effectively.
解法一:
- 以小写字母为键,以摩斯码为值构建字典
- 遍历转为小写的输入的字符串
- 若当前字符在字典的键中存在,返回键对应的值
- 否则原样输出该字符 ```python import string
morse = [“.-“, “-…”, “-.-.”, “-..”, “.”, “..-.”, “—.”, “….”, “..”, “.—-“, “-.-“, “.-..”, “—“, “-.”, “—-“, “.—.”, “—.-“, “.-.”, “…”, “-“, “..-“, “…-“, “.—“, “-..-“, “-.—“, “—..”] morse_dic = dict(zip(string.ascii_lowercase, morse)) # 以小写字母为键,摩斯码为值构建字典 txt = input().lower() # 输入转小写 for c in txt: # 遍历输入的字符串 print(morse_dic.get(c, c), end=’’) # 索引字典中当前字符为键的值,键中不存在时直接输出原字符,不换行
PYTHON must Pass!<br />.--.-.---....----. --..-...- .--..-......!
解法二:
1. 将输入的字符串中的字母转为小写字母
1. 对输入的字符串进行遍历,如果是小写字母就用转换列表中对应序号的元素替换,不是字母的原样不动
1. 判断是不是小写字母
1. 找到该 字母的序号
1. 用替换列表中对应序号的元素替换该字母
3. 返回替换过的字符串
参考代码如下:
```python
def ciphertext(plaintext):
ls=[".-","-...","-.-.","-..",".","..-.","--.","....",
"..",".---","-.-",".-..","--","-.","---",".--.",
"--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
plaintext = plaintext.lower() # 字符串中所有字母转小写
letter = 'abcdefghijklmnopqrstuvwxyz' # 构建小写字母字符串
for c in plaintext: # 对输入的字符串进行遍历
if c in letter: # 用ls中对应序号的元素替换字母
plaintext = plaintext.replace(c,ls[letter.find(c)]) # letter.find(c)得到c在letter中的序号
return plaintext # 返回替换过的字符串
if __name__ == '__main__':
plaintext = input() # 输入一个字符串
print(ciphertext(plaintext)) # 调用函数,并输出返回值
可以利用 ord(c) 函数返回字母的 Unicode 码的整数,a-z 的值的范围是97-122,可以对其减97,使其值落入0-25的区间,对应 ls 中各元素的序号,再根据序号进行索引,找到替换的元素。
def ciphertext(plaintext):
ls=[".-","-...","-.-.","-..",".","..-.","--.","....",
"..",".---","-.-",".-..","--","-.","---",".--.",
"--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
plaintext = plaintext.lower() # 字符串中所有字母转小写
message = ''
for c in plaintext:
if 'a' <= c <= 'z': # 判定 c 是不是小写字母
message = message + ls[ord(c)-97] # ord(c) 返回代表它 Unicode 码的整数,减97后落入0-25的区间
else:
message = message + c # 非小写字母时不做变换,直接拼接原字符
return message
if __name__ == '__main__':
plaintext = input() # 输入一个字符串
print(ciphertext(plaintext)) # 调用函数,并输出返回值