使用字典实现摩尔斯电码转英文遇匹配问题求助
摩尔斯电码转英文异常的解决方案
看起来你踩了一个很典型的映射方向错误的坑!问题的核心在于:你用来做翻译的字典是英文→摩尔斯的(键是英文字母,值是对应的摩尔斯码),但当你要把摩尔斯转英文时,需要的是摩尔斯→英文的反向映射——不然程序根本找不到完整的".-"对应的字母,反而会把单个字符"."当成E的摩尔斯码(刚好E的摩尔斯就是"."),所以才会输出E。
下面是具体的修正方案,帮你搞定双向翻译:
1. 构建双向映射字典
先保留你已有的英文转摩尔斯字典,再通过推导式生成反向的摩尔斯转英文字典:
# 基础英文→摩尔斯字典(你已经实现的部分) eng_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': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.' } # 反向生成摩尔斯→英文字典,这是解决问题的关键 morse_to_eng = {morse_code: char for char, morse_code in eng_to_morse.items()}
2. 实现摩尔斯转英文的正确逻辑
摩尔斯码的字符之间是用空格分隔的,所以我们需要先把输入的字符串按空格分割成单个摩尔斯码单元,再逐个去反向字典里匹配:
def translate_morse_to_english(morse_input): # 分割输入为独立的摩尔斯码单元 morse_units = morse_input.split() translated_chars = [] for unit in morse_units: # 用get方法避免找不到对应码时抛出错误,默认返回'?' translated_chars.append(morse_to_eng.get(unit, '?')) return ''.join(translated_chars)
3. 整合双向翻译功能
把你已有的英文转摩尔斯逻辑和上面的代码整合,让程序可以支持双向翻译:
def translate_english_to_morse(eng_input): translated_code = [] for char in eng_input.upper(): translated_code.append(eng_to_morse.get(char, '?')) return ' '.join(translated_code) # 主交互逻辑 print("=== 摩尔斯电码互译工具 ===") choice = input("请选择翻译方向:\n1. 英文 → 摩尔斯电码\n2. 摩尔斯电码 → 英文\n输入数字选择:") if choice == '1': message = input("请输入要翻译的英文消息:") print(f"翻译结果:{translate_english_to_morse(message)}") elif choice == '2': message = input("请输入要翻译的摩尔斯电码(字符间用空格分隔):") print(f"翻译结果:{translate_morse_to_english(message)}") else: print("无效选择,请重新运行程序!")
现在测试一下:输入".-",程序会正确输出"A";输入".... . .-.. .-.. ---",会输出"HELLO",完全符合预期。
内容的提问来源于stack exchange,提问作者PKPython
相关产品推荐
相关产品推荐

