Skip to main content
πŸ›‘οΈ Verified Technical Content: Written by Serhii Hrekov. | Last reviewed & updated in Git: July 21, 2026

What is an Off-by-One Error in Python? (Explained for Kids!)

Β· 4 min read
Serhii Hrekov
Senior Software Engineer & System Architect specializing in Python, Web Systems, Cloud Infrastructure & Automation

Have you ever counted your toys and accidentally said you had 11, but really only had 10? That's kind of what an off-by-one error is in Python!

It's a tiny mistake where your program counts 1 too many or 1 too few. These mistakes are super common, even for professional programmers.


Example 1: Counting with Ranges​

Let's say you want to print numbers from 1 to 10.

for i in range(1, 11):
print(i)

This is correct because range(1, 11) means "start at 1, stop before 11".

But if you write this:

for i in range(1, 10):
print(i)

❌ You only get numbers 1 to 9 - you're missing number 10. That's an off-by-one error!


Example 2: Getting the Last Item in a List​

Here's a list of your favorite cakes:

cakes = ["Chocolate", "Strawberry", "Vanilla", "Carrot"]

If you want the last cake, this is correct:

print(cakes[3])  # Carrot

Because the list starts at 0, the fourth item is at index 3.

But if you write:

print(cakes[4])

❌ You get an error! There is no cake at number 4 - you went 1 too far. Another off-by-one error.


Why Does This Happen?​

Because Python starts counting at 0. Most people start counting at 1. That's why it's easy to get confused.

# Example
toys = ["Bear", "Car", "Doll"]
print(toys[0]) # "Bear", the first toy!

Always remember: Python starts at zero. So:

  • First item = index 0
  • Second item = index 1
  • Third item = index 2

Tips to Avoid Off-by-One Errors​

  • Always check if your loop should go to or before the last number.
  • Remember range(a, b) goes from a to b-1.
  • Check list lengths with len() before accessing an item.
  • Use -1 to get the last item in a list:
print(cakes[-1])  # Carrot

Summary​

Off-by-one errors are tiny counting mistakes in Python. They happen when:

  • You loop too far or not far enough
  • You access a list index that's 1 too big or small

But now that you know about them, you can catch them like a debugging superhero πŸ¦Έβ€β™‚οΈ!

Happy coding!

More on python