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

Python数据分段求和追踪最大值报错ValueError求助

问题解决:空行分隔段落求和及最大值追踪

原始数据

data = """1000
2000
3000

4000

5000
6000

7000
8000
9000

10000"""

需求说明

将空行分隔的每段数字求和,同时维护max_sum追踪各段和的最大值:

  • 第一段1000、2000、3000的和为6000,与初始max_sum(如0)比较
  • 第二段4000的和与当前max_sum比较
  • 遇到空行时重置求和值,依次处理所有段落

错误代码及报错信息

错误代码

max_num = 0
sum = 0
for line in data:
    # print(line)
    sum = sum + int(line)
    if line in ['\n', '\r\n']:
        sum=0
    max_num = max(max_num, sum)

报错信息

sum = sum + int(line)
ValueError: invalid literal for int() with base 10: '\n'

错误原因

直接遍历data字符串会逐个字符迭代,而非按行分割,\n会被当作单独元素处理,转整数必然报错。即便按行分割,空行直接转整数也会失败,必须先判断行是否为空。

修正后的代码

max_sum = 0
current_sum = 0

# 按行分割数据,兼容不同换行符
for line in data.splitlines():
    # 去除行首尾空白,判断是否为空行
    stripped_line = line.strip()
    if not stripped_line:
        # 空行时更新最大值,重置当前求和
        max_sum = max(max_sum, current_sum)
        current_sum = 0
    else:
        # 非空行则累加数值
        current_sum += int(stripped_line)

# 循环结束后,补充处理最后一段的和
max_sum = max(max_sum, current_sum)

print(max_sum)  # 输出:24000

代码说明

  1. 使用splitlines()按行分割数据,自动处理\n、\r\n等不同换行符
  2. 对每行执行strip()去除首尾空白,判断是否为空行:
    • 空行时,先将当前段的和与max_sum比较更新,再重置current_sum
    • 非空行则转为整数累加到current_sum
  3. 循环结束后,最后一段没有后续空行触发最大值更新,需单独做一次比较

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:47