如何编写字符串解码函数?请指出我的Python代码错误
字符串解码函数问题排查
问题背景
我在编写一个使用循环的字符串解码函数时遇到问题,该函数需根据错误规则还原正确单词。例如输入LATE会输出TALE,输入A有时会显示为8或B。测试用例包括"L8KAOUL"、"E8N8N8"、"UUIP"。
解码规则如下:
| 输入字符 | 输出字符 |
|---|---|
| T | L |
| L | T |
| A | 8 |
| A | B |
| E | A |
| B | E |
| W | UU |
尝试编写的代码:
result = "" def decoder(misspelled_word): for letter in misspelled_word: if letter == "L": result += "T" elif letter == "T": result += "L" elif letter == 8 or letter == "B": result += "A" elif letter == "A": result += "E" elif letter == "E": result += "B" else: return misspelled_word return result
代码中的错误
- 全局变量污染:
result定义在函数外部,属于全局变量。每次调用decoder时,result不会自动重置,会保留上一次调用的结果,导致多次调用后输出混乱。 - 字符类型不匹配:规则中输入的
8是字符串类型(比如测试用例里的"L8KAOUL"中的8),但代码里写的是letter == 8(数字8),永远无法匹配成功,应改为letter == "8"。 - 未知字符处理错误:遇到规则外的字符时,代码直接返回整个原单词,而不是保留该字符继续处理后续内容,这会导致像
"L8KAOUL"这类包含未知字符的测试用例直接返回原字符串,无法完成解码。 - 未实现
UU转W的规则:当前代码是逐个字符循环处理,无法识别连续的两个U,完全遗漏了解码规则中UU还原为W的逻辑。
修正后的代码
def decoder(misspelled_word): result = [] i = 0 word_length = len(misspelled_word) while i < word_length: # 优先处理UU转W的情况 if i + 1 < word_length and misspelled_word[i] == "U" and misspelled_word[i+1] == "U": result.append("W") i += 2 continue # 处理单个字符的解码映射 current_char = misspelled_word[i] if current_char == "L": result.append("T") elif current_char == "T": result.append("L") elif current_char == "8" or current_char == "B": result.append("A") elif current_char == "A": result.append("E") elif current_char == "E": result.append("B") else: # 规则外的字符直接保留 result.append(current_char) i += 1 return "".join(result)
修正说明
- 将
result移到函数内部,改为列表类型(列表拼接字符串比直接+=效率更高),每次调用函数都会重新初始化,避免全局变量的干扰。 - 修正了
8的匹配逻辑,确保和输入的字符串类型一致。 - 调整未知字符的处理逻辑,改为直接保留字符并继续循环,保证完整处理整个输入字符串。
- 使用
while循环实现连续字符UU的识别,完成UU转W的解码规则。
内容的提问来源于stack exchange,提问作者sapi_python
相关产品推荐
相关产品推荐

