What is the while loop in Python?

Discover the while loop in Python: syntax, how it works, practical examples, infinite loops, break, continue, and best practices for your programs.
10 min read
Believemy logo

The while loop is one of the most fundamental control structures in Python. It allows you to repeat a block of instructions as long as a condition remains true. Whether you are a beginner or looking to deepen your knowledge, mastering the while loop is essential for writing dynamic and interactive programs. If you want to learn Python in a structured way, we recommend following our complete Python course which covers this topic in depth.

 

Definition of the while loop

In Python, the while keyword introduces a conditional loop. Unlike the for loop which iterates over a predefined sequence (such as a list or a tuple), the while loop continues to execute as long as the specified condition evaluates to True. As soon as this condition becomes False, the loop stops and the program execution continues with the code that follows.

The general syntax is as follows:

PYTHON
while condition:
    # block of instructions
    # executed as long as condition is True
Good to know

The while loop checks the condition before each iteration. If the condition is false from the start, the block of instructions will never be executed.

The process can be summarized in three steps:

  1. Condition evaluation: Python checks whether the expression is True or False.
  2. Block execution: if the condition is True, the indented block is executed.
  3. Return to step 1: after executing the block, Python goes back to evaluating the condition.

 

Practical examples of the while loop

Simple counter

The most classic example is a counter that increments until it reaches a given value:

PYTHON
counter = 0

while counter < 5:
    print(f"Counter: {counter}")
    counter += 1

print("Loop finished!")

This code outputs:

PYTHON
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Loop finished!

Notice that we use an f-string here to format the output. The counter variable is incremented at each iteration using the += operator. Without this increment, the condition counter < 5 would always remain true, creating an infinite loop.

 

User input with validation

The while loop is particularly useful for requesting user input and validating it:

PYTHON
password = ""

while password != "secret123":
    password = input("Enter the password: ")

print("Access granted!")

Here, the loop continues to ask for the password as long as the user does not enter the correct value. This is a very common pattern in interactive programs.

 

Iterative calculation: sum of integers

You can use while to perform iterative calculations:

PYTHON
n = 10
total = 0
i = 1

while i <= n:
    total += i
    i += 1

print(f"The sum of integers from 1 to {n} is: {total}")
# Outputs: The sum of integers from 1 to 10 is: 55

 

Traversing a list with while

Although the for loop is generally preferred for traversing sequences, you can also use while with an index:

PYTHON
fruits = ["apple", "banana", "cherry", "mango"]
index = 0

while index < len(fruits):
    print(f"Fruit {index + 1}: {fruits[index]}")
    index += 1

We use the len function here to get the size of the list and control the loop condition. Note that the enumerate function with a for loop would be more idiomatic in Python for this use case.

 

The break, continue, and else statements

The break statement

The break statement allows you to exit the while loop immediately, even if the condition is still true:

PYTHON
while True:
    response = input("Type 'quit' to exit: ")
    if response == "quit":
        print("Goodbye!")
        break
    print(f"You typed: {response}")

In this example, while True creates an intentional infinite loop. The break statement is the only way to exit this loop. This pattern is widely used for interactive menus or game loops.

Warning

Use while True with caution. Always make sure there is a path to a break to prevent your program from being stuck indefinitely.

 

The continue statement

The continue statement allows you to skip directly to the next iteration, ignoring the rest of the block:

PYTHON
number = 0

while number < 10:
    number += 1
    if number % 2 == 0:
        continue
    print(f"{number} is odd")

This code only displays odd numbers from 1 to 9. When number is even, continue skips the call to print and goes directly back to evaluating the condition.

 

The else clause

Few developers know about this Python feature: the while loop can be followed by an else clause. The else block is executed when the loop condition becomes False, but not if the loop is interrupted by a break:

PYTHON
# Example WITHOUT break (else executed)
counter = 0
while counter < 3:
    print(f"Iteration {counter}")
    counter += 1
else:
    print("The loop ended normally")

# Outputs:
# Iteration 0
# Iteration 1
# Iteration 2
# The loop ended normally
PYTHON
# Example WITH break (else NOT executed)
counter = 0
while counter < 3:
    if counter == 1:
        print("Interruption!")
        break
    print(f"Iteration {counter}")
    counter += 1
else:
    print("This message will not be displayed")

# Outputs:
# Iteration 0
# Interruption!

This feature is particularly useful for searches: the else block executes when the element has not been found.

 

Infinite loops: dangers and uses

An infinite loop occurs when the while loop condition never becomes False. This can be unintentional (a bug) or intentional (a design choice).

Unintentional infinite loop (bug)

PYTHON
# WARNING: This code creates an infinite loop!
x = 10
while x > 0:
    print(x)
    # Forgot to decrement x!
    # Missing: x -= 1

In this example, the variable x always stays at 10, so the condition x > 0 is always true. The program will never stop naturally. You will need to use Ctrl+C in the terminal to interrupt it.

 

Intentional infinite loop

Some situations justify the use of a controlled infinite loop:

PYTHON
import time

def simplified_server():
    """Simulates a server running continuously."""
    while True:
        print("Waiting for connection...")
        time.sleep(2)  # 2-second pause
        # In production, requests would be handled here
        # and there would be a proper shutdown mechanism

Servers, video game loops, and embedded systems often use while True loops as their main structure. Notice the use of a docstring to document the function defined with def.

 

Comparison between while and for

Criterionwhilefor
Main useConditional repetitionIteration over a sequence
Number of iterationsUnknown in advanceKnown or determined by the sequence
Risk of infinite loopHigh (if condition poorly managed)Low (iterates over a finite collection)
ReadabilityGood for complex conditionsExcellent for traversing sequences
else clauseYesYes
break/continue supportYesYes
Good to know

As a general rule, prefer for when you iterate over a known collection (list, tuple, dict, set), and use while when the stopping condition depends on a dynamic state.

 

Advanced use cases

Binary search algorithm

The while loop is ideal for implementing algorithms whose number of iterations is not known in advance:

PYTHON
def binary_search(sorted_list, target):
    """Searches for an element in a sorted list."""
    left = 0
    right = len(sorted_list) - 1

    while left <= right:
        middle = (left + right) // 2
        value = sorted_list[middle]

        if value == target:
            return middle
        elif value < target:
            left = middle + 1
        else:
            right = middle - 1

    return -1  # Element not found

# Usage
numbers = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
result = binary_search(numbers, 23)
print(f"Element found at index: {result}")  # Outputs: 5

 

Reading data with a sentinel

The sentinel pattern uses a special value to signal the end of input:

PYTHON
grades = []
grade = input("Enter a grade (or 'done' to finish): ")

while grade != "done":
    try:
        grades.append(float(grade))
    except ValueError:
        print("Invalid value, please enter a number.")
    grade = input("Enter a grade (or 'done' to finish): ")

if grades:
    average = sum(grades) / len(grades)
    print(f"Average of {len(grades)} grades: {average:.2f}")
else:
    print("No grades entered.")

 

Nested loops

You can nest while loops to work with multi-dimensional structures:

PYTHON
rows = 5
i = 1

while i <= rows:
    j = 1
    while j <= i:
        print("*", end=" ")
        j += 1
    print()  # New line
    i += 1

# Outputs:
# *
# * *
# * * *
# * * * *
# * * * * *
Warning

Nested loops can quickly become costly in terms of performance. If you nest while loops, make sure each loop has its own control variable and that the exit conditions are properly managed.

 

Best practices

Here are the essential best practices for using the while loop effectively in Python:

  1. Make sure the condition will evolve: verify that the variable tested in the condition is modified at each iteration to avoid infinite loops.
  2. Initialize your variables before the loop: declare and initialize any variable used in the condition before the while loop.
  3. Prefer for when possible: if you are iterating over a known sequence, a for loop is more readable and less error-prone.
  4. Use break sparingly: one break per loop is reasonable, but multiple break statements make the code hard to follow.
  5. Add explanatory comment: comment the logic of your complex loops to improve maintainability.
  6. Limit nesting depth: if you have more than two levels of nesting, consider refactoring with dedicated functions.
  7. Think about performance: in a while loop, avoid unnecessary costly operations that would be repeated at each iteration.
PYTHON
# ❌ Bad practice
x = 10
while x > 0:
    print(x)  # x never changes → infinite loop

# ✅ Good practice
x = 10
while x > 0:
    print(x)
    x -= 1  # x is decremented → the loop will stop

 

Frequently asked questions

Question

What is the difference between while and for in Python?

The for loop is designed to iterate over sequences (list, tuple, dict, strings, etc.) whose size is known. The while loop is used when the number of iterations depends on a dynamic condition that can change at each iteration. In practice, if you know the number of repetitions in advance or if you are traversing a collection, use for. If you are waiting for a specific event or condition, use while.

 

Question

How to avoid an infinite loop with while in Python?

To avoid an infinite loop, make sure the while loop condition will eventually evaluate to False. This means that the variable(s) used in the condition must be modified inside the loop block. You can also use a safety counter (for example max_iterations) to limit the number of iterations, or use the break statement to exit the loop under certain conditions.

 

Question

Can you use else with a while loop in Python?

Yes, this is a feature specific to Python. The else clause after a while is executed when the loop condition becomes False naturally. However, if the loop is interrupted by a break, the else block is skipped. This is very useful for search algorithms where the else handles the "element not found" case.

 

Question

How to learn to master while loops and Python in general?

To master the while loop and the Python language as a whole, regular practice is essential. Start with simple exercises (counters, user input) then progress to more complex algorithms. We recommend following our dedicated Python course on Believemy, which offers progressive exercises and concrete projects to guide you from beginner to advanced level.

Related terms

Discover our python glossary

Browse the terms and definitions most commonly used in development with Python.

Share this article

Want to help us? Share this article on your networks or even better: on your site, in an article or in your newsletter.