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

Python字符解码问题:输入编码串无法正确解析空格(###)

编码解析问题:修复"###"作为空格的识别逻辑

我来帮你搞定这个编码解析的问题!目前你的代码无法正确识别表示空格的"###",主要有两个核心问题:

问题分析

  1. 字典定义错误:你的ABSTRACT字典里多了一个空字符串对应"#"的条目,这会导致反转后的ABSTRACT_SHIFTED把单个#映射为空字符,干扰分隔符的判断。
  2. 解析逻辑缺失:没有专门处理连续三个#的情况,直接按#分割的话会把###拆成三个独立的分隔符,无法识别为空格。

修复方案

步骤1:修正映射字典

首先移除字典里错误的空键条目,确保只有有效字符和对应的编码:

ABSTRACT = {
    "A":"1","B":"2","C":"3","D":"4","E":"5","F":"6","G":"7","H":"8","I":"9",
    "J":"10","K":"11","L":"12","M":"13","N":"14","O":"15","P":"16","Q":"17",
    "R":"18","S":"19","T":"20","U":"21","V":"22","W":"23", "X":"24","Y":"25",
    "Z":"26", " ":"###"
}
ABSTRACT_SHIFTED = {value:key for key,value in ABSTRACT.items()}

步骤2:重写解析函数

改用遍历字符串的方式,专门识别连续三个#作为空格,同时处理单个#作为分隔符的逻辑:

def from_abstract(s):
    result = []
    i = 0
    str_length = len(s)
    
    while i < str_length:
        # 优先检查是否是空格标记"###"
        if i + 2 < str_length and s[i:i+3] == "###":
            result.append(" ")
            i += 3
        # 单个#是分隔符,直接跳过
        elif s[i] == "#":
            i += 1
        # 收集数字编码,转换为对应字母
        else:
            num_code = ""
            # 持续收集数字直到遇到#或者字符串结束
            while i < str_length and s[i] != "#":
                num_code += s[i]
                i += 1
            # 根据编码映射找到对应字母并加入结果
            if num_code:
                result.append(ABSTRACT_SHIFTED[num_code])
    
    return "".join(result)

测试验证

调用函数测试你的输入:

input_str = "8#15#23###23#1#19###9#20"
print(from_abstract(input_str))  # 输出:HOW WAS IT

这样就能正确解析出目标字符串啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:37