Python Stopwatch Example

Build a simple stopwatch in Python that measures elapsed time. This example uses the time module and shows, step by step, how to record a start time, record an end time, and calculate the difference.

If you are new to timing code in Python, this is a good first example because it uses only a few lines of code and one standard library module.

Quick example

import time

input("Press Enter to start the stopwatch...")
start_time = time.time()

input("Press Enter to stop the stopwatch...")
end_time = time.time()

elapsed = end_time - start_time
print(f"Elapsed time: {elapsed:.2f} seconds")

This is the simplest stopwatch version. It starts when you press Enter and stops when you press Enter again.

What this example does

This stopwatch script:

  • Measures how much time passes between two user actions
  • Uses time.time() to get the current time in seconds
  • Calculates elapsed time by subtracting the start time from the end time
  • Prints the result in a readable format

How the basic stopwatch works

The basic idea is simple:

  • Ask the user to press Enter to begin
  • Store the current time in a variable like start_time
  • Ask the user to press Enter again to stop
  • Store the current time in end_time
  • Subtract start_time from end_time
  • Display the result with formatting such as .2f for two decimal places

Here is the full example again:

import time

input("Press Enter to start the stopwatch...")
start_time = time.time()

input("Press Enter to stop the stopwatch...")
end_time = time.time()

elapsed = end_time - start_time
print(f"Elapsed time: {elapsed:.2f} seconds")

Example output:

Press Enter to start the stopwatch...
Press Enter to stop the stopwatch...
Elapsed time: 3.47 seconds

Code walkthrough points

import time

import time

This line gives your program access to Python's time-related functions.

If you want a broader introduction, see the Python time module overview.

input() pauses the program

input("Press Enter to start the stopwatch...")

The input() function waits until the user presses Enter. That makes it useful for a simple start-and-stop stopwatch.

If you need help with this part, see how to get user input in Python.

time.time() gets the current time

start_time = time.time()

time.time() returns the current Unix timestamp as a floating-point number. That means the value includes fractions of a second.

Later, the script does the same thing again:

end_time = time.time()

You can learn more here: time.time() explained.

Subtracting timestamps gives elapsed time

elapsed = end_time - start_time

This is the key step.

  • start_time is the moment the stopwatch began
  • end_time is the moment it stopped
  • The difference is the elapsed time in seconds

f-strings make output easier to read

print(f"Elapsed time: {elapsed:.2f} seconds")

This uses an f-string to insert the value of elapsed into the text.

The .2f part means:

  • show the number as a floating-point value
  • keep 2 digits after the decimal point

So a value like 3.472891 becomes 3.47.

Small improvements to show

Once the basic version works, you can improve it in a few useful ways.

Round the output to 2 decimal places

The first example already does this with:

print(f"Elapsed time: {elapsed:.2f} seconds")

Without formatting, the result may show too many decimal places.

Show minutes and seconds

For longer times, minutes and seconds are easier to read than a decimal number.

import time

input("Press Enter to start the stopwatch...")
start_time = time.time()

input("Press Enter to stop the stopwatch...")
end_time = time.time()

elapsed = end_time - start_time

minutes = int(elapsed // 60)
seconds = elapsed % 60

print(f"Elapsed time: {minutes} minute(s) and {seconds:.2f} second(s)")

Example output:

Elapsed time: 1 minute(s) and 12.35 second(s)

Handle KeyboardInterrupt

If the user stops the program with Ctrl+C, Python raises a KeyboardInterrupt. You can handle that so the program exits more cleanly.

import time

try:
    input("Press Enter to start the stopwatch...")
    start_time = time.time()

    input("Press Enter to stop the stopwatch...")
    end_time = time.time()

    elapsed = end_time - start_time
    print(f"Elapsed time: {elapsed:.2f} seconds")

except KeyboardInterrupt:
    print("\nStopwatch cancelled.")

Wrap the logic in a function

Putting the code in a function makes it easier to reuse later.

import time

def run_stopwatch():
    input("Press Enter to start the stopwatch...")
    start_time = time.time()

    input("Press Enter to stop the stopwatch...")
    end_time = time.time()

    elapsed = end_time - start_time
    print(f"Elapsed time: {elapsed:.2f} seconds")

run_stopwatch()

This is a good step if you want to turn the stopwatch into a larger program.

Beginner mistakes to watch for

Common beginner mistakes with this example include:

  • Forgetting to import the time module
  • Using time.sleep() instead of time.time() for measuring elapsed time
  • Trying to subtract strings instead of numeric time values
  • Overwriting variable names like time with your own variable

time.sleep() is not the same thing

A very common confusion is mixing up time.sleep() and time.time().

  • time.time() gets the current time
  • time.sleep() pauses the program

So this is for measurement:

now = time.time()

And this is for pausing:

time.sleep(2)

If you want to understand the difference better, see time.sleep() explained.

Common mistakes and debugging

Here are some common causes of problems:

  • NameError if time is used without import time
  • AttributeError if a variable named time replaces the module name
  • Confusion between pausing code and measuring time
  • Incorrect indentation when placing code inside a function or loop

For example, this causes a problem because time is no longer the module:

import time

time = "hello"
print(time.time())

Python will fail because time now refers to a string, not the module.

Helpful debugging commands

You can use these commands or print statements while testing:

python stopwatch.py
print(start_time)
print(end_time)
print(elapsed)

You can also trace the script step by step:

python -m trace --trace stopwatch.py

If you are new to debugging, see the beginner guide to debugging Python code.

FAQ

Is this a real stopwatch that updates on the screen?

No. This basic version only measures the time between start and stop. A live updating stopwatch would need a loop and repeated output.

Why use time.time() here?

It returns the current time in seconds, so you can subtract two values to find elapsed time.

Can I show minutes and seconds instead of decimal seconds?

Yes. You can divide the elapsed time into minutes and remaining seconds before printing.

What is the difference between this and time.sleep()?

time.sleep() pauses the program. It does not calculate elapsed time for you.

See also

Try improving this basic stopwatch next by adding a live display, formatting the result as minutes and seconds, or turning the code into a reusable function.