读取文本时按括号字符加减累加值的Python代码问题排查
问题排查与解决方法
核心问题分析
- 遍历对象错误:你的代码用
for item in file是按行读取文件,item是一整行文本,不是单个括号字符。除非文件里每一行恰好只有一个(,否则item is up永远不成立,每次都会执行else分支让sum减1。如果文件行数为偶数,加减次数抵消后结果就是0;哪怕修改文件内容,只要逻辑错误,结果也不会正确。 - 字符串比较方式错误:用
is判断字符串相等是错误的,is是判断两个对象是否为同一个实例,正确的字符串内容比较应该用==。 - 未处理非括号字符:原代码遇到任何非
(的字符都会减1,包括换行符、空格等,会导致结果偏差。 - 文件未正确关闭:直接
open文件后没有调用close(),可能造成资源泄漏。
修正后的代码
方法一:读取全部内容后逐字符遍历(适合小文件)
sum = 0 with open("day12015.txt", "r") as file: # 读取文件全部内容为一个字符串 content = file.read() for char in content: if char == '(': sum += 1 elif char == ')': sum -= 1 print(sum)
方法二:逐行读取后再逐字符遍历(适合大文件,避免内存占用过高)
sum = 0 with open("day12015.txt", "r") as file: # 先逐行读取 for line in file: # 再遍历每行的每个字符 for char in line: if char == '(': sum += 1 elif char == ')': sum -= 1 print(sum)
关键修改说明
- 使用
with语句管理文件:自动在代码块结束后关闭文件,避免资源占用问题。 - 遍历单个字符:无论是读取全部内容还是逐行后再逐字符,都能准确判断每个括号。
- 精准判断括号:用
==比较字符内容,并且通过elif只处理),忽略其他无关字符,避免结果被干扰。
内容的提问来源于stack exchange,提问作者Lomba
相关产品推荐
相关产品推荐

