Python Countdown Timer Example
A countdown timer is a great beginner Python project. It helps you practice variables, loops, and pauses with sleep().
This example shows how to build a simple countdown timer that:
- counts down one number at a time
- waits 1 second between numbers
- prints a final message when it finishes
Start with the basic version first. Once it works, you can safely change the starting number or add user input.
Quick example #
import time
seconds = 5
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
print("Time's up!")
This is the fastest working version. It counts down from 5 to 1, waits 1 second between numbers, then prints a finish message.
What this example builds #
This script creates:
- A countdown that prints one number at a time
- A pause of 1 second between each number
- A final message when the countdown ends
It is a good first project for practicing:
- variables
whileloops- the
time.sleep()function
Before you start #
You do not need much to follow this example.
It helps if you already know:
- basic variables
- the idea of a
whileloop, or are willing to follow one simple loop - how to run a Python file
You also need Python installed.
This example uses Python’s built-in time module. You can learn more in this Python time module overview.
Simple countdown timer example #
Here is the full script again:
import time
seconds = 5
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
print("Time's up!")
This version works like this:
- Start with a number stored in a variable
- Keep looping while the number is greater than
0 - Print the current number
- Pause for 1 second
- Subtract
1 - Print a final message after the loop ends
How the code works #
Let’s go through it line by line.
import time #
import time
This gives your program access to the time module.
Without this line, time.sleep(1) will not work.
seconds = 5 #
seconds = 5
This sets the starting value for the countdown.
If you change it to 10, the timer will count down from 10 instead.
while seconds > 0 #
while seconds > 0:
This means:
- keep running the loop
- only while
secondsis greater than0
When seconds becomes 0, the loop stops.
If you are new to loops, see Python while loops explained.
print(seconds) #
print(seconds)
This shows the current countdown number on the screen.
time.sleep(1) #
time.sleep(1)
This pauses the program for 1 second.
It does not print anything by itself. It only makes the program wait.
seconds -= 1 #
seconds -= 1
This reduces seconds by 1 each time through the loop.
It is the same as writing:
seconds = seconds - 1
This line is very important. Without it, the countdown would never move toward 0.
Final message #
print("Time's up!")
This line runs only after the loop finishes.
That is why you see the message at the end, not during the countdown.
Expected output #
When you run the script, you should see something like this:
5
4
3
2
1
Time's up!
There will be a 1-second pause between each number.
Version that gets user input #
You can also ask the user for the starting number.
import time
seconds = int(input("Enter the number of seconds: "))
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
print("Time's up!")
How this version is different #
input()asks the user to type somethinginput()returns textint()converts that text to a whole number
So if the user types 5, Python turns it into the number 5.
If you want to learn more, see:
- Python input() function explained
- Python int() function explained
- How to convert user input to numbers in Python
Important note about bad input #
If the user types something like hello instead of a number, this line will fail:
seconds = int(input("Enter the number of seconds: "))
That raises a ValueError.
Example:
seconds = int(input("Enter the number of seconds: "))
If the input is not a valid whole number, read how to fix ValueError: invalid literal for int() with base 10.
Small improvements beginners can try #
Once the basic version works, try small changes like these:
- Change the finish message
- Start from a different number
- Add a message before the countdown starts
- Wrap the code in a function
- Build a later version that shows minutes and seconds
Example with a start message:
import time
seconds = 5
print("Starting countdown...")
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
print("Done!")
Example wrapped in a function:
import time
def countdown(seconds):
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
print("Time's up!")
countdown(5)
Common beginner mistakes #
These are the most common problems with simple countdown timers.
Forgetting to import time #
If you use time.sleep(1) without importing time, Python will raise a NameError.
Wrong:
seconds = 5
while seconds > 0:
print(seconds)
time.sleep(1)
seconds -= 1
Fix:
import time
Using input() without int() #
input() returns text, not a number.
Wrong:
seconds = input("Enter seconds: ")
If you try to compare that text with numbers in a loop, your program may fail or behave incorrectly.
Fix:
seconds = int(input("Enter seconds: "))
Forgetting to decrease the counter #
If you leave out this line:
seconds -= 1
the value never changes, so the loop may run forever.
Using the wrong loop condition #
This line controls when the countdown stops:
while seconds > 0:
If the condition is wrong, the timer may stop too early or never stop.
Expecting sleep() to print something #
time.sleep(1) only pauses the program. It does not display output.
Debugging tips #
If your countdown is not working, try these simple checks.
Print the counter value each loop #
print(seconds)
This helps you confirm that the value is changing.
Print a message inside the loop #
print("loop running")
If this prints forever, your loop condition or counter update is probably wrong.
Check the type of user input #
print(type(user_input))
This helps when you are working with input() and want to see whether you still have text instead of a number.
Problems and likely causes #
Common causes include:
NameErrorbecausetimewas used withoutimport timeValueErrorwhen converting non-number text withint()- an infinite loop because the counter is never decreased
- the wrong countdown length because the starting value is not what the user expected
Next steps #
After you get this version working, good next steps are:
- learn more about Python while loops
- practice with
input()andint() - try a timer that uses minutes and seconds
- build another small script like a Python timer script example or a Python stopwatch example
FAQ #
Why does my countdown timer not stop? #
Usually the counter is not being decreased inside the loop, or the loop condition is wrong.
Why do I need import time? #
Because sleep() is part of Python’s time module. It is not available automatically by itself.
Why does input() cause an error? #
input() returns text. You usually need int(input(...)) if you want to count down from a number.
Can I make the timer use minutes and seconds? #
Yes. That is a good next step after the simple version works.
See also #
- Python time module overview
- time.sleep() function explained
- Python while loops explained
- How to get user input in Python
- How to convert user input to numbers in Python
- How to fix
ValueError: invalid literal for int() with base 10
Copy the simple script first and run it as-is. Then try one small change, like starting from a different number or letting the user choose the countdown value.