0 前言

        最近兄弟们在群里讲话总喜欢用缩写,让人看不懂,鉴于大家都“不说人话”的行为,我决定也不当人了,于是写了个中英文转摩斯密码的小程序“报复回去”。(打不过必须加入)

1 程序原理

第一步:要求用户选择模式【文字转code】或【code转字母】

第二步:【文字转code】

                1.读取用户输入的句子,转换成字符串

                2.顺序读取字符串,判断是否为中文

                        如【是】中文,调用 pypinyin 库,将汉字转为拼音

                        如【不是】中文,则保留原值

                3.将处理后的字符串与【字母-摩斯码】转换表对照,在表中则进行转换,不在则保留原值,如遇空格则用 “/” 以做分隔。

                【文字转code】

                1.读取用户输入的摩斯码

                2.顺序读取摩斯码,与【摩斯码-字母】转换表对照,在表中则进行转换,不在则保留原值,如遇 “/” 则用 空格 以做分隔。

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()

3 运行效果

 输入0,

 随便写句话:我的室友都是人才,说话又好听。

 

 再输入1,把刚才转换好的摩斯码 粘贴进去

 转汉字还没实现,拼音勉强能用。

4 使用须知

        翻看摩斯码转换表可以发现,摩斯码由点和划线组成,另外编程时我们用斜杠(/)和空格进行互相转换,所以使用程序时应避免使用英文的句点、短横、斜杠(.,-,/)。像使用中字母e 对应一个点(.),转换时句点会直接就读成字母e。(实际上除了字母和数字,符号也是有对应编码的,嫌累就没搞,我是懒惰虫-_-)

 5 参考

摩尔斯电码转换的小程序(python编写)

python判断字符串为中文

封面 摩斯密码对照表(维基百科上的)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐