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

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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:28:16