Python实现uncompress函数遇int()转换'e'的ValueError错误求助
第一版代码报错原因分析
你的第一版代码的核心问题是判断移动右指针的逻辑存在根本性错误:if string[left] == string[right] 这个条件默认数字部分的所有字符都和数字的第一个字符完全相同,这完全不符合多位数数字的实际规则(比如12、127这类包含不同数字字符的数值根本无法被正确识别)。
我们以触发报错的测试用例输入3n12e2z为例,完整走一遍第一版代码的执行流程就能明确问题:
- 初始状态:
left=0、right=0,字符串拆分为字符数组为['3','n','1','2','e','2','z'] - 第一次循环:
string[0] == string[0]成立,right自增到1 - 第二次循环:
string[left=0]是'3',string[right=1]是'n',条件不成立进入else分支:
截取string[0:1]得到'3'转成数字,拼接3个'n'到结果;right自增到2,left更新为2 - 第三次循环:
string[left=2]是'1',string[right=2]是'1',条件成立,right自增到3 - 第四次循环:
string[left=2]是'1',string[right=3]是'2',条件不成立进入else分支:
截取string[2:3]得到'1'转成数字,拼接1个'2'到结果;right自增到4,left更新为4 - 第五次循环:
string[left=4]是'e',string[right=4]是'e',条件成立,right自增到5 - 第六次循环:
string[left=4]是'e',string[right=5]是'2',条件不成立进入else分支:
尝试截取string[4:5]得到字符'e'转为int,直接触发ValueError: invalid literal for int() with base 10: 'e'报错
你修改后的代码逻辑是正确的:判断当前right指向的字符是否为数字,只要是数字就持续移动右指针,直到碰到非数字的目标字符,就能正确截取到完整的多位数数字部分,既不会把后续的数字字符当成目标字符,也不会把字母当成数字转换。
内容的提问来源于stack exchange,提问作者Adilson Jurado
相关产品推荐
相关产品推荐

