Python While Loops: When For Loops Aren't Enough
A vending machine doesn't know how many coins you'll insert. It just keeps waiting: "while the total is less than the price, keep accepting coins." It can't use a for loop because it doesn't know the number of iterations in advance. It needs a while loop.
In this tutorial, you'll learn how to use while loops for situations where you need to keep repeating something until a condition changes. You'll also see how to avoid infinite loops, how to use break to escape early, and when to choose while over for.
By the end, you'll have two kinds of loops in your toolkit — for for iterating over known collections, and while for repeating until a condition is met.
How Does a While Loop Work in Python?
A while loop checks a condition before each iteration. If the condition is True, the loop body runs. Then Python goes back to the top and checks the condition again. This repeats until the condition becomes False.
Think of it like a guard at a door who checks your badge every time you try to enter. As long as your badge is valid, you can go in. The moment it expires, the door stays shut.
Here's the flow: Python checks count <= 5. Since count starts at 1, the condition is True, so the body runs — it prints count and adds 1. Then Python checks again. This continues until count reaches 6, at which point 6 <= 5 is False and the loop stops.
The critical piece is that something inside the loop must eventually make the condition `False`. Here, count += 1 ensures the counter grows until it exceeds 5. Without it, the loop would run forever.
How Do You Count and Accumulate with While Loops?
While loops are great for tasks where you need to process data until you reach a specific target. You set up a condition, and the loop keeps running until the condition is satisfied.
We couldn't easily write this as a for loop because we don't know in advance how many doublings it will take. The while loop keeps going until the value exceeds 1000, and we count how many times it ran.
The loop adds consecutive numbers (1, 2, 3, ...) until the total reaches or exceeds 100. After the loop, number is one more than the last number added because the number += 1 line runs after each addition. That's why we print number - 1.
What Are Infinite Loops, and How Does break Work?
An infinite loop is a loop whose condition never becomes False. Sometimes this is a bug. But sometimes it's intentional — you create an infinite loop on purpose and use break to exit when you're ready.
# DON'T RUN THIS — it never stops!
count = 1
while count <= 5:
print(count)
# Oops, forgot count += 1while True:
answer = "yes"
print("Looping...")
if answer == "yes":
break
print("Escaped!")while True creates a loop that runs forever by default. The break statement immediately exits the loop, jumping to the first line after it. This pattern is very common for menus, game loops, and input validation.
The loop keeps running until someone guesses the secret number. We can't predict when that will happen, so while True with break is the natural pattern. The break only runs when guess == secret, so the loop exits at exactly the right moment.
How Do You Validate Input with a While Loop?
One of the most practical uses of while loops is input validation — asking for data repeatedly until the user gives you something valid. This is the pattern behind every form that says "please enter a valid email address."
The loop keeps asking until it gets a valid age. Invalid inputs like "abc" or negative numbers trigger error messages, and the loop repeats. Only when a valid age is provided does the condition age <= 0 or age > 120 become False, and the loop exits.
Notice the continue statement — when the input isn't a number, we skip the rest of the loop body and go straight back to the top. You'll learn more about continue in the next tutorial.
When Should You Use while vs for?
Both for and while can repeat code, but they're designed for different situations. Choosing the right one makes your code clearer and less error-prone.
Use for when... | Use while when... |
|---|---|
| You're iterating over a collection | You're waiting for a condition to change |
| You know how many times to loop | You DON'T know how many times to loop |
| You're processing each item in a list | You're repeating until something happens |
| Example: print each student's name | Example: keep asking until valid input |
The for loop is perfect for the fruits list — we know exactly what we're iterating over. The while loop is perfect for the powers of 3 — we don't know in advance how many multiplications it will take to pass 100.
names = ["Alice", "Bob", "Charlie"]
i = 0
while i < len(names):
print(names[i])
i += 1names = ["Alice", "Bob", "Charlie"]
for name in names:
print(name)Practice Exercises
Now it's your turn to write while loops! These exercises focus on the kinds of problems where while loops shine: unknown iteration counts, condition-based stopping, and accumulation.
Remember: a while loop needs something that changes inside it. If your loop runs forever, check that you're updating the variable in the condition.
Use a while loop to print a countdown from 5 to 1, followed by "Blastoff!" on the last line.
Expected output:
5
4
3
2
1
Blastoff!Starting from 1, keep doubling a number until it exceeds 500. Print each value as you go (including the first value that exceeds 500). Then print the final result.
Expected output:
1
2
4
8
16
32
64
128
256
512
First power of 2 over 500: 512Hint: use a while True loop with a break after the value exceeds 500.
Without running the code, predict exactly what it will print. Trace through each iteration carefully, paying attention to when the condition is checked and when x changes.
Then run it to check your answer.
This code is supposed to count how many digits are in a number by repeatedly dividing by 10. But it has a bug — it gives the wrong answer for the number 9999. Fix the code so it prints:
9999 has 4 digitsDon't change the number or the final print statement.
The Collatz conjecture is a famous math problem. Start with any positive integer. If it's even, divide by 2. If it's odd, multiply by 3 and add 1. Repeat until you reach 1.
Starting with n = 6, print each value in the sequence (including 6 and 1), then print how many steps it took.
Expected output:
6
3
10
5
16
8
4
2
1
Steps: 8Summary: Python While Loops
| Here's everything you learned about while loops: | ||
|---|---|---|
| --- | --- | --- |
while condition: | Loop until condition is False | while count > 0: |
while True: + break | Loop forever, exit manually | Game loops, menus |
| Counting loop | Count up or down to a target | while count <= 10: |
| Accumulator loop | Build up a total or result | while total < 100: |
| Validation loop | Repeat until input is valid | while age <= 0: |
Key rules to remember:
Falsebreak immediately exits the loopfor when you know what to iterate overwhile when you need to repeat until a condition changesWhat's Next?
You've now seen break used to exit a loop early. But there are two more loop control statements: continue (skip the rest of this iteration) and pass (do nothing). In the next tutorial — [Python break, continue, pass](/python/python-break-continue-pass) — you'll master all three and learn when each one is the right choice.