Advent of Code 2021 Day1:数字递增计数代码结果异常求助
问题分析与解决:Advent of Code 2021 Day1统计递增次数错误
你的代码返回8而非预期7的核心原因是:初始值previous_number = float('-inf')让第一个数字被错误计入了递增次数。
题目要求统计“数字相较于前一个数字的递增次数”,但第一个数字没有前置数字,本不应被统计。而你的代码中,第一个数字199必然大于负无穷,导致第一次循环就执行了increases +=1,多算了一次。
修正方案
方案一:先读取第一个数字作为初始基准
increases = 0 with open('day 1 test input.txt') as file: # 先把所有有效数字读取到列表中 numbers = [int(line.strip()) for line in file if line.strip()] if not numbers: print(0) exit() # 第一个数字作为初始基准,从第二个数字开始比较 previous_number = numbers[0] for number in numbers[1:]: if number > previous_number: increases += 1 previous_number = number print(increases)
方案二:通过判断跳过第一个数字的比较
increases = 0 previous_number = None with open('day 1 test input.txt') as file: for line in file: line = line.strip() if not line: continue number = int(line) # 只有当存在前置数字时才进行比较 if previous_number is not None and number > previous_number: increases += 1 previous_number = number print(increases)
验证说明
测试数据中的有效递增次数为7次:
- 200>199
- 208>200
- 210>208
- 207>200
- 240>207
- 269>240
- 263>260
修正后的代码会准确统计这7次递增,返回预期结果。
内容的提问来源于stack exchange,提问作者Gavin Paz Soldan
相关产品推荐
相关产品推荐

