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

Python摩尔斯电码翻译器:解码函数调用报错问题求助

Python摩尔斯电码解码函数TypeError问题解决方案

错误原因

你遇到的TypeError: decode_morse() missing 1 required positional argument: 'data',核心原因是调用decode_morse()时没有传入它定义中要求的data参数。哪怕你用了全局变量data,函数定义里依然明确需要这个位置参数,所以必须显式传递。

解决方案

方案1:修正函数调用(快速修复)

直接在调用解码函数时把获取到的输入数据传进去即可,无需修改函数逻辑:

# 主逻辑中解码分支的代码
elif choice == '2':
    data = input("输入要解码的摩尔斯码: ")
    decode_morse(data)  # 这里添加data参数

这个方法最简单,直接解决参数缺失的问题,适合快速修复现有代码。

方案2:重构代码,避免全局变量(更规范的写法)

全局变量会增加代码耦合度,容易引发意外问题。建议把输入获取与编码/解码逻辑分离,让函数只负责核心转换工作:

  1. 定义编码/解码函数,依赖传入的参数而非全局变量
  2. 提前构建摩尔斯码的正向和反向映射字典
  3. 主程序负责接收用户选择、获取输入,然后调用对应函数

完整示例代码:

def encode_morse(text):
    """将文本转换为摩尔斯码"""
    result = []
    for char in text.upper():
        if char in MORSE_CODE_DICT:
            result.append(MORSE_CODE_DICT[char])
        elif char == ' ':
            result.append(' ')  # 保留空格
        else:
            result.append('?')  # 处理未知字符
    return ' '.join(result)

def decode_morse(morse_code):
    """将摩尔斯码转换为文本"""
    result = []
    # 摩尔斯码中单词用3个空格分隔,字符用1个空格分隔
    words = morse_code.split('   ')
    for word in words:
        chars = word.split(' ')
        for char in chars:
            if char in REVERSE_MORSE_DICT:
                result.append(REVERSE_MORSE_DICT[char])
            elif char == '':
                continue  # 处理连续空格的情况
            else:
                result.append('?')
        result.append(' ')
    return ''.join(result).strip()

# 定义摩尔斯码映射字典
MORSE_CODE_DICT = {
    '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_MORSE_DICT = {v: k for k, v in MORSE_CODE_DICT.items()}

# 主程序入口
if __name__ == "__main__":
    choice = input("输入1编码,2解码: ")
    if choice == '1':
        input_text = input("请输入要编码的文本: ")
        print("编码结果:", encode_morse(input_text))
    elif choice == '2':
        input_morse = input("请输入要解码的摩尔斯码(单词间用3个空格分隔): ")
        print("解码结果:", decode_morse(input_morse))
    else:
        print("无效选择,请输入1或2")

为什么单独运行解码函数正常?

你单独测试时应该是直接给函数传了参数(比如decode_morse(".... . .-.. .-.. ---")),此时参数满足函数定义要求,所以能正常执行;但集成到主程序时,你调用decode_morse()没有传参,自然触发参数缺失的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:25:22