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

Python实现文本文件数字求和无法识别多位数与负数如何解决

问题说明

任务目标为从文本文件中提取所有数字并计算总和,现有代码存在两个核心缺陷:

  • 逐字符判断数字,无法识别2位及以上的多位数
  • 未加入负号识别逻辑,无法正确统计负数
    现有代码运行测试用例时输出错误:
  • 测试文件file6.txt内容:
1
10
  • 现有代码输出:The sum is 2
  • 预期正确输出:11(即1+10的计算结果)
原有错误代码
f = open('file6.txt', 'r')
suma = 0
file = f.readlines()
for line in file:
    for i in line:
        if i.isdigit() == True:
             suma += int(i)
print("The sum is ", suma)
错误原因

代码对每行内容做逐字符遍历,仅将单个数字字符转为整数累加,没有将连续数字、与数字绑定的前置负号作为一个数字整体处理。例如10会被拆分为'1'和'0'两个独立字符,仅累加了单个'1'对应的值1,最终得到错误结果2。

修正代码

方法一:正则匹配(推荐,代码简洁适配性强)

通过正则规则直接匹配所有「可选负号+连续数字」的整数整体,无需手动处理字符拼接逻辑,同时自动适配文件中任意位置的数字、负数、多位数场景:

import re

total = 0
# 使用with上下文管理器打开文件,自动处理文件关闭,避免资源泄漏
with open('file6.txt', 'r', encoding='utf-8') as f:
    file_content = f.read()
    # 正则规则说明:-? 匹配0或1个负号,\d+ 匹配1个及以上连续数字
    all_nums = re.findall(r'-?\d+', file_content)
    for num_str in all_nums:
        total += int(num_str)
print("The sum is ", total)

方法二:原生字符遍历拼接(无依赖)

如果不想引入正则模块,可以通过临时变量缓存当前正在识别的数字字符串,逐字符判断拼接,遇到非数字字符时将缓存的有效数字转成整数累加:

total = 0
with open('file6.txt', 'r', encoding='utf-8') as f:
    file_content = f.read()

current = ''
for c in file_content:
    # 负号仅在当前无缓存内容时作为数字开头加入缓存
    if c == '-' and not current:
        current += c
    # 数字字符直接加入缓存
    elif c.isdigit():
        current += c
    # 遇到非数字字符,若缓存中是有效数字则累加,清空缓存
    else:
        if current and current != '-':
            total += int(current)
        current = ''
# 遍历结束后处理文件末尾可能存在的最后一个数字
if current and current != '-':
    total += int(current)

print("The sum is ", total)
验证效果

针对给出的测试文件,两种修正代码运行后均输出The sum is 11,符合预期;当文件中包含负数(如-3、-20)、更长位数的整数时,也能正确提取并计算总和。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:01:04