Python字符解码问题:输入编码串无法正确解析空格(###)
编码解析问题:修复"###"作为空格的识别逻辑
我来帮你搞定这个编码解析的问题!目前你的代码无法正确识别表示空格的"###",主要有两个核心问题:
问题分析
- 字典定义错误:你的
ABSTRACT字典里多了一个空字符串对应"#"的条目,这会导致反转后的ABSTRACT_SHIFTED把单个#映射为空字符,干扰分隔符的判断。 - 解析逻辑缺失:没有专门处理连续三个
#的情况,直接按#分割的话会把###拆成三个独立的分隔符,无法识别为空格。
修复方案
步骤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
相关产品推荐
相关产品推荐

