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

Python字符串转整数报ValueError 统计子序列被5整除次数问题

错误原因说明

这个ValueError: invalid literal for int() with base 10: ''报错的核心原因是代码尝试将空字符串转换为整数,触发了非法输入异常,具体触发逻辑如下:

  • 外层循环的range(leng)生成的是从0开始到leng-1的整数,当sizen=0时,初始化的j = i + sizen值为0,此时取number[i:j]即字符串的切片起始和结束索引相同,得到的就是空字符串,直接传入int()就会触发报错。
  • 额外的逻辑缺陷:由于range(leng)的最大值是leng-1,所以代码里写的sizen != leng判断永远为真,对应的else分支(处理整个字符串的逻辑)永远不会执行,也会导致最终统计结果错误。
可行解决方法

可以直接调整外层循环的取值范围,让子序列长度从1开始,直接覆盖所有长度的连续子序列,废弃无效的else分支即可:

def DivByFive(number):
    answer = 0
    leng = len(number)
    # 子序列长度从1到leng,覆盖所有可能的连续子序列
    for sizen in range(1, leng + 1):
        i = 0
        j = i + sizen
        while True:
            if j > leng:
                break
            numb = number[i:j]
            if int(numb) % 5 == 0:
                answer += 1
            i += 1
            j += 1
    return answer

number = '125'
result = DivByFive(number)
print("Result is", result)

如果要进一步优化性能,针对可被5整除的整数特性,不需要将完整子序列转整数,只要判断子序列的最后一位是0或5即可,避免大长度字符串转整数的性能损耗:

def DivByFive(number):
    answer = 0
    leng = len(number)
    for idx in range(leng):
        if number[idx] in ('0','5'):
            # 所有以当前字符为结尾的连续子序列都能被5整除,数量为idx+1
            answer += idx + 1
    return answer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:09