Создайте таймер обратного отсчета в Python

В этом руководстве рассказывается, как создать таймер обратного отсчета в Python.

Код принимает ввод того, как долго должен быть обратный отсчет, и начинает обратный отсчет сразу после ввода ввода.

Использование модуля time и функции sleep() для создания таймера обратного отсчета в Python

Модуль time - это общий модуль Python, содержащий вспомогательные функции и переменные, связанные со временем. Основная функция, используемая в этом руководстве, - это функция sleep(), которая представляет собой асинхронную функцию, которая приостанавливает выполнение одного потока на n секунд.

Если ваша программа однопоточная, как в этом руководстве, то функция sleep() остановит выполнение всей программы до тех пор, пока не будет достигнуто заданное время. Благодаря этому, наряду с подтвержденным пользовательским вводом, мы можем создать простой таймер обратного отсчета в Python.

Первое, что нужно сделать, это импортировать модуль time для использования функции sleep().

import time

Затем объявите функцию, которая будет работать как таймер обратного отсчета. Назовем эту функцию countdown(). Функция принимает единственный параметр: количество секунд (num_of_secs), до которого будет отсчитывать таймер.

Переменная num_of_secs будет непрерывно уменьшаться в цикле, пока не достигнет 0 (что переводится в False и завершает цикл без каких-либо дополнительных условий).

Внутри цикла отформатируйте входную переменную num_of_secs в формат MM:SS и распечатайте ее каждый раз, когда она уменьшается. Для этого используйте встроенную функцию Python divmod(), которая принимает два числа и возвращает произведение и остаток от двух чисел соответственно. Затем отформатируйте результат кортежа divmod() в формат MM:SS с помощью встроенной строковой функции format().

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)

{:02d} форматирует аргумент в 2-значное целое число (из-за символа 02d). Если целое число меньше двух цифр, к нему добавляются ведущие 0.

Затем при каждой итерации цикла вызывайте time.sleep(1), что означает, что каждая итерация откладывается на 1 секунду и будет продолжаться по истечении.

Перед вызовом функции sleep() распечатайте отформатированную строку, напоминающую формат MM:SS текущего значения входной переменной num_of_secs.

Кроме того, добавьте еще один аргумент в функцию print() со свойством end и значением /r, который представляет собой новую строку для имитации поведения реального таймера. Этот аргумент перезаписывает предыдущий вывод print() каждый раз при выполнении цикла, перезаписывая все до того, как возврат каретки обозначен символом /r.

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        print(min_sec_format, end='/r')
        time.sleep(1)
        num_of_secs -= 1
        
    print('Countdown finished.')
        

После этого уменьшите входную переменную min_sec_format на 1 после выполнения всех предыдущих строк.

Наконец, распечатайте заключительный оператор вне цикла, который означает, что таймер завершил выполнение. Он завершает метод countdown() и будет работать как таймер обратного отсчета.

Следующее, что нужно сделать, - предоставить пользователю возможность ввести количество секунд для запуска обратного отсчета. Для этого мы можем использовать встроенную функцию input() для приема пользовательского ввода.

Перехватите ввод в переменную и используйте его в качестве аргумента для функции обратного отсчета. Обязательно приведите входную переменную к int для проверки.

inp = input('Input number of seconds to countdown: ')
countdown(int(inp))

Весь код должен выглядеть так:

import time

def countdown(num_of_secs):
    while num_of_secs:
        m, s = divmod(num_of_secs, 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        print(min_sec_format, end='/r')
        time.sleep(1)
        num_of_secs -= 1
        
    print('Countdown finished.')

inp = input('Input number of seconds to countdown: ')
countdown(inp)

Выход:

Countdown finished.

Окончательный результат будет отображать Countdown Finished, но будет имитировать работу таймера и очищать каждую строку print(), пока не достигнет 00:00.

Итак, если вы введете 5 секунд, трассировка стека будет выглядеть так:

00:05
00:04
00:03
00:02
00:01
Countdown finished.

Вот и все. Теперь вы успешно создали простой таймер обратного отсчета в Python, используя только встроенные функции и функцию sleep() из модуля time.

Сопутствующая статья - Python Timer

  • Функции таймера в Python