Python实现含损坏字符的摩尔斯电码翻译器问题求助
摩尔斯电码翻译程序修复与实现
作业需求
开发一个将消息翻译成摩尔斯电码的程序,消息中的部分字母已损坏。
为测试程序,会提供若干摩尔斯电码句子,不含数字或标点。字母间用1个空格分隔,单词间用2个空格分隔。部分损坏的字母会以*结尾。摩尔斯电码字母由.和-表示,遵循对应表。
目标是将摩尔斯电码转换为大写字母输出,最终翻译结果中字母间无空格,单词间留1个空格。损坏字母需特殊处理:这类字母可能丢失了后缀部分,需将所有匹配该代码的字母按字母顺序放在方括号中。例如.-*对应A(.-)、J(.---)、L(.-..)、P(.--.)、R(.-.)、W(.--),需表示为[AJLPRW],单词.- -- --- .-*翻译为AMO[AJLPRW]。
错误原因解释
你遇到的TypeError: list indices must be integers or slices, not str核心原因:
mensagem是列表类型,列表只能用整数索引(比如mensagem[0]取第一个元素),但你用字符串letra作为索引访问mensagem[letra],完全违反了列表的访问规则。- 除此之外,代码还存在输入处理错误、循环遍历对象错误、字典逻辑混乱、损坏字符匹配逻辑缺失等问题。
修复并完成的代码
# 摩尔斯电码到大写字母的映射字典 morse_to_char = { '.-': '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' } # 获取输入的摩尔斯电码 input_morse = input("请输入摩尔斯电码:") # 分割单词:用两个空格区分不同单词 words = input_morse.split(' ') translated_result = [] for word in words: # 分割单个摩尔斯字符:用单个空格区分字符 morse_chars = word.split(' ') translated_word = [] for mc in morse_chars: if mc.endswith('*'): # 处理损坏字符:去掉末尾的*,匹配所有前缀符合的摩尔斯码 prefix = mc[:-1] matched_chars = [] for morse_code, char in morse_to_char.items(): if morse_code.startswith(prefix): matched_chars.append(char) # 按字母排序后格式化 matched_chars.sort() translated_word.append(f"[{''.join(matched_chars)}]") else: # 正常字符直接查字典转换 translated_word.append(morse_to_char.get(mc, '')) # 拼接当前单词的翻译结果 translated_result.append(''.join(translated_word)) # 拼接所有单词,得到最终结果 final_text = ' '.join(translated_result) print("翻译结果:", final_text)
代码逻辑说明
- 字典定义:
morse_to_char正确存储摩尔斯码与大写字母的映射,是翻译的核心依据。 - 输入处理:直接获取完整输入字符串,避免原代码中用列表存储输入的错误。
- 分割规则:用
split(' ')(两个空格)分割单词,用split(' ')(单个空格)分割字符,完全符合题目格式要求。 - 损坏字符处理:去掉末尾*后,遍历字典匹配所有前缀一致的摩尔斯码,收集对应字母并排序,最终格式化为
[XXX]形式。 - 结果拼接:先拼接单个单词的翻译字符,再用空格连接所有单词,输出符合要求的格式。
测试示例
输入:.- -- --- .-*
输出:翻译结果: AMO[AJLPRW]
内容的提问来源于stack exchange,提问作者Ana Fracaro
相关产品推荐
相关产品推荐

