摩斯代码转换

本文介绍了一个简单的Python程序,用于将英文字符转换为摩斯电码。通过字典映射,实现了字母与摩斯代码之间的相互转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天玩的时候偶然看见摩斯代码,感觉挺好玩的,就写了一个简单的摩斯代码的转换程序


'''
Name: Morse.py
Purpose:
Author: syt
Date: 2016_01_28
'''

if __name__ == '__main__':
    dic = {
        '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':'--..'
    }
    while True:
        print('输入你要转换的话')
        res = ""
        s = input()

        for i in range(len(s)):
            if s[i] == ' ':
                pass
            else:
                if s[i] in dic.keys():
                    res = res + dic[s[i]] + ' '
        print(res)


数据结构关于二叉树的建立遍历以及应用二叉树进行编解码 实验要求 必做部分 1. 小明会按照前序的方式输入一棵二叉树。例如,输入$ACG##H##D##BE#I##F##的话,代表了下面这棵树: 2. 请分别按照前序、中序、后序输出这棵树。 选做部分 背景 在影视剧中,我们经常会看到二战期间情报人员使用电报哒哒哒地发送信息,发送电报所使用的编码叫做摩尔斯电码(或者叫做摩斯密码)。甚至在现代,SOS仍然是国际通用的求救信号之一,其“三短、三长、三短”同样是摩斯密码的编码方式。 摩斯密码使用若干个“点”和“划”来表示一个字母,字母和字母之间使用短暂的停顿来表示。例如,一种常见的编码方式为: 字母 摩斯密码 字母 摩斯密码 A .- E . B -... F ..-. C -.-. G --. D -.. H .... 实际上,一个摩斯密码本可以使用一棵二叉树来存储: 上图表示,从根节点start开始,遇到一个点(Dot)就访问它的左子树节点,遇到一个划(Dash)就访问它的右子树节点。例如,三个点...代表了S,三个划---代表了O。所以SOS的摩斯密码是... --- ...(中间用空格隔开,表示短暂的停顿)。再比如,爱疯手机有一种来电铃声的节奏为“哇哇哇 哇-哇- 哇哇哇”,这其实表示的是…… 现在,小明想在课上偷偷跟你传纸条,但又不想被其他同学看到内容。因此他跟你约定,每次给你传纸条时都使用摩斯密码来编写。至于密码本,当然不能使用国际通用的,他会在课前告诉你密码本的内容。然而小明发现,每次写纸条、读纸条都不是很方便,所以他想让你做个程序来自动编码/解码你们的摩斯密码。 题目要求 首先,小明输入的那棵二叉树,代表了你们在这堂课上要使用的摩斯密码本。例如,输入$ACG##H##D##BE#I##F##的话,代表了下面这棵树: 第一个字母$是什么并不重要,因为它只是代表了根节点,而根节点在我们的摩斯电码中并不代表一个字符,仅仅代表“start”。 读入密码本后,请记得按照前序、中序、后序输出这棵树。 然后,小明会输入一个数,代表接下来输入的是明文还是摩斯电码。输入0表示接下来他会输入明文,输入1表示接下来输入的是摩斯电码,输入-1程序退出。 1. 如果输入的是0,代表接下来要输入的是明文。程序接受一个字符串,根据字符串中每一个字母输出对应的摩斯电码,用空格隔开。例如如果小明输入“BED”,则程序应该输出“-空格-.空格.-”。如果遇到密码本中没有的字符,则输出“输入有误”。 2. 如果输入的是1,则表示接下来要输入摩斯电码。小明首先会输入一个数字N,代表有几个电码的输入,例如输入4代表之后会输入4个电码(即这个单词有四个字母)。随后输入空格分割的电码,例如, .. . -- -. 程序需要根据摩斯电码解读出明文单词并输出,例如上面的电码表示“CAFE”。如果遇到密码本中没有的编码,则输出“输入有误”。 输入输出样例 必做部分: 请输入二叉树: $ACG##H##D##BE#I##F## 前序遍历:$ACGHDBEIF 中序遍历:GCHAD$EIBF 后序遍历:GHCDAIEFB$ 选做部分: 请选择(0为明文,1为电码,-1退出):0 请输入明文:BED 摩斯电码为:- -. .- 请选择(0为明文,1为电码,-1退出):1 请输入电码个数:4 请输入电码:.. . -- -. 明文为:CAFE 请选择(0为明文,1为电码,-1退出):-1 // 程序结束
### 使用 Python 实现摩斯电码转换的功能 以下是基于 Python 的一种实现方法,它可以将文本、摩尔斯电码与用滴答表示的摩尔斯电码三者相互转换。程序设计涵盖了大小写字母、数字和常用标点符号的支持[^1]。 #### 字典定义 首先需要定义一个字典来存储字符与其对应的摩尔斯电码的关系: ```python MORSE_CODE_DICT = { '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': '-----', ', ': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-' } ``` #### 文本到摩尔斯电码的转换函数 此函数接收一段英文字符串作为输入,并将其转换为相应的摩尔斯电码形式[^1]: ```python def text_to_morse(text): morse_code = [] for char in text.upper(): if char == ' ': morse_code.append(' ') elif char in MORSE_CODE_DICT: morse_code.append(MORSE_CODE_DICT[char]) else: continue # Ignore unsupported characters return ' '.join(morse_code) ``` #### 摩尔斯电码到文本的转换函数 反向过程则需先反转 `MORSE_CODE_DICT` 中键值对的位置以便快速查找[^1]: ```python REVERSE_MORSE_CODE_DICT = {v: k for k, v in MORSE_CODE_DICT.items()} def morse_to_text(morse_code): words = morse_code.split(' ') decoded_words = [] for word in words: chars = word.split() decoded_word = ''.join([REVERSE_MORSE_CODE_DICT.get(char, '') for char in chars]) decoded_words.append(decoded_word) return ' '.join(decoded_words).capitalize() ``` #### 主程序结构 最后,在主程序部分调用以上两个辅助函数即可完成整个转换流程[^1]: ```python if __name__ == "__main__": while True: choice = input("请选择模式 (1: Text to Morse / 2: Morse to Text): ") if choice == "1": user_input = input("请输入要转换为摩尔斯电码的文字: ") result = text_to_morse(user_input) print(f"摩尔斯电码结果: {result}") elif choice == "2": user_input = input("请输入要转换回文字的摩尔斯电码 (单词间用双空格分隔): ") result = morse_to_text(user_input) print(f"解码后的文字结果: {result}") cont = input("继续吗? (y/n): ").lower() if cont != 'y': break ``` --- ### 总结 上述代码提供了完整的双向转换能力——既可以将普通的英语文本串转变为标准的摩尔斯电码序列,也能反过来解读给定的一系列摩尔斯信号回到原始消息内容之中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值