Python摩尔斯电码译码问题:如何按空格分隔字符翻译
摩尔斯电码转英文功能修复方案
你的问题核心出在摩尔斯转英文的分支里——你把输入的每个字符单独拆成列表逐个翻译,比如输入.-(对应字母A)会被拆成.和-,分别对应E和T,自然输出错误。要解决这个问题,得按空格来分割摩尔斯码单元,而不是拆单个字符。
核心修改要点
- 创建反向字典:把原字典的键值反转,变成「摩尔斯码→字符」的映射,比每次遍历列表找索引高效得多。
- 按空格分割输入:用
split(' ')把输入按单个空格拆分,每个元素对应一个摩尔斯码字母单元;单词间的两个空格会被拆出空字符串,用来识别单词间隔。 - 遍历分割后的单元:空字符串对应英文空格,其他单元直接用反向字典查找对应字符。
修改后的完整代码
codes = { ' ':' ', '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':'-----', ',':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.', '-':'-....-', '(':'-.--.', ')':'-.--.-'} # 创建反向字典:摩尔斯码 → 字符 reverse_codes = {value: key for key, value in codes.items()} ask = input("A: 英文转摩尔斯电码\nB: 摩尔斯电码转英文").upper() if ask == "A": input_text = input("请输入英文:") for char in input_text: if char == " ": print(codes[char], end="", flush=True) else: print(codes[char.upper()] + " ", end="", flush=True) elif ask == "B": print("注意:字母间用1个空格分隔,单词间用2个空格分隔!") input_code = input("请输入摩尔斯电码:") # 按单个空格拆分摩尔斯码单元 code_units = input_code.split(' ') for unit in code_units: if unit == "": # 空字符串对应单词间的两个空格,输出一个英文空格 print(" ", end="", flush=True) else: # 用反向字典查找对应字符 print(reverse_codes[unit], end="", flush=True)
关键细节说明
- 修正了原字典中逗号的错误定义(原代码写的
,多了空格,改成,才能正确匹配逗号的摩尔斯码)。 split(' ')拆分后,比如输入.- -...(A和B之间两个空格),会得到['.-', '', '-...'],其中的空字符串就是单词间隔的标志,输出一个空格即可还原英文的单词分隔。- 反向字典用字典推导式创建,查找速度远快于原代码中
val_list.index(i)的遍历方式,尤其适合长输入场景。
内容的提问来源于stack exchange,提问作者Synt4xErr0r 7
相关产品推荐
相关产品推荐

