摩尔斯电码解码多单词无空格问题及字符串拆分方案咨询
摩尔斯电码解码函数修复:单词间空格缺失问题
我正在编写一个摩尔斯电码解码函数,输入包含多个单词的摩尔斯电码字符串时(例如".... . -.-- .--- ..- -.. ."应解码为HEY JUDE),我的代码返回的结果却是HEYJUDE,没有实现单词间的空格分隔。请问该如何修复?
原代码
def reverse(message): message = message.split() msg = '' for item in message: for k, v in MORSE_CODE_DICT.items(): if v == item: msg += k print(msg)
问题原因与修复方法
你的代码用message.split()会把所有连续空格(包括单词间的三个空格)统一处理成分隔符,导致无法区分字符间的单个空格和单词间的三个空格,自然没法保留单词间隔。下面是具体修复方案:
修复思路
- 先按三个连续空格拆分输入字符串,得到每个单词对应的摩尔斯码片段
- 对每个单词片段,再按单个空格拆分出单个字符的摩尔斯码
- 解码每个字符后拼接成单词,最后用空格连接所有解码后的单词
修复后的代码
def reverse(message): # 按三个空格拆分出各单词的摩尔斯码 word_morse_parts = message.split(' ') decoded_words = [] for part in word_morse_parts: # 按单个空格拆分出单个字符的摩尔斯码 char_morse_list = part.split() decoded_word = '' for char_morse in char_morse_list: # 匹配对应字符 for k, v in MORSE_CODE_DICT.items(): if v == char_morse: decoded_word += k break # 找到后终止循环,提升效率 decoded_words.append(decoded_word) # 用空格连接所有单词 final_result = ' '.join(decoded_words) print(final_result)
额外优化:提升解码效率
每次遍历整个字典查找字符效率偏低,可以预先把原字典反转成“摩尔斯码→字符”的映射表,直接通过键值对读取:
# 预先生成反转字典,避免重复遍历 MORSE_TO_CHAR = {v: k for k, v in MORSE_CODE_DICT.items()} def reverse(message): word_morse_parts = message.split(' ') decoded_words = [] for part in word_morse_parts: # 一行完成单个单词的解码 decoded_word = ''.join([MORSE_TO_CHAR[char] for char in part.split()]) decoded_words.append(decoded_word) final_result = ' '.join(decoded_words) print(final_result)
内容的提问来源于stack exchange,提问作者Alexandru_Ghi
相关产品推荐
相关产品推荐

