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
相关产品推荐
相关产品推荐

