Advent of Code 2023 Day1求和异常求助:列表求和结果仅为1
问题排查与修正
先拆解你代码里的核心错误,分两部分说明:
一、每行数字处理逻辑的错误
first = digits[int()]:int()不传参数会直接报错,要取第一个数字应该写first = digits[0]。- 字符乘法逻辑错误:
ele * factor是把字符重复10次(比如'1'*10得到'1111111111'),完全不是你要的“第一个数字乘10”,正确做法是先转成整数再计算:int(first) * 10。 - 组合数字的方式错:
first + last是字符拼接(比如'1'+'2'得到'12'),虽然结果看起来对,但中间的循环处理完全多余,直接用整数计算更稳妥:int(first)*10 + int(last)。 - 单个数字的处理:当只有一个数字时,应该是
int(first)*10 + int(first)(比如数字7要变成77),而不是直接赋值字符类型的first。 - 写入文件的格式问题:每次追加
str(endnum + ',')会导致文件内容格式混乱,后续读取时无法正确解析数字。
二、求和逻辑的致命错误
你后面的求和代码完全没在计算数字总和:
for i in file:按行读取文件,x.append(i)把整行内容(比如12,38,15,77,)加到列表里。sum([(i in x) for i in x])是判断元素是否存在于列表,返回布尔值(True=1,False=0),第一次循环列表里只有一个元素,sum结果就是1,total +=1,这就是你只得到结果1的原因。
修正后的代码(去掉多余中间文件,直接计算总和)
total = 0 with open('ref', 'r') as f: for line in f: line = line.strip() digits = [char for char in line if char.isdigit()] if not digits: continue # 处理空行或无数字的情况,题目输入应该不会有这种情况 first_digit = int(digits[0]) last_digit = int(digits[-1]) current_num = first_digit * 10 + last_digit total += current_num print(total)
这段代码直接在处理每行时累加结果,逻辑清晰,测试示例输入会得到正确的142。
内容的提问来源于stack exchange,提问作者Pakoo_
相关产品推荐
相关产品推荐

