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

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)

关键细节说明

  1. 修正了原字典中逗号的错误定义(原代码写的, 多了空格,改成,才能正确匹配逗号的摩尔斯码)。
  2. split(' ')拆分后,比如输入.- -...(A和B之间两个空格),会得到['.-', '', '-...'],其中的空字符串就是单词间隔的标志,输出一个空格即可还原英文的单词分隔。
  3. 反向字典用字典推导式创建,查找速度远快于原代码中val_list.index(i)的遍历方式,尤其适合长输入场景。

内容的提问来源于stack exchange,提问作者Synt4xErr0r 7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:54:21