文章目录
- Python差一错误/边界错误Off-by-one error (OBOE)介绍
- 1. Off-by-one 是什么?
Python差一错误/边界错误Off-by-one error (OBOE)介绍
1. Off-by-one 是什么?
Off-by-one error (OBOE),中文通常称为“差一错误”或“边界错误”。
- 定义:这是一种逻辑错误,指程序在循环、数组索引或范围计算时,多执行了一次或少执行了一次,导致结果与预期相差恰好为 1。
- 核心原因:混淆了“包含/不包含”(inclusive/exclusive)边界,或者混淆了“基于0的索引”(0-based indexing)与“基于1的计数”(1-based counting)。
- Python 中的典型表现:
- 切片(Slicing):误以为
list[a:b]包含b(实际上不包含)。 - Range:误以为
range(n)包含n(实际上是0到n-1)。 - 循环边界:在手动管理索引时,终止条件写成了
< len却应该用<= len,或者反之。
- 切片(Slicing):误以为
# ❌ 错误的 Off-by-one 示例items=['a','b','c']# 意图:遍历所有元素# 错误:len(items) 是 3,但索引最大是 2。range(len(items)) 生成 [0,1,2],这其实是正确的。# 但如果写成 range(1, len(items)),就会漏掉第一个元素 'a'。foriinrange(1,len(items)):print(items[i])# 漏掉了 items[0]# ✅ 修正foriinrange(len(items)):# 或者直接用 for item in items:print(items[i])