最近兄弟们在群里讲话总喜欢用缩写,让人看不懂,鉴于大家都“不说人话”的行为,我决定也不当人了,于是写了个中英文转摩斯密码的小程序“报复回去”。(打不过必须加入)
第一步:要求用户选择模式【文字转code】或【code转字母】
第二步:【文字转code】
1.读取用户输入的句子,转换成字符串
2.顺序读取字符串,判断是否为中文
如【是】中文,调用 pypinyin 库,将汉字转为拼音
如【不是】中文,则保留原值
3.将处理后的字符串与【字母-摩斯码】转换表对照,在表中则进行转换,不在则保留原值,如遇空格则用 “/” 以做分隔。
【文字转code】
1.读取用户输入的摩斯码
2.顺序读取摩斯码,与【摩斯码-字母】转换表对照,在表中则进行转换,不在则保留原值,如遇 “/” 则用 空格 以做分隔。
1.建立字典
import pypinyin
# 给字典赋值
# 字母转码
dict1 = {'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': '----.'
}
# 码转字母
dict2 = dict(zip(dict1.values(),dict1.keys()))
2.定义函数
# 中文转拼音
def chinese_to_pinyin():
strs = input("输入一句话:").strip().lower()
temp = ''
for _char in strs:
if '\u4e00' <= _char <= '\u9fa5':
result1 = pypinyin.pinyin(_char, style=pypinyin.NORMAL)
result2 = [i[0] for i in result1]
result3 = ''.join(result2[:])
temp += result3 + ' '
else:
temp += _char
return temp
# 文字转码
def encode(words):
for letter in words:
if letter in dict1:
print(dict1[letter], end=' ')
else :
if letter == ' ':
print('/',end=' ')
else:
print(letter, end=' ')
print()
# 码转文字
def decode():
codes = input("输入电码:").strip().split(" ")
for sign in codes:
if sign == '/':
print(' ',end='')
else:
if sign in dict2:
print(dict2[sign], end='')
else:
print(sign, end='')
print()
# 主函数
def main():
while 1:
choice = input("文字转码[0] or 码转字母[1]。输入[0/1]")
if choice == '0':
words = chinese_to_pinyin()
encode(words)
elif choice == '1':
decode()
else:
break
3.输入
if __name__=="__main__":
main()
输入0,
随便写句话:我的室友都是人才,说话又好听。
再输入1,把刚才转换好的摩斯码 粘贴进去
转汉字还没实现,拼音勉强能用。
翻看摩斯码转换表可以发现,摩斯码由点和划线组成,另外编程时我们用斜杠(/)和空格进行互相转换,所以使用程序时应避免使用英文的句点、短横、斜杠(.,-,/)。像使用中字母e 对应一个点(.),转换时句点会直接就读成字母e。(实际上除了字母和数字,符号也是有对应编码的,嫌累就没搞,我是懒惰虫-_-)
摩尔斯电码转换的小程序(python编写)
python判断字符串为中文
封面 摩斯密码对照表(维基百科上的)