Python: таймер обратного отсчёта

Сделаем простой таймер обратного отсчёта, который раз в секунду обновляет вывод в формате мм:сс прямо на одной строке терминала.


Что нужно знать


Пример: обратный отсчёт

import time

def countdown(time_sec):
    while time_sec:
        mins, secs = divmod(time_sec, 60)
        timeformat = '{:02d}:{:02d}'.format(mins, secs)
        print(timeformat, end='\r')
        time.sleep(1)
        time_sec -= 1

    print("stop")

countdown(5)

Как это работает

  • divmod(time_sec, 60) сразу возвращает пару чисел: целое количество минут и остаток в секундах. Это удобнее, чем считать по отдельности.

  • Форматирование {:02d} дополняет числа ведущим нулём, чтобы значения всегда были двузначными.

  • Аргумент end='\r' в print() ставит курсор в начало строки вместо перехода на новую — благодаря этому каждое следующее значение «перерисовывает» предыдущее.

  • time.sleep(1) приостанавливает программу на одну секунду между кадрами.

  • В конце каждой итерации значение time_sec уменьшается на единицу; когда оно становится равным 0, цикл завершается и печатается stop.