如何基于字典实现英文与摩尔斯码的双向匹配翻译?
实现英文字母与摩尔斯码的双向转换
我来帮你搞定这个双向转换的需求!其实核心就是先建立双向的映射关系,然后判断输入的内容类型,再针对性地完成转换。下面是完整的实现方案:
完整代码实现
# 定义英文字母到摩尔斯码的映射字典(包含所有大写英文字母) char_to_morse = { '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': '--..' } # 快速生成反向映射:摩尔斯码到英文字母(避免每次遍历原字典查找,提升效率) morse_to_char = {v: k for k, v in char_to_morse.items()} def convert_message(): # 获取用户输入,统一转成大写并去除首尾空格 user_input = input("请输入要转换的内容(字母直接输入,摩尔斯码用空格分隔每个字符编码):").strip().upper() # 判断输入类型:检查是否包含摩尔斯码的特征字符(. 或 -) if '.' in user_input or '-' in user_input: # 按空格拆分摩尔斯码序列 morse_codes = user_input.split() result = [] for code in morse_codes: # 查找对应字母,无法识别则保留原码并标注 if code in morse_to_char: result.append(morse_to_char[code]) else: result.append(f"[无法识别: {code}]") print("转换结果:", ''.join(result)) else: # 处理字母输入,逐个转换 result = [] for char in user_input: if char in char_to_morse: result.append(char_to_morse[char]) else: result.append(f"[无法识别: {char}]") print("转换结果:", ' '.join(result)) # 启动转换程序 convert_message()
代码关键点说明
- 双向映射:用字典推导式生成
morse_to_char反向字典,这样查找摩尔斯码对应的字母是O(1)的高效操作,比每次遍历原字典要快得多。 - 输入兼容处理:用
upper()把输入统一转成大写,避免因为用户输入小写字母导致匹配失败;strip()去除输入首尾的多余空格。 - 错误容错:遇到无法识别的字符或摩尔斯码时,不会直接崩溃,而是保留原内容并标注,方便用户排查问题。
- 输入判断逻辑:通过检查输入中是否包含
.或-来区分摩尔斯码和字母输入,这是最直观的判断方式,符合日常使用习惯。
注意事项
- 输入摩尔斯码时,必须用空格分隔每个字符的编码,比如输入
.- -...会转换成AB;如果不空格分隔(比如.-...),程序会把它当成一个无法识别的摩尔斯码。 - 如果需要支持数字、标点符号等,可以直接扩展
char_to_morse字典,加入对应的摩尔斯码映射即可。
内容的提问来源于stack exchange,提问作者Hunter T.
相关产品推荐
相关产品推荐

