You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:17:25